======= */ const isEqual = (obj1, obj2) => { /** * More accurately check the type of a JavaScript object * @param {Object} obj The object * @return {String} The object type */ function getType(obj) { return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); } function areArraysEqual() { // Check length if (obj1.length !== obj2.length) return false; // Check each item in the array for (let i = 0; i < obj1.length; i++) { if (!isEqual(obj1[i], obj2[i])) return false; } // If no errors, return true return true; } function areObjectsEqual() { if (Object.keys(obj1).length !== Object.keys(obj2).length) return false; // Check each item in the object for (let key in obj1) { if (Object.prototype.hasOwnProperty.call(obj1, key)) { if (!isEqual(obj1[key], obj2[key])) return false; } } // If no errors, return true return true; } function areFunctionsEqual() { return obj1.toString() === obj2.toString(); } function arePrimativesEqual() { return obj1 === obj2; } // Get the object type let type = getType(obj1); // If the two items are not the same type, return false if (type !== getType(obj2)) return false; // Compare based on type if (type === "array") return areArraysEqual(); if (type === "object") return areObjectsEqual(); if (type === "function") return areFunctionsEqual(); return arePrimativesEqual(); }; /***/ }) /******/ }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2FuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYmV0d2Vlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYm9vbGVhblNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZlR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuU2VxdWVuY2VPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY29tcG9uZW50V2l0aE5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2Rpc2FsbG93ZWRJZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvZWxlbWVudFR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9leHBsaWNpdE51bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9yZW5kZXJhYmxlQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9oZWxwZXJzL3dyYXBWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9rZXlzT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlUHJvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9uQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL25vbk5lZ2F0aXZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvbm9uTmVnYXRpdmVOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL251bWVyaWNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ByZWRpY2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3JlZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVxdWlyZWRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVzdHJpY3RlZFByb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NlcXVlbmNlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NoYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9zdHJpbmdFbmRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvc3RyaW5nU3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvdW5pcXVlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3VuaXF1ZUFycmF5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ZhbHVlc09mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC93aXRoU2hhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5maW5kL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2Nocm9tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29uc29saWRhdGVkLWV2ZW50cy9saWIvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zdHlsZXMvdWkuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb2N1bWVudC5jb250YWlucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9jdW1lbnQuY29udGFpbnMvcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvSW50ZWdlck9ySW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9JbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Ficy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvNS9mbG9vci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tYXhTYWZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9yZWdleFRlc3Rlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXMyMDE1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb25zLWhhdmUtbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXIvbGliL0xhbmd1YWdlTGludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMtZXhhY3QvYnVpbGQvaGVscGVycy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzLWV4YWN0L2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWN0aXZpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9haXJwbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtb2N0YWdvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsZXJ0LXRyaWFuZ2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tY2VudGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tanVzdGlmeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsaWduLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hbGlnbi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FwZXJ0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJjaGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24tY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC1jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy11cC1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXQtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2F3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmFyLWNoYXJ0LTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXItY2hhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmF0dGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JlbGwtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmVsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JsdWV0b290aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JvbGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLW9wZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYm9va21hcmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9icmllZmNhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYWxlbmRhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NhbWVyYS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYW1lcmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbi11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NoZXZyb25zLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbnMtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nocm9tZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NsaXBib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQtZHJpenpsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLWxpZ2h0bmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLXJhaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jbG91ZC1zbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29kZXBlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvZGVzYW5kYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29mZmVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvbW1hbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb21wYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29weS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1sZWZ0LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItbGVmdC11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1yaWdodC1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcHUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcmVkaXQtY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcm9zc2hhaXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kYXRhYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Rpc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kaXZpZGUtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZGl2aWRlLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RvbGxhci1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZG93bmxvYWQtY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kb3dubG9hZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RyaWJiYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZHJvcGxldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9leHRlcm5hbC1saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZXllLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2V5ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZhY2Vib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmFzdC1mb3J3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmVhdGhlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpZ21hLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsZS1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtcGx1cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9maWxtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmxhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZm9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJhbWVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0LWJyYW5jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2dpdC1jb21taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0aHViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0bGFiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2xvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ncmlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGFyZC1kcml2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWFkcGhvbmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGVhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWxwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hleGFnb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ob21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbmJveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2luZm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbnN0YWdyYW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pdGFsaWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXllcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXlvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saWZlLWJ1b3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbGlua2VkaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9hZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYWlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWFwLXBpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21heGltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYXhpbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21laC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tZXNzYWdlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWljLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbmltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9taW5pbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW9uaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLWhvcml6b250YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLXZlcnRpY2FsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW91c2UtcG9pbnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tdXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24tMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhcGVyY2xpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGVuLXRvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wZXJjZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWZvcndhcmRlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWluY29taW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtbWlzc2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb3V0Z29pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9waG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BpZS1jaGFydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsYXktY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsdXMtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGx1cy1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG9ja2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG93ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wcmludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZWZyZXNoLWNjdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3JlZnJlc2gtY3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXdpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yb3RhdGUtY2N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcm90YXRlLWN3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcnNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2F2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NjaXNzb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NlcnZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hhcmUtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoYXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hpZWxkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoaWVsZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWJhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWNhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zaHVmZmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2lkZWJhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtYmFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtZm9yd2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NsYWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2xhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc21hcnRwaG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NtaWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc3BlYWtlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N0YXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdG9wLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bnJpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWJsZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YXJnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90ZXJtaW5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RoZXJtb21ldGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdGh1bWJzLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90aHVtYnMtdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90b2dnbGUtbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RvZ2dsZS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Rvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmFzaC0yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVsbG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVuZGluZy1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJlbmRpbmctdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmlhbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RydWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VtYnJlbGxhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5sb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLWNsb3VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlci1jaGVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VzZXItbWludXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXBsdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvaWNlbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdm9sdW1lLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92b2x1bWUteC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3dhdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2lmaS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy93aWZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2luZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3gtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveW91dHViZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3phcC1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96b29tLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvem9vbS1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvQnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvRGlzY2xvc3VyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSWNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L0xhYmVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHRhcmVhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9UaXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RpdGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3M/NTMwYiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvdHJhY2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9kYXJrLW1vZGUtdGh1bWJuYWlsLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1kYXJrLWRlc2lnbi1saW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGVzaWduLWxpbnRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1oZWxwLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLWJvb2xlYW4tb3BlcmF0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLWVsbGlwc2Uuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItbGluZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci1wb2x5Z29uLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXJlY3RhbmdsZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci10ZXh0LnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLW1vcmUuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tdGFibGUtY3JlYXRvci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi10aGVtZS1zd2l0Y2hlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvbGlnaHQtbW9kZS10aHVtYm5haWwuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9BcHAudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvQ29sb3JMaW50ZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvQ29sb3JUaWxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvRGVzaWduTGludGVyL0Rlc2lnbkxpbnRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9MYW5ndWFnZUxpbnRlclBsdWdpbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0hvbWUudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9QbHVnaW5Db250ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9SZXNpemVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvVGFibGVDcmVhdG9yL0NvbHVtbkNvbmZpZ3VyYXRpb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UYWJsZUNyZWF0b3IvRGltZW5zaW9uc1NlbGVjdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RhYmxlQ3JlYXRvci9UYWJsZUNyZWF0b3IudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UaGVtZVN3aXRjaGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3N0eWxlcy91aS5jc3M/MzRjNyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3V0aWxpdHktZnVuY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFD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QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtDQUFrQyxFQUFFLGFBQWEsRUFBRTtBQUNuRCxtQ0FBbUMsRUFBRSxhQUFhLEVBQUU7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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OztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0JBQWdCO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3Q0FBd0MsMkJBQTJCO0FBQ25FLHdDQUF3QyxxQ0FBcUM7O0FBRTdFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRSxFQUFFOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQsaUJBQWlCO0FBQ3BFOztBQUVBLG9DQUFvQyx3QkFBd0I7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsOEJBQThCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGFBQWE7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGVBQWU7QUFDeEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsMEJBQTBCO0FBQ2xFLHdDQUF3QywwQkFBMEI7QUFDbEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixZQUFZO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx5REFBeUQsWUFBWTtBQUNyRSxTQUFTO0FBQ1Q7QUFDQSx5REFBeUQsWUFBWTtBQUNyRSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSxnQ0FBZ0MsZ0NBQWdDO0FBQ2hFO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7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QUFVLElBQTRFO0FBQ3hGO0FBQ0EsRUFBRSxpQ0FBcUIsRUFBRSxtQ0FBRTtBQUMzQjtBQUNBLEdBQUc7QUFBQSxvR0FBQztBQUNKLEVBQUUsTUFBTSxFQUVOO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3pERDtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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O0FBQ2pELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEVBQXVCO0FBQy9CLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0hBQTBDO0FBQ2xELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsb0ZBQTJC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QU0sWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sVUFBVSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxVQUFVLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxVQUFVLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsV0FBVyxRQUFRLEtBQUssVUFBVSxRQUFRLEtBQUssTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLFNBQVMsS0FBSyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxNQUFNLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFB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QUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE1BQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLFdBQVcsWUFBWSxXQUFXLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sTUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLGFBQWEsTUFBTSxZQUFZLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxVQUFVLFVBQVUsVUFBVSxNQUFNLFVBQVUsS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sYUFBYSxNQUFNLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLFdBQVcsS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sYUFBYSxNQUFNLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxNQUFNLFVBQVUsWUFBWSxXQUFXLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sTUFBTSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLEtBQUssT0FBTyxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsTUFBTSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsV0FBVyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxTQUFTLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsT0FBTyxLQUFLLEtBQUssWUFBWSxNQUFNLE1BQU0sWUFBWSxNQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxL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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDRCQUE0QjtBQUM1QixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsS0FBcUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUMsNEZBQTRGLFNBQU07QUFDN0k7QUFDQTs7QUFFQSxtQkFBbUIsZ0NBQWdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDam1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxJ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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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QUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBaUU7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRkFBa0Y7QUFDbEY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHNDQUFzQzs7QUFFdEMsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLHlFQUF5RTtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7O0FBRXpELG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4R0FBOEc7O0FBRTlHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7O0FBR0EsK0VBQStFO0FBQy9FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZHQUE2RztBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJFQUEyRSxvR0FBb0csa0NBQWtDO0FBQ3ROO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUssb0dBQW9HO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFLDhGQUE4RjtBQUM5Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHdCQUF3QjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBLCtFQUErRTtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSwwdkJBQTB2Qjs7QUFFMXZCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEMsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSywrQ0FBK0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOzs7QUFHQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdELDBEQUEwRDs7QUFFMUQsb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQSwwSEFBMEg7QUFDMUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7O0FBRUE7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQThEO0FBQzlELHFEQUFxRDtBQUNyRCwyREFBMkQ7QUFDM0QsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbURBQW1ELHlEQUF5RDtBQUM1Ryw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyx5QkFBeUI7OztBQUdsQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOzs7QUFHVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1QseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTOzs7QUFHVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsa0dBQWtHO0FBQ2xHLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNklBQTZJOztBQUU3STtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULGtFQUFrRSw0Q0FBNEM7QUFDOUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtJQUFrSTtBQUNsSTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0lBQWtJO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SkFBOEoseUNBQXlDO0FBQ3ZNO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGtEQUFrRDtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDZCQUE2QjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMLHVFQUF1RTs7QUFFdkUsVUFBVSw2QkFBNkI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGlDQUFpQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTCx1RUFBdUU7O0FBRXZFLFVBQVUsWUFBWTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxNQUFNO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCLG9DQUFvQzs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJDQUEyQztBQUNoRDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQzs7QUFFM0MscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUcsb0NBQW9DOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyx1QkFBdUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLHlLQUF5SywwQ0FBMEM7QUFDbk47QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7OztBQUdUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBDQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0Q0FBNEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0EsR0FBRzs7O0FBR0gsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0wsd0NBQXdDOztBQUV4QztBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlOQUF5TixHQUFHOztBQUU1TjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOzs7QUFHWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsbUhBQW1IO0FBQ25IOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7O0FBR0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLG9DQUFvQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBLHFIQUFxSDs7QUFFckgsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckUsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVzs7QUFFWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGOztBQUV0RjtBQUNBO0FBQ0EsbUJBQW1COzs7QUFHbkI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUEsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEMsS0FBSyxNQUFNLEVBS047QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxSEFBcUg7O0FBRXJIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0Esc0VBQXNFOztBQUV0RTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBLEtBQUssa0NBQWtDO0FBQ3ZDOzs7QUFHQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHlFQUF5RTs7QUFFekU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYix5TkFBeU4scUNBQXFDLHdGQUF3RiwyQkFBMkIscUJBQXFCLFFBQVEsWUFBWTtBQUMxWixhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU8sNElBQTRJO0FBQ25KO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EscURBQXFEOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRywrQkFBK0I7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsK0JBQStCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUEsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87O0FBRVAsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsaUNBQWlDOztBQUVqQyw4QkFBOEI7O0FBRTlCLDBCQUEwQjs7QUFFMUIsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEOztBQUVyRCxrREFBa0Q7O0FBRWxELHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDOztBQUVBLDZDQUE2Qzs7QUFFN0MsNkNBQTZDOztBQUU3QztBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjs7QUFFQSxrREFBa0Q7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUEsK0NBQStDOztBQUUvQyw0R0FBNEc7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkY7O0FBRTNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtRUFBbUU7OztBQUduRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTCw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0VBQXdFOztBQUV4RTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOzs7QUFHNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCxnQ0FBZ0M7O0FBRWhDO0FBQ0EsR0FBRyxnQ0FBZ0M7OztBQUduQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsNENBQTRDO0FBQy9DOzs7QUFHQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssNkJBQTZCOzs7QUFHbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHNCQUFzQjtBQUN0Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDRCQUE0QjtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsMkNBQTJDOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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Q0wsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrQ0FBK0M7O0FBRS9DLHVDQUF1QztBQUN2Qzs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7O0FBRXJELHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJFQUEyRTs7QUFFM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5RUFBeUU7QUFDekU7QUFDQTs7QUFFQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0Esa0NBQWtDOztBQUVsQzs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wscUJBQXFCLHdCQUF3QjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0QsT0FBTzs7QUFFdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GOztBQUVuRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaU1BQWlNLGNBQWM7QUFDL007QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssRUFBRTtBQUNQOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsNkVBQTZFOztBQUU3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7OztBQ3JwekJhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1RDtBQUNGO0FBQ1M7QUFDRTtBQUNFO0FBQ0o7QUFDRTtBQUNOO0FBQ0U7QUFDVDtBQUNJO0FBQ0Y7QUFDa0I7QUFDSjtBQUNFO0FBQ1g7QUFDYTtBQUNiO0FBQ2U7QUFDYjtBQUNPO0FBQ0o7QUFDRTtBQUNYO0FBQ0Y7QUFDSDtBQUNVO0FBQ0g7QUFDYztBQUNqQjtBQUNDO0FBQ1A7QUFDVTtBQUNWO0FBQ1M7QUFDVDtBQUNRO0FBQ1Y7QUFDWTtBQUNGO0FBQ0c7QUFDUDtBQUNKO0FBQ2U7QUFDQTtBQUNiO0FBQ2E7QUFDQTtBQUNFO0FBQ047QUFDTTtBQUNBO0FBQ0U7QUFDTjtBQUNUO0FBQ0E7QUFDTTtBQUNSO0FBQ2U7QUFDSTtBQUNaO0FBQ0U7QUFDQTtBQUNUO0FBQ0Y7QUFDTTtBQUNRO0FBQ1Y7QUFD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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7QUFDYixXQUFXLGNBQWM7QUFDekIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxFQUFFO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFD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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSx5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QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsRUFBRTtBQUNiOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLEVBQUU7QUFDYjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxt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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsMEJBQTBCOztBQUUxQjtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUMxVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FB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QSxZQUFZLEVBQUU7QUFDZCxZQUFZLEVBQUU7QUFDZCxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFbUIiLCJmaWxlIjoidWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hcHAvaW5kZXgudHN4XCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGFuZFZhbGlkYXRvcjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gYW5kVmFsaWRhdG9yKHZhbGlkYXRvcnMpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbmQnO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FuZDogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhbmQ6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGFuZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsO1xuICAgIHZhbGlkYXRvcnMuc29tZShmdW5jdGlvbiAodmFsaWRhdG9yRm4pIHtcbiAgICAgIGZpcnN0RXJyb3IgPSB2YWxpZGF0b3JGbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciA9PSBudWxsID8gbnVsbCA6IGZpcnN0RXJyb3I7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBhbmRJc1JlcXVpcmVkKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICB2YWxpZGF0b3JzLnNvbWUoZnVuY3Rpb24gKHZhbGlkYXRvckZuKSB7XG4gICAgICBmaXJzdEVycm9yID0gdmFsaWRhdG9yRm4uaXNSZXF1aXJlZC5hcHBseSh2YWxpZGF0b3JGbiwgYXJncyk7XG4gICAgICByZXR1cm4gZmlyc3RFcnJvciAhPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiBmaXJzdEVycm9yID09IG51bGwgPyBudWxsIDogZmlyc3RFcnJvcjtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBuYW1lLCB2YWxpZGF0b3JzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYmV0d2VlblZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuZW50cmllc1wiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF92YWx1ZXNPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsdWVzT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBudW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG5vbi1OYU4gbnVtYmVyLlwiKSk7XG59XG5cbmZ1bmN0aW9uIG51bWJlck9yUHJvcHNGdW5jKHByb3BzLCBwcm9wTmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiOiBhIGZ1bmN0aW9uLCBvciBhIG5vbi1OYU4gbnVtYmVyIGlzIHJlcXVpcmVkXCIpKTtcbn1cblxuZnVuY3Rpb24gbG93ZXJDb21wYXJlKHZhbHVlLCBfcmVmKSB7XG4gIHZhciBndCA9IF9yZWYuZ3QsXG4gICAgICBndGUgPSBfcmVmLmd0ZTtcblxuICBpZiAodHlwZW9mIGd0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZSA+IGd0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBndGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IGd0ZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cHBlckNvbXBhcmUodmFsdWUsIF9yZWYyKSB7XG4gIHZhciBsdCA9IF9yZWYyLmx0LFxuICAgICAgbHRlID0gX3JlZjIubHRlO1xuXG4gIGlmICh0eXBlb2YgbHQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlIDwgbHQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGx0ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWUgPD0gbHRlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdyZWF0ZXJUaGFuRXJyb3IoX3JlZjMpIHtcbiAgdmFyIGd0ID0gX3JlZjMuZ3QsXG4gICAgICBndGUgPSBfcmVmMy5ndGU7XG5cbiAgaWYgKHR5cGVvZiBndCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gXCJncmVhdGVyIHRoYW4gXCIuY29uY2F0KGd0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ3RlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIi5jb25jYXQoZ3RlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbGVzc1RoYW5FcnJvcihfcmVmNCkge1xuICB2YXIgbHQgPSBfcmVmNC5sdCxcbiAgICAgIGx0ZSA9IF9yZWY0Lmx0ZTtcblxuICBpZiAodHlwZW9mIGx0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImxlc3MgdGhhbiBcIi5jb25jYXQobHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBsdGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFwibGVzcyB0aGFuIG9yIGVxdWFsIHRvIFwiLmNvbmNhdChsdGUpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpIHtcbiAgdmFyIGVycm9ycyA9IFtncmVhdGVyVGhhbkVycm9yKG9wdHMpLCBsZXNzVGhhbkVycm9yKG9wdHMpXS5maWx0ZXIoQm9vbGVhbikuam9pbignIGFuZCAnKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIFwiKS5jb25jYXQoZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gcHJvcHNUaHVua2lmeShvcHRzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjZbMF0sXG4gICAgICAgIHZhbHVlID0gX3JlZjZbMV07XG5cbiAgICB2YXIgbnVtYmVyVGh1bmsgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gOiB2YWx1ZTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIG51bWJlclRodW5rKSk7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHNUaHVua3MpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjhbMF0sXG4gICAgICAgIHRodW5rID0gX3JlZjhbMV07XG5cbiAgICB2YXIgdmFsdWUgPSB0aHVuayhwcm9wcyk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCB2YWx1ZSkpO1xuICB9LCB7fSk7XG59XG5cbnZhciBhcmdWYWxpZGF0b3JzID0gWygwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3Q6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jLFxuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHRlOiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHQ6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWRdO1xuXG5mdW5jdGlvbiBhcmdWYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gIHJldHVybiBhcmdWYWxpZGF0b3JzLmV2ZXJ5KGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gISF2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKTtcbiAgfSk7XG59XG5cbnZhciB0aHVua1ZhbHVlVmFsaWRhdG9yID0gKDAsIF92YWx1ZXNPZltcImRlZmF1bHRcIl0pKG51bWJlcikuaXNSZXF1aXJlZDtcblxuZnVuY3Rpb24gYmV0d2VlblZhbGlkYXRvcihvcHRpb25zKSB7XG4gIHZhciBhcmdFcnJvciA9IGFyZ1ZhbGlkYXRvcih7XG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9LCAnb3B0aW9ucycpO1xuXG4gIGlmIChhcmdFcnJvcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2JldHdlZW46IG9ubHkgb25lIG9mIHRoZSBwYWlycyBvZiBgbHRgL2BsdGVgLCBhbmQgYGd0YC9gZ3RlYCwgbWF5IGJlIHN1cHBsaWVkLCBhbmQgYXQgbGVhc3Qgb25lIHBhaXIgbXVzdCBiZSBwcm92aWRlZC4nKTtcbiAgfVxuXG4gIHZhciBvcHRzVGh1bmtzID0gcHJvcHNUaHVua2lmeShvcHRpb25zKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gYmV0d2Vlbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG51bWJlciwgZ290IFxcXCJcIikuY29uY2F0KF90eXBlb2YocHJvcFZhbHVlKSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IGludm9rZVdpdGhQcm9wcyhvcHRzVGh1bmtzLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgdGh1bmtWYWx1ZXNFcnJvciA9IHRodW5rVmFsdWVWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZSwgb3B0cyksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHRodW5rVmFsdWVzRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aHVua1ZhbHVlc0Vycm9yO1xuICAgIH1cblxuICAgIGlmICghbG93ZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykgfHwgIXVwcGVyQ29tcGFyZShwcm9wVmFsdWUsIG9wdHMpKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKGNvbXBvbmVudE5hbWUsIHByb3BOYW1lLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBiZXR3ZWVuUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIGEgbnVtYmVyLCBnb3QgXFxcIlwiKS5jb25jYXQoX3R5cGVvZihwcm9wVmFsdWUpLCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBvcHRzID0gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciB0aHVua1ZhbHVlc0Vycm9yID0gdGh1bmtWYWx1ZVZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCBvcHRzKSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAodGh1bmtWYWx1ZXNFcnJvcikge1xuICAgICAgcmV0dXJuIHRodW5rVmFsdWVzRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFsb3dlckNvbXBhcmUocHJvcFZhbHVlLCBvcHRzKSB8fCAhdXBwZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnYmV0d2VlbicsIG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmV0d2Vlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYm9vbGVhblNvbWVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGJvb2xlYW5Tb21lVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbm90QWxsUHJvcHNGYWxzZSA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBub3RBbGxQcm9wc0ZhbHNlW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2F0IGxlYXN0IG9uZSBwcm9wIChvbmUgb2Ygd2hpY2ggbXVzdCBiZSBgdHJ1ZWApIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIW5vdEFsbFByb3BzRmFsc2UuZXZlcnkoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FsbCBib29sZWFuU29tZSBwcm9wcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgfVxuXG4gIHZhciBwcm9wc0xpc3QgPSBub3RBbGxQcm9wc0ZhbHNlLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudEZhbHNlID0gZnVuY3Rpb24gY291bnRGYWxzZShjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID09PSBmYWxzZSA/IDEgOiAwKTtcbiAgICB9O1xuXG4gICAgdmFyIGZhbHNlUHJvcENvdW50ID0gbm90QWxsUHJvcHNGYWxzZS5yZWR1Y2UoY291bnRGYWxzZSwgMCk7XG5cbiAgICBpZiAoZmFsc2VQcm9wQ291bnQgPT09IG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiQSBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBib29sZWFuIHByb3BzIGJlIGB0cnVlYDogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50RmFsc2UgPSBmdW5jdGlvbiBjb3VudEZhbHNlKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPT09IGZhbHNlID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZmFsc2VQcm9wQ291bnQgPSBub3RBbGxQcm9wc0ZhbHNlLnJlZHVjZShjb3VudEZhbHNlLCAwKTtcblxuICAgIGlmIChmYWxzZVByb3BDb3VudCA9PT0gbm90QWxsUHJvcHNGYWxzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgYHRydWVgOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJib29sZWFuU29tZTogXCIuY29uY2F0KHByb3BzTGlzdCksIG5vdEFsbFByb3BzRmFsc2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbGVhblNvbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4ocHJvcCkge1xuICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnICYmIF90eXBlb2YocHJvcCkgIT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwcm9wOiBtdXN0IGJlIHN0cmluZyBvciBzeW1ib2wnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW5XaXRoUHJvcChfcmVmLCBfLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgICB2YXIgdHJ1dGh5Q2hpbGRyZW5Db3VudCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgdmFyIGdyYW5kY2hpbGRyZW5Db3VudCA9IDA7XG5cbiAgICBfcmVhY3RbXCJkZWZhdWx0XCJdLkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRydXRoeUNoaWxkcmVuQ291bnQgKz0gMTtcblxuICAgICAgaWYgKGNoaWxkLnByb3BzW3Byb3BdKSB7XG4gICAgICAgIHByb3BDb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZC5wcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgICAgZ3JhbmRjaGlsZHJlbkNvdW50ICs9IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcENvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50ICYmIGdyYW5kY2hpbGRyZW5Db3VudCA9PT0gMCB8fCBwcm9wQ291bnQgPT09IDAgJiYgZ3JhbmRjaGlsZHJlbkNvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50IHx8IHByb3BDb3VudCA9PT0gMCAmJiBncmFuZGNoaWxkcmVuQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgY2hpbGRyZW4gdG8gYWxsIGhhdmUgcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wLCBcIlxcdTIwMUQsIGFsbCBoYXZlIGNoaWxkcmVuLCBvciBhbGwgaGF2ZSBuZWl0aGVyLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwiY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuV2l0aFByb3A6XCIuY29uY2F0KHByb3ApLCBwcm9wKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY2hpbGRyZW5PZjtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRyZW4ocHJvcFR5cGUsIGNoaWxkcmVuLCBwcm9wcykge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgZXJyb3I7XG4gIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgZXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZFxuICAgIH0pLCAnY2hpbGRyZW4nXS5jb25jYXQocmVzdCkpO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSk7XG4gIHJldHVybiBlcnJvciB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mKHByb3BUeXBlKSB7XG4gIGZ1bmN0aW9uIGNoaWxkcmVuT2ZQcm9wVHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcE5hbWUgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGlzIHVzaW5nIHRoZSBjaGlsZHJlbk9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaGlsZHJlbi5hcHBseSh2b2lkIDAsIFtwcm9wVHlwZSwgY2hpbGRyZW4sIHByb3BzLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgY2hpbGRyZW5PZlByb3BUeXBlLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5PZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbm9kZSBvZiB0eXBlIFwiKS5jb25jYXQocHJvcFR5cGUudHlwZU5hbWUgfHwgcHJvcFR5cGUubmFtZSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUNoaWxkcmVuLmFwcGx5KHZvaWQgMCwgW3Byb3BUeXBlLCBjaGlsZHJlbiwgcHJvcHMsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKGNoaWxkcmVuT2ZQcm9wVHlwZSwgJ2NoaWxkcmVuT2YnLCBwcm9wVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlbk9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb25seVR5cGVzKHR5cGVzLCBjaGlsZHJlbiwgY29tcG9uZW50TmFtZSkge1xuICBpZiAoIWNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZCAmJiAoMCwgX2FycmF5UHJvdG90eXBlW1wiZGVmYXVsdFwiXSkodHlwZXMsIGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgICByZXR1cm4gVHlwZSA9PT0gJyonIHx8IGNoaWxkLnR5cGUgPT09IFR5cGU7XG4gICAgfSk7XG4gIH0pKSB7XG4gICAgdmFyIHR5cGVOYW1lcyA9IHR5cGVzLm1hcChfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pLmpvaW4oJywgb3IgJyk7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCBvbmx5IGFjY2VwdHMgY2hpbGRyZW4gb2YgdHlwZSBcIikuY29uY2F0KHR5cGVOYW1lcykpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZWQodHlwZXMsIGNoaWxkcmVuLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB2YXIgdHlwZU5hbWVzID0gdHlwZXMubWFwKF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkuam9pbignLCBvciAnKTtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBub2RlIG9mIHR5cGUgXCIpLmNvbmNhdCh0eXBlTmFtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mVHlwZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHR5cGVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHR5cGVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjaGlsZHJlbk9mVHlwZTogYXQgbGVhc3QgMSB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgcmV0dXJuIG9ubHlUeXBlcyh0eXBlcywgKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pLCBjb21wb25lbnROYW1lKTtcbiAgfVxuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcHNbcHJvcE5hbWVdKTtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpIHx8IG9ubHlUeXBlcyh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdjaGlsZHJlbk9mVHlwZScsIHR5cGVzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gY2hpbGRyZW5PZlR5cGU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hpbGRyZW5PZlR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcjtcblxudmFyIF9zZXF1ZW5jZU9mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zZXF1ZW5jZU9mXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3BlY2lmaWVyc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzZXEgPSBfc2VxdWVuY2VPZltcImRlZmF1bHRcIl0uYXBwbHkodm9pZCAwLCBzcGVjaWZpZXJzKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIGNoaWxkcmVuU2VxdWVuY2VPZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxLmFwcGx5KHZvaWQgMCwgW19vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5TZXF1ZW5jZU9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiByZW5kZXJhYmxlIGNoaWxkcmVuIGFyZSByZXF1aXJlZC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuaXNSZXF1aXJlZC5hcHBseShzZXEsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnY2hpbGRyZW5TZXF1ZW5jZU9mJywgc3BlY2lmaWVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlblNlcXVlbmNlT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNvbXBvbmVudFdpdGhOYW1lO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX2lzUmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJpcy1yZWdleFwiKSk7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaXBIT0NzKGZ1bGxOYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXApIHtcbiAgdmFyIGlubmVyTmFtZSA9IGZ1bGxOYW1lO1xuXG4gIHdoaWxlICgvXFwoW14oKV0qXFwpL2cudGVzdChpbm5lck5hbWUpKSB7XG4gICAgdmFyIEhPQyA9IGlubmVyTmFtZTtcbiAgICB2YXIgcHJldmlvdXNIT0MgPSB2b2lkIDA7XG5cbiAgICBkbyB7XG4gICAgICBwcmV2aW91c0hPQyA9IEhPQztcbiAgICAgIEhPQyA9IHByZXZpb3VzSE9DLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJyk7XG4gICAgfSB3aGlsZSAocHJldmlvdXNIT0MgIT09IEhPQyk7XG5cbiAgICBpZiAobmFtZXNPZkhPQ3NUb1N0cmlwLmluZGV4T2YoSE9DKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbm5lck5hbWU7XG4gICAgfVxuXG4gICAgaW5uZXJOYW1lID0gaW5uZXJOYW1lLnJlcGxhY2UoUmVnRXhwKFwiXlwiLmNvbmNhdChIT0MsIFwiXFxcXCh8XFxcXCkkXCIpLCAnZycpLCAnJyk7XG4gIH1cblxuICByZXR1cm4gaW5uZXJOYW1lO1xufVxuXG5mdW5jdGlvbiBoYXNOYW1lKG5hbWUsIG5hbWVzT2ZIT0NzVG9TdHJpcCwgcHJvcFZhbHVlLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXlQcm90b3R5cGVbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIGl0ZW0sIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLCBCb29sZWFuKSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKCEgLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIG5vdCBhIHZhbGlkIFJlYWN0IGVsZW1lbnRcIikpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBwcm9wVmFsdWUudHlwZTtcbiAgdmFyIGNvbXBvbmVudE5hbWVGcm9tVHlwZSA9ICgwLCBfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pKHR5cGUpO1xuICB2YXIgaW5uZXJDb21wb25lbnROYW1lID0gbmFtZXNPZkhPQ3NUb1N0cmlwLmxlbmd0aCA+IDAgPyBzdHJpcEhPQ3MoY29tcG9uZW50TmFtZUZyb21UeXBlLCBuYW1lc09mSE9Dc1RvU3RyaXApIDogY29tcG9uZW50TmFtZUZyb21UeXBlO1xuXG4gIGlmICgoMCwgX2lzUmVnZXhbXCJkZWZhdWx0XCJdKShuYW1lKSAmJiAhbmFtZS50ZXN0KGlubmVyQ29tcG9uZW50TmFtZSkpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9ubHkgYWNjZXB0cyBjb21wb25lbnRzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gXCIpLmNvbmNhdChuYW1lKSk7XG4gIH1cblxuICBpZiAoISgwLCBfaXNSZWdleFtcImRlZmF1bHRcIl0pKG5hbWUpICYmIGlubmVyQ29tcG9uZW50TmFtZSAhPT0gbmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi5cIikuY29uY2F0KHByb3BOYW1lLCBcImAgb25seSBhY2NlcHRzIGNvbXBvbmVudHMgbmFtZWQgXCIpLmNvbmNhdChuYW1lLCBcIiwgZ290IFwiKS5jb25jYXQoaW5uZXJDb21wb25lbnROYW1lKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWUobmFtZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyAmJiAhKDAsIF9pc1JlZ2V4W1wiZGVmYXVsdFwiXSkobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCcpO1xuICB9XG5cbiAgdmFyIHBhc3NlZE9wdGlvbnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcblxuICBpZiAocGFzc2VkT3B0aW9ucy5sZW5ndGggPiAxIHx8IHBhc3NlZE9wdGlvbnMubGVuZ3RoID09PSAxICYmIHBhc3NlZE9wdGlvbnNbMF0gIT09ICdzdHJpcEhPQ3MnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBvbmx5IG9wdGlvbnMgc3VwcG9ydGVkIGFyZTogXFx1MjAxQ3N0cmlwSE9Dc1xcdTIwMUQsIGdvdDogXFx1MjAxQ1wiLmNvbmNhdChwYXNzZWRPcHRpb25zLmpvaW4oJ+KAnSwg4oCcJyksIFwiXFx1MjAxRFwiKSk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkc3RyaXBIT0NzID0gb3B0aW9ucy5zdHJpcEhPQ3MsXG4gICAgICBuYW1lc09mSE9Dc1RvU3RyaXAgPSBfb3B0aW9ucyRzdHJpcEhPQ3MgPT09IHZvaWQgMCA/IFtdIDogX29wdGlvbnMkc3RyaXBIT0NzO1xuICB2YXIgYWxsSE9DTmFtZXNBcmVWYWxpZCA9IG5hbWVzT2ZIT0NzVG9TdHJpcC5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ3N0cmluZycgfHwgL1soKV0vZy50ZXN0KHgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIC9eKD86W2Etel1bYS16QS1aMC05XSt8W0EtWl1bYS16XVthLXpBLVowLTldKykkLy50ZXN0KHgpO1xuICB9KTtcblxuICBpZiAoIWFsbEhPQ05hbWVzQXJlVmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdldmVyeSBwcm92aWRlZCBIT0MgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIHdpdGggbm8gcGFyZW5zLCBhbmQgaW4gY2FtZWxDYXNlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb21wb25lbnQgbmFtZWQgXCIpLmNvbmNhdChuYW1lKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMyA/IF9sZW4zIC0gMyA6IDApLCBfa2V5MyA9IDM7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc05hbWUuYXBwbHkodm9pZCAwLCBbbmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwLCBwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvciwgXCJjb21wb25lbnRXaXRoTmFtZTpcIi5jb25jYXQobmFtZSksIG5hbWUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9uZW50V2l0aE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRpc2FsbG93ZWRJZjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gZGlzYWxsb3dlZElmKHByb3BUeXBlLCBvdGhlclByb3BOYW1lLCBvdGhlclByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHByb3BUeXBlLmlzUmVxdWlyZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIHZhbGlkYXRvciBpcyByZXF1aXJlZDsgcHJvcFR5cGUgdmFsaWRhdG9ycyBtdXN0IGFsc28gcHJvdmlkZSBgLmlzUmVxdWlyZWRgJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG90aGVyUHJvcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3RoZXIgcHJvcCBuYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3RoZXJQcm9wVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ290aGVyIHByb3AgdHlwZSB2YWxpZGF0b3IgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FsbG93ZWRJZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHNbb3RoZXJQcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG90aGVyRXJyb3IgPSBvdGhlclByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBvdGhlclByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKG90aGVyRXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRXJyb3IoXCJwcm9wIFxcdTIwMUNcIi5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBpcyBkaXNhbGxvd2VkIHdoZW4gXFx1MjAxQ1wiKS5jb25jYXQob3RoZXJQcm9wTmFtZSwgXCJcXHUyMDFEIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHZhbGlkYXRvclwiKSk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gZGlzYWxsb3dlZElmUHJvcFR5cGUocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzYWxsb3dlZElmUmVxdWlyZWQuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZGlzYWxsb3dlZElmUmVxdWlyZWQ7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdkaXNhbGxvd2VkSWYnLCB7XG4gICAgcHJvcFR5cGU6IHByb3BUeXBlLFxuICAgIG90aGVyUHJvcE5hbWU6IG90aGVyUHJvcE5hbWUsXG4gICAgb3RoZXJQcm9wVHlwZTogb3RoZXJQcm9wVHlwZVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FsbG93ZWRJZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZWxlbWVudFR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcmVhY3RJcyA9IHJlcXVpcmUoXCJyZWFjdC1pc1wiKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBnZXRUeXBlTmFtZShUeXBlKSB7XG4gIGlmICh0eXBlb2YgVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVHlwZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gKDAsIF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkoVHlwZSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIC8vIGluIGVudmlyb25tZW50cyB3aGVyZSBmdW5jdGlvbnMgZG8gbm90IGhhdmUgbmFtZXNcblxuICByZXR1cm4gdHlwZSB8fCAnQW5vbnltb3VzIENvbXBvbmVudCc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudFR5cGUoVHlwZSwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB0eXBlID0gcHJvcHNbcHJvcE5hbWVdLnR5cGU7XG5cbiAgaWYgKHR5cGUgPT09IFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIG11c3QgYmUgYSBSZWFjdCBlbGVtZW50IG9mIHR5cGUgXCIpLmNvbmNhdChnZXRUeXBlTmFtZShUeXBlKSkpO1xufVxuXG5mdW5jdGlvbiBlbGVtZW50VHlwZVZhbGlkYXRvcihUeXBlKSB7XG4gIGlmIChUeXBlID09PSAnKicpIHtcbiAgICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoX3Byb3BUeXBlcy5lbGVtZW50LCAnZWxlbWVudFR5cGUoKiknLCBUeXBlKTtcbiAgfVxuXG4gIGlmICghKDAsIF9yZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZSkoVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVHlwZSBtdXN0IGJlIGEgUmVhY3QgQ29tcG9uZW50LCBhbiBIVE1MIGVsZW1lbnQgdGFnIG5hbWUsIG9yIFxcXCIqXFxcIi4gR290IGFuIFwiLmNvbmNhdChfdHlwZW9mKFR5cGUpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbGVtZW50VHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUVsZW1lbnRUeXBlLmFwcGx5KHZvaWQgMCwgW1R5cGUsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIGVsZW1lbnRUeXBlLmlzUmVxdWlyZWQgPSBlbGVtZW50VHlwZTsgLy8gY292ZXJlZCBieSBhbmQgKyBlbGVtZW50XG5cbiAgdmFyIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWUoVHlwZSk7XG4gIHZhciB2YWxpZGF0b3JOYW1lID0gXCJlbGVtZW50VHlwZShcIi5jb25jYXQodHlwZU5hbWUsIFwiKVwiKTtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKCgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19wcm9wVHlwZXMuZWxlbWVudCwgZWxlbWVudFR5cGVdLCB2YWxpZGF0b3JOYW1lKSwgdmFsaWRhdG9yTmFtZSwgVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50VHlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfZXhwbGljaXROdWxsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9leHBsaWNpdE51bGxcIikpO1xuXG52YXIgX3dpdGhTaGFwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd2l0aFNoYXBlXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGFycmF5T2ZWYWxpZGF0b3I7XG52YXIgdmFsaWRhdG9yID0gKDAsIF9vcltcImRlZmF1bHRcIl0pKFtfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSwgLy8gbnVsbC91bmRlZmluZWRcbigwLCBfcHJvcFR5cGVzLm9uZU9mKShbZmFsc2UsICcnLCBOYU5dKSwgKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKShfcHJvcFR5cGVzLmFycmF5LCB7XG4gIGxlbmd0aDogKDAsIF9wcm9wVHlwZXMub25lT2YpKFswXSkuaXNSZXF1aXJlZFxufSkuaXNSZXF1aXJlZCwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG59XSk7XG5hcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2VtcHR5Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW1wdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBleHBsaWNpdE51bGwocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFx1MjAxQ1wiKS5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBtdXN0IGJlIG51bGwgb3IgdW5kZWZpbmVkOyByZWNlaXZlZCBcIikuY29uY2F0KF90eXBlb2YocHJvcHNbcHJvcE5hbWVdKSkpO1xufVxuXG5leHBsaWNpdE51bGwuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGV4cGxpY2l0TnVsbFJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXHUyMDFEIG11c3QgYmUgbnVsbDsgcmVjZWl2ZWQgXCIpLmNvbmNhdChfdHlwZW9mKHByb3BzW3Byb3BOYW1lXSkpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoZXhwbGljaXROdWxsLCAnZXhwbGljaXROdWxsJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwbGljaXROdWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBnZXRDb21wb25lbnROYW1lO1xuXG52YXIgX2Z1bmN0aW9uUHJvdG90eXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZnVuY3Rpb24ucHJvdG90eXBlLm5hbWVcIikpO1xuXG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8ICgwLCBfZnVuY3Rpb25Qcm90b3R5cGVbXCJkZWZhdWx0XCJdKShDb21wb25lbnQpO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc0ZvcndhcmRSZWYpKHtcbiAgICB0eXBlOiBDb21wb25lbnQsXG4gICAgJCR0eXBlb2Y6IF9yZWFjdElzLkVsZW1lbnRcbiAgfSkpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc01lbW8pKENvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQudHlwZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldENvbXBvbmVudE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZmluaXRlID0gaXNGaW5pdGU7XG5cbnZhciBfZGVmYXVsdCA9IE51bWJlci5pc0ludGVnZXIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiAoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmIGZpbml0ZSh4KSAmJiBmbG9vcih4KSA9PT0geDtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVnZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlcy1leGFjdC9idWlsZC9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0gX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUGxhaW5PYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGlzUHJpbWl0aXZlO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHgpIHtcbiAgcmV0dXJuICF4IHx8IF90eXBlb2YoeCkgIT09ICdvYmplY3QnICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNQcmltaXRpdmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHJlbmRlcmFibGVDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmFibGVDaGlsZHJlbihjaGlsZHJlblByb3ApIHtcbiAgcmV0dXJuIF9yZWFjdFtcImRlZmF1bHRcIl0uQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlblByb3ApLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQgPT09IDAgfHwgY2hpbGQ7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyYWJsZUNoaWxkcmVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB0eXBlT2Y7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIHR5cGVPZihjaGlsZCkge1xuICBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cblxuICBpZiAoX3R5cGVvZihjaGlsZCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoY2hpbGQpO1xuICB9XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICByZXR1cm4gY2hpbGQudHlwZTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gd3JhcFZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuYXNzaWduXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdyYXBWYWxpZGF0b3IodmFsaWRhdG9yLCB0eXBlTmFtZSkge1xuICB2YXIgdHlwZUNoZWNrZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKHZhbGlkYXRvci5iaW5kKCksIHtcbiAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgdHlwZUNoZWNrZXI6IHR5cGVDaGVja2VyLFxuICAgIGlzUmVxdWlyZWQ6ICgwLCBfb2JqZWN0W1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLmlzUmVxdWlyZWQuYmluZCgpLCB7XG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgICB0eXBlQ2hlY2tlcjogdHlwZUNoZWNrZXIsXG4gICAgICB0eXBlUmVxdWlyZWQ6IHRydWVcbiAgICB9KVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBWYWxpZGF0b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfcHJvcFR5cGVzRXhhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzLWV4YWN0XCIpKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfYmV0d2VlbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYmV0d2VlblwiKSk7XG5cbnZhciBfYm9vbGVhblNvbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Jvb2xlYW5Tb21lXCIpKTtcblxudmFyIF9jaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlblwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2hpbGRyZW5PZlwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZlR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuT2ZUeXBlXCIpKTtcblxudmFyIF9jaGlsZHJlblNlcXVlbmNlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuU2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfY29tcG9uZW50V2l0aE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudFdpdGhOYW1lXCIpKTtcblxudmFyIF9kaXNhbGxvd2VkSWYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Rpc2FsbG93ZWRJZlwiKSk7XG5cbnZhciBfZWxlbWVudFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2VsZW1lbnRUeXBlXCIpKTtcblxudmFyIF9lbXB0eSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZW1wdHlcIikpO1xuXG52YXIgX2V4cGxpY2l0TnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXhwbGljaXROdWxsXCIpKTtcblxudmFyIF9pbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9pbnRlZ2VyXCIpKTtcblxudmFyIF9rZXlzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2tleXNPZlwiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1wiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzXCIpKTtcblxudmFyIF9uQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25DaGlsZHJlblwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVJbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZUludGVnZXJcIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlTnVtYmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZU51bWJlclwiKSk7XG5cbnZhciBfbnVtZXJpY1N0cmluZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbnVtZXJpY1N0cmluZ1wiKSk7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vYmplY3RcIikpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfcHJlZGljYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wcmVkaWNhdGVcIikpO1xuXG52YXIgX3JhbmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yYW5nZVwiKSk7XG5cbnZhciBfcmVmID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWZcIikpO1xuXG52YXIgX3JlcXVpcmVkQnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlcXVpcmVkQnlcIikpO1xuXG52YXIgX3Jlc3RyaWN0ZWRQcm9wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXN0cmljdGVkUHJvcFwiKSk7XG5cbnZhciBfc2VxdWVuY2VPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF9zdHJpbmdFbmRzV2l0aCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5nRW5kc1dpdGhcIikpO1xuXG52YXIgX3N0cmluZ1N0YXJ0c1dpdGggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ1N0YXJ0c1dpdGhcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbnZhciBfdW5pcXVlQXJyYXlPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdW5pcXVlQXJyYXlPZlwiKSk7XG5cbnZhciBfdmFsdWVzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbHVlc09mXCIpKTtcblxudmFyIF93aXRoU2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3dpdGhTaGFwZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYW5kOiBfYW5kW1wiZGVmYXVsdFwiXSxcbiAgYmV0d2VlbjogX2JldHdlZW5bXCJkZWZhdWx0XCJdLFxuICBib29sZWFuU29tZTogX2Jvb2xlYW5Tb21lW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuOiBfY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5PZjogX2NoaWxkcmVuT2ZbXCJkZWZhdWx0XCJdLFxuICBjaGlsZHJlbk9mVHlwZTogX2NoaWxkcmVuT2ZUeXBlW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5TZXF1ZW5jZU9mOiBfY2hpbGRyZW5TZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgY29tcG9uZW50V2l0aE5hbWU6IF9jb21wb25lbnRXaXRoTmFtZVtcImRlZmF1bHRcIl0sXG4gIGRpc2FsbG93ZWRJZjogX2Rpc2FsbG93ZWRJZltcImRlZmF1bHRcIl0sXG4gIGVsZW1lbnRUeXBlOiBfZWxlbWVudFR5cGVbXCJkZWZhdWx0XCJdLFxuICBlbXB0eTogX2VtcHR5W1wiZGVmYXVsdFwiXSxcbiAgZXhwbGljaXROdWxsOiBfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSxcbiAgZm9yYmlkRXh0cmFQcm9wczogX3Byb3BUeXBlc0V4YWN0W1wiZGVmYXVsdFwiXSxcbiAgaW50ZWdlcjogX2ludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBrZXlzT2Y6IF9rZXlzT2ZbXCJkZWZhdWx0XCJdLFxuICBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1tcImRlZmF1bHRcIl0sXG4gIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHNbXCJkZWZhdWx0XCJdLFxuICBuQ2hpbGRyZW46IF9uQ2hpbGRyZW5bXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZUludGVnZXI6IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZU51bWJlcjogX25vbk5lZ2F0aXZlTnVtYmVyW1wiZGVmYXVsdFwiXSxcbiAgbnVtZXJpY1N0cmluZzogX251bWVyaWNTdHJpbmdbXCJkZWZhdWx0XCJdLFxuICBvYmplY3Q6IF9vYmplY3RbXCJkZWZhdWx0XCJdLFxuICBvcjogX29yW1wiZGVmYXVsdFwiXSxcbiAgcHJlZGljYXRlOiBfcHJlZGljYXRlW1wiZGVmYXVsdFwiXSxcbiAgcmFuZ2U6IF9yYW5nZVtcImRlZmF1bHRcIl0sXG4gIHJlZjogX3JlZltcImRlZmF1bHRcIl0sXG4gIHJlcXVpcmVkQnk6IF9yZXF1aXJlZEJ5W1wiZGVmYXVsdFwiXSxcbiAgcmVzdHJpY3RlZFByb3A6IF9yZXN0cmljdGVkUHJvcFtcImRlZmF1bHRcIl0sXG4gIHNlcXVlbmNlT2Y6IF9zZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgc2hhcGU6IF9zaGFwZVtcImRlZmF1bHRcIl0sXG4gIHN0cmluZ0VuZHNXaXRoOiBfc3RyaW5nRW5kc1dpdGhbXCJkZWZhdWx0XCJdLFxuICBzdHJpbmdTdGFydHNXaXRoOiBfc3RyaW5nU3RhcnRzV2l0aFtcImRlZmF1bHRcIl0sXG4gIHVuaXF1ZUFycmF5OiBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdLFxuICB1bmlxdWVBcnJheU9mOiBfdW5pcXVlQXJyYXlPZltcImRlZmF1bHRcIl0sXG4gIHZhbHVlc09mOiBfdmFsdWVzT2ZbXCJkZWZhdWx0XCJdLFxuICB3aXRoU2hhcGU6IF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc0ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNJbnRlZ2VyXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcmVxdWlyZWRJbnRlZ2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAhKDAsIF9pc0ludGVnZXJbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYW4gaW50ZWdlclwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGludGVnZXIocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRJbnRlZ2VyLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gcmVxdWlyZWRJbnRlZ2VyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2ludGVnZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBrZXlzT2ZWYWxpZGF0b3I7XG5cbnZhciBfaXNQcmltaXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQcmltaXRpdmVcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBrZXlzT2ZWYWxpZGF0b3IocHJvcFR5cGUpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXlzT2YnO1xuXG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCB0byBrZXlzT2YgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24ga2V5c09mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiA1ID8gX2xlbiAtIDUgOiAwKSwgX2tleSA9IDU7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwgfHwgKDAsIF9pc1ByaW1pdGl2ZVtcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgZmlyc3RFcnJvciA9IHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW19kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBrZXkpLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBcIihcIi5jb25jYXQocHJvcEZ1bGxOYW1lLCBcIikuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciB8fCBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24ga2V5ZWRCeVJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyByZXF1aXJlZCwgYnV0IHZhbHVlIGlzIFwiKS5jb25jYXQocHJvcFZhbHVlKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgbmFtZSwgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5c09mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZU9mVHlwZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlT2ZUeXBlKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZXhjbHVzaXZlUHJvcHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChleGNsdXNpdmVQcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXQgbGVhc3Qgb25lIHByb3AgdGhhdCBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGlzIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgcHJvcExpc3QgPSBleGNsdXNpdmVQcm9wcy5qb2luKCcsIG9yICcpO1xuICB2YXIgbWFwID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3ApIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCB0cnVlKSk7XG4gIH0sIHt9KTtcblxuICB2YXIgY291bnRQcm9wcyA9IGZ1bmN0aW9uIGNvdW50UHJvcHMoY291bnQsIHByb3ApIHtcbiAgICByZXR1cm4gY291bnQgKyAobWFwW3Byb3BdID8gMSA6IDApO1xuICB9O1xuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcCA9PT0gcHJvcE5hbWUgfHwgcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibXV0dWFsbHlFeGNsdXNpdmVQcm9wczpcIi5jb25jYXQocHJvcExpc3QpLCBleGNsdXNpdmVQcm9wcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXR1YWxseUV4Y2x1c2l2ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZVRydWU7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4Y2x1c2l2ZVByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGV4Y2x1c2l2ZVByb3BzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhdCBsZWFzdCBvbmUgcHJvcCB0aGF0IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFleGNsdXNpdmVQcm9wcy5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZyc7XG4gIH0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWxsIGV4Y2x1c2l2ZSB0cnVlIHByb3BzIG11c3QgYmUgc3RyaW5ncycpO1xuICB9XG5cbiAgdmFyIHByb3BzTGlzdCA9IGV4Y2x1c2l2ZVByb3BzLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudFByb3BzID0gZnVuY3Rpb24gY291bnRQcm9wcyhjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgdHJ1ZTogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50UHJvcHMgPSBmdW5jdGlvbiBjb3VudFByb3BzKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPyAxIDogMCk7XG4gICAgfTtcblxuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBleGNsdXNpdmVQcm9wcy5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgYm9vbGVhbiBwcm9wcyBiZSB0cnVlOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wczogXCIuY29uY2F0KHByb3BzTGlzdCksIGV4Y2x1c2l2ZVByb3BzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBuQ2hpbGRyZW47XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG5DaGlsZHJlbihuKSB7XG4gIHZhciBwcm9wVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogX3Byb3BUeXBlcy5ub2RlO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgaXNOYU4obikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1uZWdhdGl2ZSBudW1iZXIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBuQ2hpbGRyZW5WYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgbkNoaWxkcmVuIHZhbGlkYXRvciBvbiBhIG5vbi1jaGlsZHJlbiBwcm9wXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgIHZhciBjaGlsZHJlbkNvdW50ID0gX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XG5cbiAgICBpZiAoY2hpbGRyZW5Db3VudCAhPT0gbikge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGV4cGVjdHMgdG8gcmVjZWl2ZSBcIikuY29uY2F0KG4sIFwiIGNoaWxkcmVuLCBidXQgcmVjZWl2ZWQgXCIpLmNvbmNhdChjaGlsZHJlbkNvdW50LCBcIiBjaGlsZHJlbi5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibkNoaWxkcmVuOlwiLmNvbmNhdChuKSwgbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uQ2hpbGRyZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfaW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaW50ZWdlclwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVOdW1iZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25vbk5lZ2F0aXZlTnVtYmVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoWygwLCBfaW50ZWdlcltcImRlZmF1bHRcIl0pKCksICgwLCBfbm9uTmVnYXRpdmVOdW1iZXJbXCJkZWZhdWx0XCJdKSgpXSwgJ25vbk5lZ2F0aXZlSW50ZWdlcicpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9uTmVnYXRpdmVJbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0SXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QtaXNcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBpc05vbk5lZ2F0aXZlKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh4KSAmJiB4ID49IDAgJiYgISgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKSh4LCAtMCk7XG59XG5cbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlTnVtYmVyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVkTm9uTmVnYXRpdmVOdW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbm5vbk5lZ2F0aXZlTnVtYmVyLmlzUmVxdWlyZWQgPSByZXF1aXJlZE5vbk5lZ2F0aXZlTnVtYmVyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKG5vbk5lZ2F0aXZlTnVtYmVyLCAnbm9uTmVnYXRpdmVOdW1iZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub25OZWdhdGl2ZU51bWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgdmFsaWROdW1lcmljQ2hhcnMgPSAvXlstK10/KD86WzEtOV1bMC05XSooPzpcXC5bMC05XSspP3wwfDBcXC5bMC05XSspJC87XG5cbnZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBudW1lcmljU3RyaW5nKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gIH1cblxuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciBwYXNzZXNSZWdleCA9IHZhbGlkTnVtZXJpY0NoYXJzLnRlc3QodmFsdWUpO1xuXG4gIGlmIChwYXNzZXNSZWdleCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIiAodmFsdWUgXFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIikgbXVzdCBiZSBhIG51bWVyaWMgc3RyaW5nOlxcbiAgICAtIHN0YXJ0aW5nIHdpdGggYW4gb3B0aW9uYWwgKyBvciAtXFxuICAgIC0gdGhhdCBkb2VzIG5vdCBoYXZlIGEgbGVhZGluZyB6ZXJvXFxuICAgIC0gd2l0aCBhbiBvcHRpb25hbCBkZWNpbWFsIHBhcnQgKHRoYXQgY29udGFpbnMgb25seSBvbmUgZGVjaW1hbCBwb2ludCwgaWYgcHJlc2VudClcXG4gICAgLSB0aGF0IG90aGVyd2lzZSBvbmx5IGNvbnRhaW5zIGRpZ2l0cyAoMC05KVxcbiAgICAtIG5vdCArLU5hTiwgb3IgKy1JbmZpbml0eVxcbiAgXCIpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbnVtZXJpY1N0cmluZ1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgaXMgcmVxdWlyZWRcIikpO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG59O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ251bWVyaWNTdHJpbmcnKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1lcmljU3RyaW5nLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF90eXBlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvdHlwZU9mXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLypcbiAgY29kZSBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wyMDItTDIwNlxuICBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgb3V0c2lkZSBvZiBSZWFjdCdzIG5vcm1hbCBQcm9wVHlwZSBmbG93XG4qL1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICBwcm9wOiAncHJvcCcsXG4gIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbn07XG5cbmZ1bmN0aW9uIG9iamVjdChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICgoMCwgX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dIHx8IGxvY2F0aW9uO1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIkludmFsaWQgXCIuY29uY2F0KGxvY2F0aW9uTmFtZSwgXCIgYFwiKS5jb25jYXQocHJvcEZ1bGxOYW1lLCBcImAgb2YgdHlwZSBgXCIpLmNvbmNhdCgoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSksIFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAsIGV4cGVjdGVkIGBvYmplY3RgLlwiKSk7XG59XG5cbm9iamVjdC5pc1JlcXVpcmVkID0gZnVuY3Rpb24gb2JqZWN0UmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSB8fCBsb2NhdGlvbjtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQobG9jYXRpb25OYW1lLCBcIiBgXCIpLmNvbmNhdChwcm9wRnVsbE5hbWUsIFwiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHByb3BWYWx1ZSwgXCJgLlwiKSk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gb2JqZWN0LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkob2JqZWN0LCAnb2JqZWN0Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBvcjtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykge1xuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gb25lT2ZUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBlcnJvcnMgPSB2YWxpZGF0b3JzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIHN1cHBsaWVkIHRvIFwiKS5jb25jYXQocHJvcE5hbWUsIFwiLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBvbmVPZlR5cGVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogbWlzc2luZyB2YWx1ZSBmb3IgcmVxdWlyZWQgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIuXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3JzID0gdmFsaWRhdG9ycy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIFwiKS5jb25jYXQoZXJyb3JzLCBcIiBzdXBwbGllZCB0byByZXF1aXJlZCBcIikuY29uY2F0KHByb3BOYW1lLCBcIi5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdvbmVPZlR5cGUnLCB2YWxpZGF0b3JzKTtcbn1cblxuZnVuY3Rpb24gb3IodmFsaWRhdG9ycykge1xuICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ29yJztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gb25lT2ZUeXBlVmFsaWRhdG9yKFsoMCwgX3Byb3BUeXBlcy5hcnJheU9mKShvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHZhbGlkYXRvcnMpKSk7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIG5hbWUsIHZhbGlkYXRvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHByZWRpY2F0ZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcHJlZGljYXRlKGZuKSB7XG4gIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGZuYCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWVzc2FnZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXF1aXJlZFZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZm4ocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgdGhhdCBgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHBhc3MgYSBwcmVkaWNhdGUgZnVuY3Rpb25cIikuY29uY2F0KG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJycsIFwiLlwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWlyZWRWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSByZXF1aXJlZFZhbGlkYXRvcjtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ByZWRpY2F0ZScsIGZuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWRpY2F0ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcmFuZ2U7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX2ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2ludGVnZXJcIikpO1xuXG52YXIgX2lzSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc0ludGVnZXJcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuZnVuY3Rpb24gaXNWYWxpZExlbmd0aCh4KSB7XG4gIHJldHVybiAoMCwgX2lzSW50ZWdlcltcImRlZmF1bHRcIl0pKHgpICYmIE1hdGguYWJzKHgpIDwgTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZnVuY3Rpb24gcmFuZ2UobWluLCBtYXgpIHtcbiAgaWYgKCFpc1ZhbGlkTGVuZ3RoKG1pbikgfHwgIWlzVmFsaWRMZW5ndGgobWF4KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiXFxcInJhbmdlXFxcIiByZXF1aXJlcyB0d28gaW50ZWdlcnM6IFwiLmNvbmNhdChtaW4sIFwiIGFuZCBcIikuY29uY2F0KG1heCwgXCIgZ2l2ZW5cIikpO1xuICB9XG5cbiAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBhbmQgbWF4IG11c3Qgbm90IGJlIHRoZSBzYW1lJyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbKDAsIF9pbnRlZ2VyW1wiZGVmYXVsdFwiXSkoKSwgKDAsIF9iZXR3ZWVuW1wiZGVmYXVsdFwiXSkoe1xuICAgIGd0ZTogbWluLFxuICAgIGx0OiBtYXhcbiAgfSldLCAncmFuZ2UnKSwgJ3JhbmdlJywge1xuICAgIG1pbjogbWluLFxuICAgIG1heDogbWF4XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFuZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgaXNQcm90b3R5cGVPZiA9IE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZjtcblxuZnVuY3Rpb24gaXNOZXdSZWYocHJvcCkge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHByb3ApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG93blByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wKTtcbiAgcmV0dXJuIG93blByb3BlcnRpZXMubGVuZ3RoID09PSAxICYmIG93blByb3BlcnRpZXNbMF0gPT09ICdjdXJyZW50Jztcbn1cblxuZnVuY3Rpb24gaXNDYWxsYmFja1JlZihwcm9wKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGVPZi5jYWxsKF9yZWFjdC5Db21wb25lbnQsIHByb3ApICYmICghX3JlYWN0LlB1cmVDb21wb25lbnQgfHwgIWlzUHJvdG90eXBlT2YuY2FsbChfcmVhY3QuUHVyZUNvbXBvbmVudCwgcHJvcCkpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZFJlZihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNDYWxsYmFja1JlZihwcm9wVmFsdWUpIHx8IGlzTmV3UmVmKHByb3BWYWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYSByZWZcIikpO1xufVxuXG5mdW5jdGlvbiByZWYocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRSZWYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xufVxuXG5yZWYuaXNSZXF1aXJlZCA9IHJlcXVpcmVkUmVmO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlZiwgJ3JlZicpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZ2V0UmVxdWlyZWRCeTtcblxudmFyIF9vYmplY3RJcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm9iamVjdC1pc1wiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkQnkocmVxdWlyZWRCeVByb3BOYW1lLCBwcm9wVHlwZSkge1xuICB2YXIgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGZ1bmN0aW9uIHJlcXVpcmVkQnkocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BzW3JlcXVpcmVkQnlQcm9wTmFtZV0pIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICAgIGlmICgoMCwgX29iamVjdElzW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUpIHx8IHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB3aGVuIFwiKS5jb25jYXQocmVxdWlyZWRCeVByb3BOYW1lLCBcIiBpcyB0cnVlLCBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIHJlcXVpcmVkQnkuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkQnlSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlcXVpcmVkQnksIFwicmVxdWlyZWRCeSBcXHUyMDFDXCIuY29uY2F0KHJlcXVpcmVkQnlQcm9wTmFtZSwgXCJcXHUyMDFEXCIpLCBbcmVxdWlyZWRCeVByb3BOYW1lLCBkZWZhdWx0VmFsdWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmVkQnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gY3VzdG9tTWVzc2FnZVdyYXBwZXIobWVzc3NhZ2VGdW5jdGlvbikge1xuICBmdW5jdGlvbiByZXN0cmljdGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWVzc3NhZ2VGdW5jdGlvbiAmJiB0eXBlb2YgbWVzc3NhZ2VGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IobWVzc3NhZ2VGdW5jdGlvbi5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQocHJvcE5hbWUsIFwiIFwiKS5jb25jYXQobG9jYXRpb24sIFwiIG9uIFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgbm90IGFsbG93ZWQuXCIpKTtcbiAgfVxuXG4gIHJlc3RyaWN0ZWRQcm9wLmlzUmVxdWlyZWQgPSByZXN0cmljdGVkUHJvcDtcbiAgcmV0dXJuIHJlc3RyaWN0ZWRQcm9wO1xufVxuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgdmFyIG1lc3NzYWdlRnVuY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjdXN0b21NZXNzYWdlV3JhcHBlcihtZXNzc2FnZUZ1bmN0aW9uKSwgJ3Jlc3RyaWN0ZWRQcm9wJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdHJpY3RlZFByb3AuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHNlcXVlbmNlT2ZWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9uTmVnYXRpdmVJbnRlZ2VyXCIpKTtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL29iamVjdFwiKSk7XG5cbnZhciBfd2l0aFNoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi93aXRoU2hhcGVcIikpO1xuXG52YXIgX3R5cGVPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy90eXBlT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIG1pblZhbGlkYXRvciA9IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdO1xudmFyIG1heFZhbGlkYXRvciA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLCAoMCwgX2JldHdlZW5bXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogMVxufSldKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVSYW5nZShtaW4sIG1heCkge1xuICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1pbiAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gbm8gYWRkaXRpb25hbCBjaGVja2luZyBuZWVkZWQgdW5sZXNzIGJvdGggYXJlIHByZXNlbnRcbiAgfVxuXG4gIGlmIChtaW4gPD0gbWF4KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXgnKTtcbn1cblxudmFyIHNwZWNpZmllclNoYXBlID0ge1xuICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdcInZhbGlkYXRvclwiIG11c3QgYmUgYSBwcm9wVHlwZSB2YWxpZGF0b3IgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgbWluOiBmdW5jdGlvbiBtaW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIG1pblZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHx8IHZhbGlkYXRlUmFuZ2UocHJvcHMubWluLCBwcm9wcy5tYXgpO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gbWF4VmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSkgfHwgdmFsaWRhdGVSYW5nZShwcm9wcy5taW4sIHByb3BzLm1heCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldE1pbk1heChfcmVmKSB7XG4gIHZhciBtaW4gPSBfcmVmLm1pbixcbiAgICAgIG1heCA9IF9yZWYubWF4O1xuICB2YXIgbWluaW11bTtcbiAgdmFyIG1heGltdW07XG5cbiAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInICYmIHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgLy8gbmVpdGhlciBwcm92aWRlZCwgZGVmYXVsdCB0byBcIjFcIlxuICAgIG1pbmltdW0gPSAxO1xuICAgIG1heGltdW0gPSAxO1xuICB9IGVsc2Uge1xuICAgIG1pbmltdW0gPSB0eXBlb2YgbWluID09PSAnbnVtYmVyJyA/IG1pbiA6IDE7XG4gICAgbWF4aW11bSA9IHR5cGVvZiBtYXggPT09ICdudW1iZXInID8gbWF4IDogSW5maW5pdHk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1pbmltdW06IG1pbmltdW0sXG4gICAgbWF4aW11bTogbWF4aW11bVxuICB9O1xufVxuXG5mdW5jdGlvbiBjaHVua0J5VHlwZShpdGVtcykge1xuICB2YXIgY2h1bmsgPSBbXTtcbiAgdmFyIGxhc3RUeXBlO1xuICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChjaHVua3MsIGl0ZW0pIHtcbiAgICB2YXIgaXRlbVR5cGUgPSAoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKGl0ZW0pO1xuXG4gICAgaWYgKCFsYXN0VHlwZSB8fCBpdGVtVHlwZSA9PT0gbGFzdFR5cGUpIHtcbiAgICAgIGNodW5rLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIGNodW5rID0gW2l0ZW1dO1xuICAgIH1cblxuICAgIGxhc3RUeXBlID0gaXRlbVR5cGU7XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfSwgW10pLmNvbmNhdChjaHVuay5sZW5ndGggPiAwID8gW2NodW5rXSA6IFtdKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaHVua3Moc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBpdGVtcyA9IHByb3BzW3Byb3BOYW1lXTtcbiAgdmFyIGNodW5rcyA9IGNodW5rQnlUeXBlKGl0ZW1zKTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNpZmllcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgX3NwZWNpZmllcnMkaSA9IHNwZWNpZmllcnNbaV0sXG4gICAgICAgIHZhbGlkYXRvciA9IF9zcGVjaWZpZXJzJGkudmFsaWRhdG9yLFxuICAgICAgICBtaW4gPSBfc3BlY2lmaWVycyRpLm1pbixcbiAgICAgICAgbWF4ID0gX3NwZWNpZmllcnMkaS5tYXg7XG5cbiAgICB2YXIgX2dldE1pbk1heCA9IGdldE1pbk1heCh7XG4gICAgICBtaW46IG1pbixcbiAgICAgIG1heDogbWF4XG4gICAgfSksXG4gICAgICAgIG1pbmltdW0gPSBfZ2V0TWluTWF4Lm1pbmltdW0sXG4gICAgICAgIG1heGltdW0gPSBfZ2V0TWluTWF4Lm1heGltdW07XG5cbiAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCAmJiBtaW5pbXVtID09PSAwKSB7XG4gICAgICAvLyBubyBjaHVua3MgbGVmdCwgYnV0IHRoaXMgc3BlY2lmaWVyIGRvZXMgbm90IHJlcXVpcmUgYW55IGl0ZW1zXG4gICAgICBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250aW51ZVxuICAgIH1cblxuICAgIHZhciBhcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuICAgIHZhciBjaHVuayA9IGNodW5rcy5zaGlmdCgpOyAvLyBleHRyYWN0IHRoZSBuZXh0IGNodW5rIHRvIHRlc3RcblxuICAgIHZhciBjaHVua0Vycm9yID0gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcE5hbWUsIGNodW5rKSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGNodW5rRXJyb3IpIHtcbiAgICAgIC8vIHRoaXMgY2h1bmsgaXMgaW52YWxpZFxuICAgICAgaWYgKG1pbmltdW0gPT09IDApIHtcbiAgICAgICAgLy8gYnV0LCBzcGVjaWZpZXIgaGFzIGEgbWluIG9mIDAgYW5kIGNhbiBiZSBza2lwcGVkXG4gICAgICAgIGNodW5rcy51bnNoaWZ0KGNodW5rKTsgLy8gcHV0IHRoZSBjaHVuayBiYWNrLCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uXG5cbiAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNodW5rRXJyb3I7XG4gICAgfSAvLyBjaHVuayBpcyB2YWxpZCFcblxuXG4gICAgaWYgKGNodW5rLmxlbmd0aCA8IG1pbmltdW0pIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogc3BlY2lmaWVyIGluZGV4IFwiKS5jb25jYXQoaSwgXCIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIFwiKS5jb25jYXQobWluLCBcIiBpdGVtcywgYnV0IG9ubHkgaGFzIFwiKS5jb25jYXQoY2h1bmsubGVuZ3RoLCBcIi5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaHVuay5sZW5ndGggPiBtYXhpbXVtKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHNwZWNpZmllciBpbmRleCBcIikuY29uY2F0KGksIFwiIHJlcXVpcmVzIGEgbWF4aW11bSBvZiBcIikuY29uY2F0KG1heCwgXCIgaXRlbXMsIGJ1dCBoYXMgXCIpLmNvbmNhdChjaHVuay5sZW5ndGgsIFwiLlwiKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IGFmdGVyIGFsbCBcIikuY29uY2F0KHNwZWNpZmllcnMubGVuZ3RoLCBcIiBzcGVjaWZpZXJzIG1hdGNoZWQsIFwiKS5jb25jYXQoY2h1bmtzLmxlbmd0aCwgXCIgdHlwZXMgb2YgaXRlbXMgd2VyZSByZW1haW5pbmcuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgc3BlY2lmaWVyVmFsaWRhdG9yID0gKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKSgoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKCksIHNwZWNpZmllclNoYXBlKS5pc1JlcXVpcmVkO1xuXG5mdW5jdGlvbiBzZXF1ZW5jZU9mVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzcGVjaWZpZXJzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBpZiAoc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2VxdWVuY2VPZjogYXQgbGVhc3Qgb25lIHNwZWNpZmllciBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIGVycm9ycyA9IHNwZWNpZmllcnMubWFwKGZ1bmN0aW9uIChzcGVjaWZpZXIsIGkpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyVmFsaWRhdG9yKHtcbiAgICAgIHNwZWNpZmllcjogc3BlY2lmaWVyXG4gICAgfSwgJ3NwZWNpZmllcicsICdzZXF1ZW5jZU9mIHNwZWNpZmllcicsIFwic3VlcXVlbmNlT2Ygc3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSksIFwic3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSkpO1xuICB9KTtcblxuICBpZiAoZXJyb3JzLnNvbWUoQm9vbGVhbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXFxuICAgICAgc2VxdWVuY2VPZjogYWxsIHNwZWNpZmllcnMgbXVzdCBtYXRjaCB0aGUgYXBwcm9wcmlhdGUgc2hhcGUuXFxuXFxuICAgICAgRXJyb3JzOlxcbiAgICAgICAgXCIuY29uY2F0KGVycm9ycy5tYXAoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgIHJldHVybiBcIiAtIEFyZ3VtZW50IGluZGV4IFwiLmNvbmNhdChpLCBcIjogXCIpLmNvbmNhdChlLm1lc3NhZ2UpO1xuICAgIH0pLmpvaW4oJyxcXG4gICAgICAgICcpLCBcIlxcbiAgICBcIikpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHNlcXVlbmNlT2YocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gX3Byb3BUeXBlcy5hcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaHVua3MuYXBwbHkodm9pZCAwLCBbc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gc2VxdWVuY2VPZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNCA+IDMgPyBfbGVuNCAtIDMgOiAwKSwgX2tleTQgPSAzOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICByZXN0W19rZXk0IC0gM10gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IF9wcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmFycmF5LCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ2h1bmtzLmFwcGx5KHZvaWQgMCwgW3NwZWNpZmllcnMsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnc2VxdWVuY2VPZicsIHNwZWNpZmllcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gc2hhcGVWYWxpZGF0b3I7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc2hhcGVWYWxpZGF0b3Ioc2hhcGVUeXBlcykge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHNoYXBlVHlwZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2hhcGUgbXVzdCBiZSBhIG5vcm1hbCBvYmplY3QnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoYXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGNvZGUgYWRhcHRlZCBmcm9tIFByb3BUeXBlcy5zaGFwZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wzODFcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG5cbiAgICAgIGlmIChjaGVja2VyKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIuYXBwbHkodm9pZCAwLCBbcHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2hhcGUuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHNoYXBlUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoc2hhcGUsICdzaGFwZScsIHNoYXBlVHlwZXMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHN0cmluZ0VuZHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdFbmRzV2l0aFZhbGlkYXRvcihlbmQpIHtcbiAgaWYgKHR5cGVvZiBlbmQgIT09ICdzdHJpbmcnIHx8IGVuZC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBzdHJpbmdFbmRzV2l0aChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nRXJyb3IgPSBfcHJvcFR5cGVzLnN0cmluZy5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BWYWx1ZS5lbmRzV2l0aChlbmQpIHx8IHByb3BWYWx1ZS5sZW5ndGggPD0gZW5kLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGRvZXMgbm90IGVuZCB3aXRoIFxcXCJcIikuY29uY2F0KGVuZCwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nRW5kc1dpdGgoKSB7XG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLnN0cmluZywgYXJndW1lbnRzKTtcblxuICAgIGlmIChzdHJpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmluZ0Vycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwic3RyaW5nRW5kc1dpdGg6IFwiLmNvbmNhdChlbmQpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZ0VuZHNXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yKHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdzdHJpbmcnIHx8IHN0YXJ0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Egbm9uLWVtcHR5IHN0cmluZyBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHN0cmluZ1N0YXJ0c1dpdGgocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wVmFsdWUuc3RhcnRzV2l0aChzdGFydCkgfHwgcHJvcFZhbHVlLmxlbmd0aCA8PSBzdGFydC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBkb2VzIG5vdCBzdGFydCB3aXRoIFxcXCJcIikuY29uY2F0KHN0YXJ0LCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmdTdGFydHNXaXRoKCkge1xuICAgIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5zdHJpbmcsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcInN0cmluZ1N0YXJ0c1dpdGg6IFwiLmNvbmNhdChzdGFydCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nU3RhcnRzV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB1bmlxdWVDb3VudFdpdGhTZXQoYXJyKSB7XG4gIHJldHVybiBuZXcgU2V0KGFycikuc2l6ZTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuZnVuY3Rpb24gdW5pcXVlQ291bnRMZWdhY3koYXJyKSB7XG4gIHZhciBzZWVuID0gW107XG4gIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKHNlZW4uaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIHNlZW4ucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2Vlbi5sZW5ndGg7XG59XG5cbnZhciBnZXRVbmlxdWVDb3VudCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgPyB1bmlxdWVDb3VudFdpdGhTZXQgOlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnVuaXF1ZUNvdW50TGVnYWN5O1xuXG5mdW5jdGlvbiByZXF1aXJlZFVuaXF1ZUFycmF5KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gX3Byb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLmFwcGx5KF9wcm9wVHlwZXMuYXJyYXksIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciB1bmlxdWVDb3VudCA9IGdldFVuaXF1ZUNvdW50KHByb3BWYWx1ZSk7XG5cbiAgaWYgKHVuaXF1ZUNvdW50ICE9PSBwcm9wVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUuIFwiKS5jb25jYXQocHJvcFZhbHVlLmxlbmd0aCAtIHVuaXF1ZUNvdW50LCBcIiBkdXBsaWNhdGUgdmFsdWVzIGZvdW5kLlwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHJlc3RbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRVbmlxdWVBcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG59XG5cbnVuaXF1ZUFycmF5LmlzUmVxdWlyZWQgPSByZXF1aXJlZFVuaXF1ZUFycmF5O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHVuaXF1ZUFycmF5LCAndW5pcXVlQXJyYXknKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdW5pcXVlQXJyYXlPZlR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIHVuaXF1ZSA9ICgwLCBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheU9mVHlwZVZhbGlkYXRvcih0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkYXRvciBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIG1hcHBlciA9IG51bGw7XG4gIHZhciBuYW1lID0gJ3VuaXF1ZUFycmF5T2ZUeXBlJztcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIHJlc3RbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1hcHBlciA9IHJlc3RbMF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdFswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSByZXN0WzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaW5nbGUgaW5wdXQgbXVzdCBlaXRoZXIgYmUgc3RyaW5nIG9yIGZ1bmN0aW9uJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiByZXN0WzBdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiByZXN0WzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbWFwcGVyID0gcmVzdFswXTtcbiAgICAgIG5hbWUgPSByZXN0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdWx0aXBsZSBpbnB1dHMgbXVzdCBiZSBpbiBbZnVuY3Rpb24sIHN0cmluZ10gb3JkZXInKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb25seSBbXSwgW25hbWVdLCBbbWFwcGVyXSwgYW5kIFttYXBwZXIsIG5hbWVdIGFyZSB2YWxpZCBpbnB1dHMnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaXF1ZUFycmF5T2ZNYXBwZWQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IHByb3BWYWx1ZS5tYXAobWFwcGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWUuYXBwbHkodm9pZCAwLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCB2YWx1ZXMpKSwgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH1cblxuICB1bmlxdWVBcnJheU9mTWFwcGVkLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBfcHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5hcnJheSwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlQXJyYXlPZk1hcHBlZC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGFycmF5VmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodHlwZSk7XG4gIHZhciB1bmlxdWVWYWxpZGF0b3IgPSBtYXBwZXIgPyB1bmlxdWVBcnJheU9mTWFwcGVkIDogdW5pcXVlO1xuICB2YXIgdmFsaWRhdG9yID0gKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbYXJyYXlWYWxpZGF0b3IsIHVuaXF1ZVZhbGlkYXRvcl0sIG5hbWUpO1xuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW3VuaXF1ZVZhbGlkYXRvci5pc1JlcXVpcmVkLCBhcnJheVZhbGlkYXRvci5pc1JlcXVpcmVkXSwgXCJcIi5jb25jYXQobmFtZSwgXCIuaXNSZXF1aXJlZFwiKSk7XG4gIHJldHVybiB2YWxpZGF0b3I7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheU9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2YWx1ZXNPZlZhbGlkYXRvcjtcblxudmFyIF9pc1ByaW1pdGl2ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1ByaW1pdGl2ZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIGNvZGUgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzE0MTU2ZTU2YjljZjE4YWM4Njk2MzE4NWM1YWY0YWJkZGYzZmY4MTEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy90eXBlcy9SZWFjdFByb3BUeXBlcy5qcyNMMzA3LUwzNDBcbmZ1bmN0aW9uIHZhbHVlc09mVmFsaWRhdG9yKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmplY3RPZjogcHJvcFR5cGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gdmFsdWVzT2YocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAoMCwgX2lzUHJpbWl0aXZlW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3I7XG4gICAgT2JqZWN0LmtleXMocHJvcFZhbHVlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZpcnN0RXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIFwiXCIuY29uY2F0KHByb3BGdWxsTmFtZSwgXCIuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0RXJyb3IgfHwgbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHZhbHVlc09mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ZhbHVlc09mJywgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsdWVzT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHdpdGhTaGFwZTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdpdGhTaGFwZSh0eXBlLCBzaGFwZVR5cGVzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlJyk7XG4gIH1cblxuICB2YXIgc2hhcGVWYWxpZGF0b3IgPSAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoc2hhcGVUeXBlcyk7XG4gIHJldHVybiAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFt0eXBlLCBzaGFwZVZhbGlkYXRvcl0sICd3aXRoU2hhcGUnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhTaGFwZS5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyByZXF1aXJlKCcuL2J1aWxkL21vY2tzJykgOiByZXF1aXJlKCcuL2J1aWxkJyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSkge1xuXHR2YXIgbGlzdCA9IFRvT2JqZWN0KHRoaXMpO1xuXHR2YXIgbGVuZ3RoID0gVG9MZW5ndGgobGlzdC5sZW5ndGgpO1xuXHRpZiAoIUlzQ2FsbGFibGUocHJlZGljYXRlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5I2ZpbmQ6IHByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAobGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHZvaWQgMDtcblx0fVxuXHR2YXIgdGhpc0FyZztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0dGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAwLCB2YWx1ZTsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0dmFsdWUgPSBsaXN0W2ldO1xuXHRcdC8vIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlOiBpZiAoQ2FsbChwcmVkaWNhdGUsIHRoaXNBcmcsIFt2YWx1ZSwgaSwgbGlzdF0pKSB7XG5cdFx0aWYgKHByZWRpY2F0ZS5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGksIGxpc3RdKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdm9pZCAwO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyICRzbGljZSA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnNsaWNlJyk7XG5cbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cbnZhciBib3VuZEZpbmRTaGltID0gZnVuY3Rpb24gZmluZChhcnJheSwgcHJlZGljYXRlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZShhcnJheSk7XG5cdHZhciBhcmdzID0gJHNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShhcnJheSwgYXJncyk7XG59O1xuXG5kZWZpbmUoYm91bmRGaW5kU2hpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRGaW5kU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0Ly8gRGV0ZWN0IGlmIGFuIGltcGxlbWVudGF0aW9uIGV4aXN0c1xuXHQvLyBEZXRlY3QgZWFybHkgaW1wbGVtZW50YXRpb25zIHdoaWNoIHNraXBwZWQgaG9sZXMgaW4gc3BhcnNlIGFycmF5c1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc3BhcnNlLWFycmF5c1xuXHR2YXIgaW1wbGVtZW50ZWQgPSBBcnJheS5wcm90b3R5cGUuZmluZCAmJiBbLCAxXS5maW5kKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkgIT09IDE7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG5cdHJldHVybiBpbXBsZW1lbnRlZCA/IEFycmF5LnByb3RvdHlwZS5maW5kIDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFycmF5UHJvdG90eXBlRmluZCgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblxuXHRkZWZpbmUoQXJyYXkucHJvdG90eXBlLCB7IGZpbmQ6IHBvbHlmaWxsIH0sIHtcblx0XHRmaW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCcuLycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIiwiLyoqXG4gKiBjaHJvbWEuanMgLSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGNvbG9yIGNvbnZlcnNpb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTksIEdyZWdvciBBaXNjaFxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gVGhlIG5hbWUgR3JlZ29yIEFpc2NoIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdSRUdPUiBBSVNDSCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIGNocm9tYS5qcyBpbmNsdWRlcyBjb2xvcnMgZnJvbSBjb2xvcmJyZXdlcjIub3JnLCB3aGljaCBhcmUgcmVsZWFzZWQgdW5kZXJcbiAqIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsXG4gKiBhbmQgVGhlIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogTmFtZWQgY29sb3JzIGFyZSB0YWtlbiBmcm9tIFgxMSBDb2xvciBOYW1lcy5cbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICpcbiAqIEBwcmVzZXJ2ZVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLmNocm9tYSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgbGltaXQkMiA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoIG1pbiA9PT0gdm9pZCAwICkgbWluPTA7XG4gICAgICAgIGlmICggbWF4ID09PSB2b2lkIDAgKSBtYXg9MTtcblxuICAgICAgICByZXR1cm4geCA8IG1pbiA/IG1pbiA6IHggPiBtYXggPyBtYXggOiB4O1xuICAgIH07XG5cbiAgICB2YXIgbGltaXQkMSA9IGxpbWl0JDI7XG5cbiAgICB2YXIgY2xpcF9yZ2IkMyA9IGZ1bmN0aW9uIChyZ2IpIHtcbiAgICAgICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgICAgIHJnYi5fdW5jbGlwcGVkID0gcmdiLnNsaWNlKDApO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8PTM7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCAzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSB7IHJnYi5fY2xpcHBlZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICByZ2JbaV0gPSBsaW1pdCQxKHJnYltpXSwgMCwgMjU1KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0JDEocmdiW2ldLCAwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH07XG5cbiAgICAvLyBwb3J0ZWQgZnJvbSBqUXVlcnkncyAkLnR5cGVcbiAgICB2YXIgY2xhc3NUb1R5cGUgPSB7fTtcbiAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBbJ0Jvb2xlYW4nLCAnTnVtYmVyJywgJ1N0cmluZycsICdGdW5jdGlvbicsICdBcnJheScsICdEYXRlJywgJ1JlZ0V4cCcsICdVbmRlZmluZWQnLCAnTnVsbCddOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICB2YXIgbmFtZSA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICAgIGNsYXNzVG9UeXBlWyhcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgdmFyIHR5cGUkcCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8IFwib2JqZWN0XCI7XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG8gPSB0eXBlJHA7XG5cbiAgICB2YXIgdW5wYWNrJEIgPSBmdW5jdGlvbiAoYXJncywga2V5T3JkZXIpIHtcbiAgICAgICAgaWYgKCBrZXlPcmRlciA9PT0gdm9pZCAwICkga2V5T3JkZXI9bnVsbDtcblxuICAgIFx0Ly8gaWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMgYXJndW1lbnRzLCB3ZSByZXR1cm4gdGhlIGFyZ3VtZW50c1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMykgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7IH1cbiAgICAgICAgLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAgICAgLy8gYW5kIHVzZSB0aGUga2V5T3JkZXIgc3RyaW5nIHRvIGV4dHJhY3QgYW5kIHNvcnQgcHJvcGVydGllc1xuICAgIFx0aWYgKHR5cGUkbyhhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgIFx0XHRyZXR1cm4ga2V5T3JkZXIuc3BsaXQoJycpXG4gICAgXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoaykgeyByZXR1cm4gYXJnc1swXVtrXSAhPT0gdW5kZWZpbmVkOyB9KVxuICAgIFx0XHRcdC5tYXAoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGFyZ3NbMF1ba107IH0pO1xuICAgIFx0fVxuICAgIFx0Ly8gb3RoZXJ3aXNlIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgIFx0Ly8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG4gPSB0eXBlJHA7XG5cbiAgICB2YXIgbGFzdCQ0ID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICB2YXIgbCA9IGFyZ3MubGVuZ3RoLTE7XG4gICAgICAgIGlmICh0eXBlJG4oYXJnc1tsXSkgPT0gJ3N0cmluZycpIHsgcmV0dXJuIGFyZ3NbbF0udG9Mb3dlckNhc2UoKTsgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIFBJJDIgPSBNYXRoLlBJO1xuXG4gICAgdmFyIHV0aWxzID0ge1xuICAgIFx0Y2xpcF9yZ2I6IGNsaXBfcmdiJDMsXG4gICAgXHRsaW1pdDogbGltaXQkMixcbiAgICBcdHR5cGU6IHR5cGUkcCxcbiAgICBcdHVucGFjazogdW5wYWNrJEIsXG4gICAgXHRsYXN0OiBsYXN0JDQsXG4gICAgXHRQSTogUEkkMixcbiAgICBcdFRXT1BJOiBQSSQyKjIsXG4gICAgXHRQSVRISVJEOiBQSSQyLzMsXG4gICAgXHRERUcyUkFEOiBQSSQyIC8gMTgwLFxuICAgIFx0UkFEMkRFRzogMTgwIC8gUEkkMlxuICAgIH07XG5cbiAgICB2YXIgaW5wdXQkaCA9IHtcbiAgICBcdGZvcm1hdDoge30sXG4gICAgXHRhdXRvZGV0ZWN0OiBbXVxuICAgIH07XG5cbiAgICB2YXIgbGFzdCQzID0gdXRpbHMubGFzdDtcbiAgICB2YXIgY2xpcF9yZ2IkMiA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciB0eXBlJG0gPSB1dGlscy50eXBlO1xuICAgIHZhciBfaW5wdXQgPSBpbnB1dCRoO1xuXG4gICAgdmFyIENvbG9yJEQgPSBmdW5jdGlvbiBDb2xvcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZSRtKGFyZ3NbMF0pID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBDb2xvciBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQzKGFyZ3MpO1xuICAgICAgICB2YXIgYXV0b2RldGVjdCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgICAgYXV0b2RldGVjdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIV9pbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBfaW5wdXQuYXV0b2RldGVjdCA9IF9pbnB1dC5hdXRvZGV0ZWN0LnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYi5wIC0gYS5wOyB9KTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBfaW5wdXQuYXV0b2RldGVjdDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hrID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgIG1vZGUgPSBjaGsudGVzdC5hcHBseShjaGssIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IF9pbnB1dC5mb3JtYXRbbW9kZV0uYXBwbHkobnVsbCwgYXV0b2RldGVjdCA/IGFyZ3MgOiBhcmdzLnNsaWNlKDAsLTEpKTtcbiAgICAgICAgICAgIG1lLl9yZ2IgPSBjbGlwX3JnYiQyKHJnYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0OiAnK2FyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGFscGhhIGNoYW5uZWxcbiAgICAgICAgaWYgKG1lLl9yZ2IubGVuZ3RoID09PSAzKSB7IG1lLl9yZ2IucHVzaCgxKTsgfVxuICAgIH07XG5cbiAgICBDb2xvciRELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICAgICAgaWYgKHR5cGUkbSh0aGlzLmhleCkgPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gdGhpcy5oZXgoKTsgfVxuICAgICAgICByZXR1cm4gKFwiW1wiICsgKHRoaXMuX3JnYi5qb2luKCcsJykpICsgXCJdXCIpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3JfMSA9IENvbG9yJEQ7XG5cbiAgICB2YXIgY2hyb21hJGsgPSBmdW5jdGlvbiAoKSB7XG4gICAgXHR2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIFx0d2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIFx0cmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIGNocm9tYSRrLkNvbG9yLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MpICkpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkay5Db2xvciA9IENvbG9yXzE7XG4gICAgY2hyb21hJGsudmVyc2lvbiA9ICcyLjQuMic7XG5cbiAgICB2YXIgY2hyb21hXzEgPSBjaHJvbWEkaztcblxuICAgIHZhciB1bnBhY2skQSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbWF4JDIgPSBNYXRoLm1heDtcblxuICAgIHZhciByZ2IyY215ayQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skQShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgPSByIC8gMjU1O1xuICAgICAgICBnID0gZyAvIDI1NTtcbiAgICAgICAgYiA9IGIgLyAyNTU7XG4gICAgICAgIHZhciBrID0gMSAtIG1heCQyKHIsbWF4JDIoZyxiKSk7XG4gICAgICAgIHZhciBmID0gayA8IDEgPyAxIC8gKDEtaykgOiAwO1xuICAgICAgICB2YXIgYyA9ICgxLXItaykgKiBmO1xuICAgICAgICB2YXIgbSA9ICgxLWctaykgKiBmO1xuICAgICAgICB2YXIgeSA9ICgxLWItaykgKiBmO1xuICAgICAgICByZXR1cm4gW2MsbSx5LGtdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmNteWtfMSA9IHJnYjJjbXlrJDE7XG5cbiAgICB2YXIgdW5wYWNrJHogPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgY215azJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayR6KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIHZhciBjID0gYXJnc1swXTtcbiAgICAgICAgdmFyIG0gPSBhcmdzWzFdO1xuICAgICAgICB2YXIgeSA9IGFyZ3NbMl07XG4gICAgICAgIHZhciBrID0gYXJnc1szXTtcbiAgICAgICAgdmFyIGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG4gICAgICAgIGlmIChrID09PSAxKSB7IHJldHVybiBbMCwwLDAsYWxwaGFdOyB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBjID49IDEgPyAwIDogMjU1ICogKDEtYykgKiAoMS1rKSwgLy8gclxuICAgICAgICAgICAgbSA+PSAxID8gMCA6IDI1NSAqICgxLW0pICogKDEtayksIC8vIGdcbiAgICAgICAgICAgIHkgPj0gMSA/IDAgOiAyNTUgKiAoMS15KSAqICgxLWspLCAvLyBiXG4gICAgICAgICAgICBhbHBoYVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgY215azJyZ2JfMSA9IGNteWsycmdiO1xuXG4gICAgdmFyIGNocm9tYSRqID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJEMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRnID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJHkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkbCA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNteWsgPSByZ2IyY215a18xO1xuXG4gICAgQ29sb3IkQy5wcm90b3R5cGUuY215ayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmNteWsodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGouY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkQywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2NteWsnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGcuZm9ybWF0LmNteWsgPSBjbXlrMnJnYl8xO1xuXG4gICAgaW5wdXQkZy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayR5KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRsKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjbXlrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayR4ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDIgPSB1dGlscy5sYXN0O1xuICAgIHZhciBybmQgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gTWF0aC5yb3VuZChhKjEwMCkvMTAwOyB9O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gaHNsMmNzcyhoLHMsbClcbiAgICAgKiAtIGhzbDJjc3MoaCxzLGwsYSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICAgICAqIC0gaHNsMmNzcyh7aCxzLGwsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIGhzbDJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgaHNsYSA9IHVucGFjayR4KGFyZ3MsICdoc2xhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQyKGFyZ3MpIHx8ICdsc2EnO1xuICAgICAgICBoc2xhWzBdID0gcm5kKGhzbGFbMF0gfHwgMCk7XG4gICAgICAgIGhzbGFbMV0gPSBybmQoaHNsYVsxXSoxMDApICsgJyUnO1xuICAgICAgICBoc2xhWzJdID0gcm5kKGhzbGFbMl0qMTAwKSArICclJztcbiAgICAgICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM108MSkpIHtcbiAgICAgICAgICAgIGhzbGFbM10gPSBoc2xhLmxlbmd0aCA+IDMgPyBoc2xhWzNdIDogMTtcbiAgICAgICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoc2xhLmxlbmd0aCA9IDM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChtb2RlICsgXCIoXCIgKyAoaHNsYS5qb2luKCcsJykpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICB2YXIgaHNsMmNzc18xID0gaHNsMmNzcyQxO1xuXG4gICAgdmFyIHVucGFjayR3ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzbChyLGcsYilcbiAgICAgKiAtIHJnYjJoc2wocixnLGIsYSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiLGFdKVxuICAgICAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gICAgICovXG4gICAgdmFyIHJnYjJoc2wkMyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJHcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgZyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcblxuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXG4gICAgICAgIHZhciBsID0gKG1heCArIG1pbikgLyAyO1xuICAgICAgICB2YXIgcywgaDtcblxuICAgICAgICBpZiAobWF4ID09PSBtaW4pe1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBsIDwgMC41ID8gKG1heCAtIG1pbikgLyAobWF4ICsgbWluKSA6IChtYXggLSBtaW4pIC8gKDIgLSBtYXggLSBtaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIgPT0gbWF4KSB7IGggPSAoZyAtIGIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoZyA9PSBtYXgpIHsgaCA9IDIgKyAoYiAtIHIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoYiA9PSBtYXgpIHsgaCA9IDQgKyAociAtIGcpIC8gKG1heCAtIG1pbik7IH1cblxuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoPjMgJiYgYXJnc1szXSE9PXVuZGVmaW5lZCkgeyByZXR1cm4gW2gscyxsLGFyZ3NbM11dOyB9XG4gICAgICAgIHJldHVybiBbaCxzLGxdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzbF8xID0gcmdiMmhzbCQzO1xuXG4gICAgdmFyIHVucGFjayR2ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDEgPSB1dGlscy5sYXN0O1xuICAgIHZhciBoc2wyY3NzID0gaHNsMmNzc18xO1xuICAgIHZhciByZ2IyaHNsJDIgPSByZ2IyaHNsXzE7XG4gICAgdmFyIHJvdW5kJDYgPSBNYXRoLnJvdW5kO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmNzcyhyLGcsYilcbiAgICAgKiAtIHJnYjJjc3MocixnLGIsYSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiLGFdLCBtb2RlKVxuICAgICAqIC0gcmdiMmNzcyh7cixnLGIsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIHJnYjJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiYSA9IHVucGFjayR2KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQxKGFyZ3MpIHx8ICdyZ2InO1xuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwzKSA9PSAnaHNsJykge1xuICAgICAgICAgICAgcmV0dXJuIGhzbDJjc3MocmdiMmhzbCQyKHJnYmEpLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZ2JhWzBdID0gcm91bmQkNihyZ2JhWzBdKTtcbiAgICAgICAgcmdiYVsxXSA9IHJvdW5kJDYocmdiYVsxXSk7XG4gICAgICAgIHJnYmFbMl0gPSByb3VuZCQ2KHJnYmFbMl0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ3JnYmEnIHx8IChyZ2JhLmxlbmd0aCA+IDMgJiYgcmdiYVszXTwxKSkge1xuICAgICAgICAgICAgcmdiYVszXSA9IHJnYmEubGVuZ3RoID4gMyA/IHJnYmFbM10gOiAxO1xuICAgICAgICAgICAgbW9kZSA9ICdyZ2JhJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG1vZGUgKyBcIihcIiArIChyZ2JhLnNsaWNlKDAsbW9kZT09PSdyZ2InPzM6NCkuam9pbignLCcpKSArIFwiKVwiKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJjc3NfMSA9IHJnYjJjc3MkMTtcblxuICAgIHZhciB1bnBhY2skdSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcm91bmQkNSA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgaHNsMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduO1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skdShhcmdzLCAnaHNsJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IGwqMjU1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHQzID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciBjID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciB0MiA9IGwgPCAwLjUgPyBsICogKDErcykgOiBsK3MtbCpzO1xuICAgICAgICAgICAgdmFyIHQxID0gMiAqIGwgLSB0MjtcbiAgICAgICAgICAgIHZhciBoXyA9IGggLyAzNjA7XG4gICAgICAgICAgICB0M1swXSA9IGhfICsgMS8zO1xuICAgICAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgICAgIHQzWzJdID0gaF8gLSAxLzM7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgeyB0M1tpXSArPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldID4gMSkgeyB0M1tpXSAtPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKDYgKiB0M1tpXSA8IDEpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldOyB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDI7IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgzICogdDNbaV0gPCAyKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgoMiAvIDMpIC0gdDNbaV0pICogNjsgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDE7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChhc3NpZ24gPSBbcm91bmQkNShjWzBdKjI1NSkscm91bmQkNShjWzFdKjI1NSkscm91bmQkNShjWzJdKjI1NSldLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsYXJnc1szXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzbDJyZ2JfMSA9IGhzbDJyZ2IkMTtcblxuICAgIHZhciBoc2wycmdiID0gaHNsMnJnYl8xO1xuICAgIHZhciBpbnB1dCRmID0gaW5wdXQkaDtcblxuICAgIHZhciBSRV9SR0IgPSAvXnJnYlxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccypcXCkkLztcbiAgICB2YXIgUkVfUkdCQSA9IC9ecmdiYVxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfUkdCX1BDVCA9IC9ecmdiXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuICAgIHZhciBSRV9SR0JBX1BDVCA9IC9ecmdiYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfSFNMID0gL15oc2xcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgICB2YXIgUkVfSFNMQSA9IC9eaHNsYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuXG4gICAgdmFyIHJvdW5kJDQgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGNzczJyZ2IkMSA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgY3NzID0gY3NzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICB2YXIgbTtcblxuICAgICAgICBpZiAoaW5wdXQkZi5mb3JtYXQubmFtZWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0JGYuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0IpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiWzNdID0gMTsgIC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiByZ2I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkEpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQxID0gbS5zbGljZSgxLDUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTw0OyBpJDErKykge1xuICAgICAgICAgICAgICAgIHJnYiQxW2kkMV0gPSArcmdiJDFbaSQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZ2IkMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYigxMDAlLDAlLDAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCX1BDVCkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDIgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDI9MDsgaSQyPDM7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDJbaSQyXSA9IHJvdW5kJDQocmdiJDJbaSQyXSAqIDIuNTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiJDJbM10gPSAxOyAgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiYSgxMDAlLDAlLDAlLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMyA9IG0uc2xpY2UoMSw1KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0wOyBpJDM8MzsgaSQzKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkM1tpJDNdID0gcm91bmQkNChyZ2IkM1tpJDNdICogMi41NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2IkM1szXSA9ICtyZ2IkM1szXTtcbiAgICAgICAgICAgIHJldHVybiByZ2IkMztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhzbCgwLDEwMCUsNTAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfSFNMKSkpIHtcbiAgICAgICAgICAgIHZhciBoc2wgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgICAgICAgdmFyIHJnYiQ0ID0gaHNsMnJnYihoc2wpO1xuICAgICAgICAgICAgcmdiJDRbM10gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIHJnYiQ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHNsYSgwLDEwMCUsNTAlLDAuNSlcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICAgICAgdmFyIGhzbCQxID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgaHNsJDFbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbCQxWzJdICo9IDAuMDE7XG4gICAgICAgICAgICB2YXIgcmdiJDUgPSBoc2wycmdiKGhzbCQxKTtcbiAgICAgICAgICAgIHJnYiQ1WzNdID0gK21bNF07ICAvLyBkZWZhdWx0IGFscGhhID0gMVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQ1O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNzczJyZ2IkMS50ZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIFJFX1JHQi50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQl9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCQV9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX0hTTEEudGVzdChzKTtcbiAgICB9O1xuXG4gICAgdmFyIGNzczJyZ2JfMSA9IGNzczJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkaSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRCID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkZSA9IGlucHV0JGg7XG4gICAgdmFyIHR5cGUkayA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNzcyA9IHJnYjJjc3NfMTtcbiAgICB2YXIgY3NzMnJnYiA9IGNzczJyZ2JfMTtcblxuICAgIENvbG9yJEIucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGkuY3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRCLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnY3NzJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRlLmZvcm1hdC5jc3MgPSBjc3MycmdiO1xuXG4gICAgaW5wdXQkZS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRrKGgpID09PSAnc3RyaW5nJyAmJiBjc3MycmdiLnRlc3QoaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Nzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRBID0gQ29sb3JfMTtcbiAgICB2YXIgY2hyb21hJGggPSBjaHJvbWFfMTtcbiAgICB2YXIgaW5wdXQkZCA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayR0ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgaW5wdXQkZC5mb3JtYXQuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYiA9IHVucGFjayR0KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHJnYlswXSAqPSAyNTU7XG4gICAgICAgIHJnYlsxXSAqPSAyNTU7XG4gICAgICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfTtcblxuICAgIGNocm9tYSRoLmdsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRBLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnZ2wnXSkgKSk7XG4gICAgfTtcblxuICAgIENvbG9yJEEucHJvdG90eXBlLmdsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgICAgIHJldHVybiBbcmdiWzBdLzI1NSwgcmdiWzFdLzI1NSwgcmdiWzJdLzI1NSwgcmdiWzNdXTtcbiAgICB9O1xuXG4gICAgdmFyIHVucGFjayRzID0gdXRpbHMudW5wYWNrO1xuXG4gICAgdmFyIHJnYjJoY2ckMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJHMoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICAgICAgdmFyIGRlbHRhID0gbWF4IC0gbWluO1xuICAgICAgICB2YXIgYyA9IGRlbHRhICogMTAwIC8gMjU1O1xuICAgICAgICB2YXIgX2cgPSBtaW4gLyAoMjU1IC0gZGVsdGEpICogMTAwO1xuICAgICAgICB2YXIgaDtcbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyID09PSBtYXgpIHsgaCA9IChnIC0gYikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGcgPT09IG1heCkgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXgpIHsgaCA9IDQrKHIgLSBnKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBoICo9IDYwO1xuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoLCBjLCBfZ107XG4gICAgfTtcblxuICAgIHZhciByZ2IyaGNnXzEgPSByZ2IyaGNnJDE7XG5cbiAgICB2YXIgdW5wYWNrJHIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDMgPSBNYXRoLmZsb29yO1xuXG4gICAgLypcbiAgICAgKiB0aGlzIGlzIGJhc2ljYWxseSBqdXN0IEhTViB3aXRoIHNvbWUgbWlub3IgdHdlYWtzXG4gICAgICpcbiAgICAgKiBodWUuLiBbMC4uMzYwXVxuICAgICAqIGNocm9tYSAuLiBbMC4uMV1cbiAgICAgKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAgICAgKi9cblxuICAgIHZhciBoY2cycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDIsIGFzc2lnbiQzLCBhc3NpZ24kNCwgYXNzaWduJDU7XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayRyKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBfZyA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgX2cgPSBfZyAqIDI1NTtcbiAgICAgICAgdmFyIF9jID0gYyAqIDI1NTtcbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPT09IDM2MCkgeyBoID0gMDsgfVxuICAgICAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMyhoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IF9nICogKDEgLSBjKTtcbiAgICAgICAgICAgIHZhciBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgICAgICAgIHZhciB0ID0gcCArIF9jICogZjtcbiAgICAgICAgICAgIHZhciB2ID0gcCArIF9jO1xuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaGNnMnJnYl8xID0gaGNnMnJnYjtcblxuICAgIHZhciB1bnBhY2skcSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRqID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGcgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGMgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoY2cgPSByZ2IyaGNnXzE7XG5cbiAgICBDb2xvciR6LnByb3RvdHlwZS5oY2cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoY2codGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGcuaGNnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR6LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNnJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRjLmZvcm1hdC5oY2cgPSBoY2cycmdiXzE7XG5cbiAgICBpbnB1dCRjLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDEsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJHEoYXJncywgJ2hjZycpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGNnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRwID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0ID0gdXRpbHMubGFzdDtcbiAgICB2YXIgcm91bmQkMyA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgcmdiMmhleCQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skcChhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgYSA9IHJlZlszXTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdhdXRvJztcbiAgICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgeyBhID0gMTsgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICAgICAgfVxuICAgICAgICByID0gcm91bmQkMyhyKTtcbiAgICAgICAgZyA9IHJvdW5kJDMoZyk7XG4gICAgICAgIGIgPSByb3VuZCQzKGIpO1xuICAgICAgICB2YXIgdSA9IHIgPDwgMTYgfCBnIDw8IDggfCBiO1xuICAgICAgICB2YXIgc3RyID0gXCIwMDAwMDBcIiArIHUudG9TdHJpbmcoMTYpOyAvLyMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgICAgIHZhciBoeGEgPSAnMCcgKyByb3VuZCQzKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaHhhID0gaHhhLnN1YnN0cihoeGEubGVuZ3RoIC0gMik7XG4gICAgICAgIHN3aXRjaCAobW9kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdyZ2JhJzogcmV0dXJuIChcIiNcIiArIHN0ciArIGh4YSk7XG4gICAgICAgICAgICBjYXNlICdhcmdiJzogcmV0dXJuIChcIiNcIiArIGh4YSArIHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gKFwiI1wiICsgc3RyKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmdiMmhleF8xID0gcmdiMmhleCQyO1xuXG4gICAgdmFyIFJFX0hFWCA9IC9eIz8oW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XG4gICAgdmFyIFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG4gICAgdmFyIGhleDJyZ2IkMSA9IGZ1bmN0aW9uIChoZXgpIHtcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVgpKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIHNpeC1kaWdpdFxuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgICAgIHZhciByID0gdSA+PiAxNjtcbiAgICAgICAgICAgIHZhciBnID0gdSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gdSAmIDB4RkY7XG4gICAgICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF0Y2ggcmdiYSBoZXggZm9ybWF0LCBlZyAjRkYwMDAwNzdcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVhBKSkge1xuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXStoZXhbM10raGV4WzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUkMSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdmFyIHIkMSA9IHUkMSA+PiAyNCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgZyQxID0gdSQxID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiJDEgPSB1JDEgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYSA9IE1hdGgucm91bmQoKHUkMSAmIDB4RkYpIC8gMHhGRiAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gW3IkMSxnJDEsYiQxLGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgdXNlZCB0byBjaGVjayBmb3IgY3NzIGNvbG9ycyBoZXJlXG4gICAgICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgICAgICAvLyAgICAgcmV0dXJuIHJnYlxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGhleCBjb2xvcjogXCIgKyBoZXgpKTtcbiAgICB9O1xuXG4gICAgdmFyIGhleDJyZ2JfMSA9IGhleDJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkZiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR5ID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSRpID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW5wdXQkYiA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhleCQxID0gcmdiMmhleF8xO1xuXG4gICAgQ29sb3IkeS5wcm90b3R5cGUuaGV4ID0gZnVuY3Rpb24obW9kZSkge1xuICAgICAgICByZXR1cm4gcmdiMmhleCQxKHRoaXMuX3JnYiwgbW9kZSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRmLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkeSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hleCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkYi5mb3JtYXQuaGV4ID0gaGV4MnJnYl8xO1xuICAgIGlucHV0JGIuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNCxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkaShoKSA9PT0gJ3N0cmluZycgJiYgWzMsNCw1LDYsNyw4LDldLmluZGV4T2YoaC5sZW5ndGgpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skbyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgVFdPUEkkMiA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBtaW4kMiA9IE1hdGgubWluO1xuICAgIHZhciBzcXJ0JDQgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGFjb3MgPSBNYXRoLmFjb3M7XG5cbiAgICB2YXIgcmdiMmhzaSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICAgICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL3JnYjJoc2kuY3BwXG4gICAgICAgICovXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skbyhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG4gICAgICAgIHZhciBoO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQyKHIsZyxiKTtcbiAgICAgICAgdmFyIGkgPSAocitnK2IpIC8gMztcbiAgICAgICAgdmFyIHMgPSBpID4gMCA/IDEgLSBtaW5fL2kgOiAwO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGggPSAoKHItZykrKHItYikpIC8gMjtcbiAgICAgICAgICAgIGggLz0gc3FydCQ0KChyLWcpKihyLWcpICsgKHItYikqKGctYikpO1xuICAgICAgICAgICAgaCA9IGFjb3MoaCk7XG4gICAgICAgICAgICBpZiAoYiA+IGcpIHtcbiAgICAgICAgICAgICAgICBoID0gVFdPUEkkMiAtIGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoIC89IFRXT1BJJDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoKjM2MCxzLGldO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzaV8xID0gcmdiMmhzaSQxO1xuXG4gICAgdmFyIHVucGFjayRuID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsaW1pdCA9IHV0aWxzLmxpbWl0O1xuICAgIHZhciBUV09QSSQxID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIFBJVEhJUkQgPSB1dGlscy5QSVRISVJEO1xuICAgIHZhciBjb3MkNCA9IE1hdGguY29zO1xuXG4gICAgLypcbiAgICAgKiBodWUgWzAuLjM2MF1cbiAgICAgKiBzYXR1cmF0aW9uIFswLi4xXVxuICAgICAqIGludGVuc2l0eSBbMC4uMV1cbiAgICAgKi9cbiAgICB2YXIgaHNpMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvKlxuICAgICAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9oc2kycmdiLmNwcFxuICAgICAgICAqL1xuICAgICAgICBhcmdzID0gdW5wYWNrJG4oYXJncywgJ2hzaScpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGkgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG5cbiAgICAgICAgaWYgKGlzTmFOKGgpKSB7IGggPSAwOyB9XG4gICAgICAgIGlmIChpc05hTihzKSkgeyBzID0gMDsgfVxuICAgICAgICAvLyBub3JtYWxpemUgaHVlXG4gICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICBoIC89IDM2MDtcbiAgICAgICAgaWYgKGggPCAxLzMpIHtcbiAgICAgICAgICAgIGIgPSAoMS1zKS8zO1xuICAgICAgICAgICAgciA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICBnID0gMSAtIChiK3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAyLzMpIHtcbiAgICAgICAgICAgIGggLT0gMS8zO1xuICAgICAgICAgICAgciA9ICgxLXMpLzM7XG4gICAgICAgICAgICBnID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIGIgPSAxIC0gKHIrZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoIC09IDIvMztcbiAgICAgICAgICAgIGcgPSAoMS1zKS8zO1xuICAgICAgICAgICAgYiA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICByID0gMSAtIChnK2IpO1xuICAgICAgICB9XG4gICAgICAgIHIgPSBsaW1pdChpKnIqMyk7XG4gICAgICAgIGcgPSBsaW1pdChpKmcqMyk7XG4gICAgICAgIGIgPSBsaW1pdChpKmIqMyk7XG4gICAgICAgIHJldHVybiBbcioyNTUsIGcqMjU1LCBiKjI1NSwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaHNpMnJnYl8xID0gaHNpMnJnYjtcblxuICAgIHZhciB1bnBhY2skbSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRoID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGEgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoc2kgPSByZ2IyaHNpXzE7XG5cbiAgICBDb2xvciR4LnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGUuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR4LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNpJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRhLmZvcm1hdC5oc2kgPSBoc2kycmdiXzE7XG5cbiAgICBpbnB1dCRhLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJG0oYXJncywgJ2hzaScpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRsID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGcgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR3ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzbCQxID0gcmdiMmhzbF8xO1xuXG4gICAgQ29sb3Ikdy5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHNsJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGQuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR3LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ5LmZvcm1hdC5oc2wgPSBoc2wycmdiXzE7XG5cbiAgICBpbnB1dCQ5LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJGwoYXJncywgJ2hzbCcpO1xuICAgICAgICAgICAgaWYgKHR5cGUkZyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRrID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBtaW4kMSA9IE1hdGgubWluO1xuICAgIHZhciBtYXgkMSA9IE1hdGgubWF4O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzdihyLGcsYilcbiAgICAgKiAtIHJnYjJoc3YoW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc3Yoe3IsZyxifSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmhzbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGsoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4XyA9IG1heCQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgZGVsdGEgPSBtYXhfIC0gbWluXztcbiAgICAgICAgdmFyIGgscyx2O1xuICAgICAgICB2ID0gbWF4XyAvIDI1NS4wO1xuICAgICAgICBpZiAobWF4XyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgICAgICBpZiAociA9PT0gbWF4XykgeyBoID0gKGcgLSBiKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoZyA9PT0gbWF4XykgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXhfKSB7IGggPSA0KyhyIC0gZykgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCwgcywgdl1cbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoc3YkMSA9IHJnYjJoc2w7XG5cbiAgICB2YXIgdW5wYWNrJGogPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDIgPSBNYXRoLmZsb29yO1xuXG4gICAgdmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJGooYXJncywgJ2hzdicpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIHYgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIHYgKj0gMjU1O1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gdjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoID09PSAzNjApIHsgaCA9IDA7IH1cbiAgICAgICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMihoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICAgICAgdmFyIHEgPSB2ICogKDEgLSBzICogZik7XG4gICAgICAgICAgICB2YXIgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTtcblxuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsYXJncy5sZW5ndGggPiAzP2FyZ3NbM106MV07XG4gICAgfTtcblxuICAgIHZhciBoc3YycmdiXzEgPSBoc3YycmdiO1xuXG4gICAgdmFyIHVucGFjayRpID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGYgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkYyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR2ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOCA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzdiA9IHJnYjJoc3YkMTtcblxuICAgIENvbG9yJHYucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYy5oc3YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHYsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc3YnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDguZm9ybWF0LmhzdiA9IGhzdjJyZ2JfMTtcblxuICAgIGlucHV0JDguYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skaShhcmdzLCAnaHN2Jyk7XG4gICAgICAgICAgICBpZiAodHlwZSRmKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbGFiQ29uc3RhbnRzID0ge1xuICAgICAgICAvLyBDb3JyZXNwb25kcyByb3VnaGx5IHRvIFJHQiBicmlnaHRlci9kYXJrZXJcbiAgICAgICAgS246IDE4LFxuXG4gICAgICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgICAgICBYbjogMC45NTA0NzAsXG4gICAgICAgIFluOiAxLFxuICAgICAgICBabjogMS4wODg4MzAsXG5cbiAgICAgICAgdDA6IDAuMTM3OTMxMDM0LCAgLy8gNCAvIDI5XG4gICAgICAgIHQxOiAwLjIwNjg5NjU1MiwgIC8vIDYgLyAyOVxuICAgICAgICB0MjogMC4xMjg0MTg1NSwgICAvLyAzICogdDEgKiB0MVxuICAgICAgICB0MzogMC4wMDg4NTY0NTIsICAvLyB0MSAqIHQxICogdDFcbiAgICB9O1xuXG4gICAgdmFyIExBQl9DT05TVEFOVFMkMyA9IGxhYkNvbnN0YW50cztcbiAgICB2YXIgdW5wYWNrJGggPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHBvdyRhID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgcmdiMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skaChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJ4eXoocixnLGIpO1xuICAgICAgICB2YXIgeCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgeSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgeiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgbCA9IDExNiAqIHkgLSAxNjtcbiAgICAgICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYl94eXogPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSB7IHJldHVybiByIC8gMTIuOTI7IH1cbiAgICAgICAgcmV0dXJuIHBvdyRhKChyICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgfTtcblxuICAgIHZhciB4eXpfbGFiID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTJDMudDMpIHsgcmV0dXJuIHBvdyRhKHQsIDEgLyAzKTsgfVxuICAgICAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMkMy50MiArIExBQl9DT05TVEFOVFMkMy50MDtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJ4eXogPSBmdW5jdGlvbiAocixnLGIpIHtcbiAgICAgICAgciA9IHJnYl94eXoocik7XG4gICAgICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgICAgICBiID0gcmdiX3h5eihiKTtcbiAgICAgICAgdmFyIHggPSB4eXpfbGFiKCgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlhuKTtcbiAgICAgICAgdmFyIHkgPSB4eXpfbGFiKCgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1MCAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlluKTtcbiAgICAgICAgdmFyIHogPSB4eXpfbGFiKCgwLjAxOTMzMzkgKiByICsgMC4xMTkxOTIwICogZyArIDAuOTUwMzA0MSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlpuKTtcbiAgICAgICAgcmV0dXJuIFt4LHksel07XG4gICAgfTtcblxuICAgIHZhciByZ2IybGFiXzEgPSByZ2IybGFiJDI7XG5cbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQyID0gbGFiQ29uc3RhbnRzO1xuICAgIHZhciB1bnBhY2skZyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDkgPSBNYXRoLnBvdztcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBsYWIycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRnKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHgseSx6LCByLGcsYl87XG5cbiAgICAgICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgICAgICB4ID0gaXNOYU4oYSkgPyB5IDogeSArIGEgLyA1MDA7XG4gICAgICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgICAgICB5ID0gTEFCX0NPTlNUQU5UUyQyLlluICogbGFiX3h5eih5KTtcbiAgICAgICAgeCA9IExBQl9DT05TVEFOVFMkMi5YbiAqIGxhYl94eXooeCk7XG4gICAgICAgIHogPSBMQUJfQ09OU1RBTlRTJDIuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgICAgIHIgPSB4eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeik7ICAvLyBENjUgLT4gc1JHQlxuICAgICAgICBnID0geHl6X3JnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KTtcbiAgICAgICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICAgICAgcmV0dXJuIFtyLGcsYl8sYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgeHl6X3JnYiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHJldHVybiAyNTUgKiAociA8PSAwLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBwb3ckOShyLCAxIC8gMi40KSAtIDAuMDU1KVxuICAgIH07XG5cbiAgICB2YXIgbGFiX3h5eiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ID4gTEFCX0NPTlNUQU5UUyQyLnQxID8gdCAqIHQgKiB0IDogTEFCX0NPTlNUQU5UUyQyLnQyICogKHQgLSBMQUJfQ09OU1RBTlRTJDIudDApXG4gICAgfTtcblxuICAgIHZhciBsYWIycmdiXzEgPSBsYWIycmdiJDE7XG5cbiAgICB2YXIgdW5wYWNrJGYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRiID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHUgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ3ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGFiJDEgPSByZ2IybGFiXzE7XG5cbiAgICBDb2xvciR1LnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJsYWIkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYi5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHUsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydsYWInXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDcuZm9ybWF0LmxhYiA9IGxhYjJyZ2JfMTtcblxuICAgIGlucHV0JDcuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skZihhcmdzLCAnbGFiJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsYWInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIFJBRDJERUcgPSB1dGlscy5SQUQyREVHO1xuICAgIHZhciBzcXJ0JDMgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGF0YW4yJDIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciByb3VuZCQyID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBsYWIybGNoJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRlKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGMgPSBzcXJ0JDMoYSAqIGEgKyBiICogYik7XG4gICAgICAgIHZhciBoID0gKGF0YW4yJDIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcbiAgICAgICAgaWYgKHJvdW5kJDIoYyoxMDAwMCkgPT09IDApIHsgaCA9IE51bWJlci5OYU47IH1cbiAgICAgICAgcmV0dXJuIFtsLCBjLCBoXTtcbiAgICB9O1xuXG4gICAgdmFyIGxhYjJsY2hfMSA9IGxhYjJsY2gkMjtcblxuICAgIHZhciB1bnBhY2skZCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcmdiMmxhYiA9IHJnYjJsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCQxID0gbGFiMmxjaF8xO1xuXG4gICAgdmFyIHJnYjJsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGQoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2IybGFiKHIsZyxiKTtcbiAgICAgICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBsYWIybGNoJDEobCxhLGJfKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJsY2hfMSA9IHJnYjJsY2gkMTtcblxuICAgIHZhciB1bnBhY2skYyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgREVHMlJBRCA9IHV0aWxzLkRFRzJSQUQ7XG4gICAgdmFyIHNpbiQzID0gTWF0aC5zaW47XG4gICAgdmFyIGNvcyQzID0gTWF0aC5jb3M7XG5cbiAgICB2YXIgbGNoMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIENvbnZlcnQgZnJvbSBhIHF1YWxpdGF0aXZlIHBhcmFtZXRlciBoIGFuZCBhIHF1YW50aXRhdGl2ZSBwYXJhbWV0ZXIgbCB0byBhIDI0LWJpdCBwaXhlbC5cbiAgICAgICAgVGhlc2UgZm9ybXVsYXMgd2VyZSBpbnZlbnRlZCBieSBEYXZpZCBEYWxyeW1wbGUgdG8gb2J0YWluIG1heGltdW0gY29udHJhc3Qgd2l0aG91dCBnb2luZ1xuICAgICAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICAgICAgQSBzYXR1cmF0aW9uIG11bHRpcGxpZXIgd2FzIGFkZGVkIGJ5IEdyZWdvciBBaXNjaFxuICAgICAgICAqL1xuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGMoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGMgPSByZWZbMV07XG4gICAgICAgIHZhciBoID0gcmVmWzJdO1xuICAgICAgICBpZiAoaXNOYU4oaCkpIHsgaCA9IDA7IH1cbiAgICAgICAgaCA9IGggKiBERUcyUkFEO1xuICAgICAgICByZXR1cm4gW2wsIGNvcyQzKGgpICogYywgc2luJDMoaCkgKiBjXVxuICAgIH07XG5cbiAgICB2YXIgbGNoMmxhYl8xID0gbGNoMmxhYiQyO1xuXG4gICAgdmFyIHVucGFjayRiID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiJDEgPSBsY2gybGFiXzE7XG4gICAgdmFyIGxhYjJyZ2IgPSBsYWIycmdiXzE7XG5cbiAgICB2YXIgbGNoMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skYihhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByZWYgPSBsY2gybGFiJDEgKGwsYyxoKTtcbiAgICAgICAgdmFyIEwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGxhYjJyZ2IgKEwsYSxiXyk7XG4gICAgICAgIHZhciByID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgbGNoMnJnYl8xID0gbGNoMnJnYiQxO1xuXG4gICAgdmFyIHVucGFjayRhID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gycmdiID0gbGNoMnJnYl8xO1xuXG4gICAgdmFyIGhjbDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIGhjbCA9IHVucGFjayRhKGFyZ3MsICdoY2wnKS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiBsY2gycmdiLmFwcGx5KHZvaWQgMCwgaGNsKTtcbiAgICB9O1xuXG4gICAgdmFyIGhjbDJyZ2JfMSA9IGhjbDJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJDkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRhID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHQgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ2ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGNoID0gcmdiMmxjaF8xO1xuXG4gICAgQ29sb3IkdC5wcm90b3R5cGUubGNoID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYik7IH07XG4gICAgQ29sb3IkdC5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpOyB9O1xuXG4gICAgY2hyb21hJGEubGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbGNoJ10pICkpO1xuICAgIH07XG4gICAgY2hyb21hJGEuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ2LmZvcm1hdC5sY2ggPSBsY2gycmdiXzE7XG4gICAgaW5wdXQkNi5mb3JtYXQuaGNsID0gaGNsMnJnYl8xO1xuXG4gICAgWydsY2gnLCdoY2wnXS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldHVybiBpbnB1dCQ2LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDkoYXJncywgbSk7XG4gICAgICAgICAgICBpZiAodHlwZSRkKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTsgfSk7XG5cbiAgICAvKipcbiAgICBcdFgxMSBjb2xvciBuYW1lc1xuXG4gICAgXHRodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAgICAqL1xuXG4gICAgdmFyIHczY3gxMSQxID0ge1xuICAgICAgICBhbGljZWJsdWU6ICcjZjBmOGZmJyxcbiAgICAgICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgICAgIGFxdWE6ICcjMDBmZmZmJyxcbiAgICAgICAgYXF1YW1hcmluZTogJyM3ZmZmZDQnLFxuICAgICAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgICAgICBiZWlnZTogJyNmNWY1ZGMnLFxuICAgICAgICBiaXNxdWU6ICcjZmZlNGM0JyxcbiAgICAgICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICAgICAgYmxhbmNoZWRhbG1vbmQ6ICcjZmZlYmNkJyxcbiAgICAgICAgYmx1ZTogJyMwMDAwZmYnLFxuICAgICAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgICAgIGJyb3duOiAnI2E1MmEyYScsXG4gICAgICAgIGJ1cmx5d29vZDogJyNkZWI4ODcnLFxuICAgICAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICAgICAgY2hhcnRyZXVzZTogJyM3ZmZmMDAnLFxuICAgICAgICBjaG9jb2xhdGU6ICcjZDI2OTFlJyxcbiAgICAgICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICAgICAgY29ybmZsb3dlcjogJyM2NDk1ZWQnLFxuICAgICAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgICAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgICAgICBjcmltc29uOiAnI2RjMTQzYycsXG4gICAgICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICAgICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcjMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgICAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcjMDA2NDAwJyxcbiAgICAgICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgICAgIGRhcmttYWdlbnRhOiAnIzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICAgICAgZGFya29yY2hpZDogJyM5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICAgICAgZGFya3NlYWdyZWVuOiAnIzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrc2xhdGVncmV5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICAgICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJyNmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgICAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgICAgIGRpbWdyZXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgICAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICAgICAgZmxvcmFsd2hpdGU6ICcjZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgICAgICBnYWluc2Jvcm86ICcjZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgICAgIGdvbGRlbnJvZDogJyNkYWE1MjAnLFxuICAgICAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgICAgIGdyZWVueWVsbG93OiAnI2FkZmYyZicsXG4gICAgICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICAgICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJyNmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnI2ZmZmZmMCcsXG4gICAgICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICAgICAgbGF2ZW5kZXI6ICcjZTZlNmZhJyxcbiAgICAgICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgICAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICAgICAgbGVtb25jaGlmZm9uOiAnI2ZmZmFjZCcsXG4gICAgICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgICAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgICAgIGxpZ2h0Y3lhbjogJyNlMGZmZmYnLFxuICAgICAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdyYXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgICAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRwaW5rOiAnI2ZmYjZjMScsXG4gICAgICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICAgICAgbGlnaHRza3libHVlOiAnIzg3Y2VmYScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c3RlZWxibHVlOiAnI2IwYzRkZScsXG4gICAgICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICAgICAgbGltZWdyZWVuOiAnIzMyY2QzMicsXG4gICAgICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICAgICAgbWFyb29uOiAnIzgwMDAwMCcsXG4gICAgICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICAgICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnIzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICAgICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJyM5MzcwZGInLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgICAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcjMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcjMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJyNmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgICAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICcjZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICAgICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJyNmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICAgICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICcjZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJyNkYjcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnI2NkODUzZicsXG4gICAgICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICAgICAgcGx1bTogJyNkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnI2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgICAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgICAgIHB1cnBsZTM6ICcjYTAyMGYwJyxcbiAgICAgICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgICAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICAgICAgcm9zeWJyb3duOiAnI2JjOGY4ZicsXG4gICAgICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgICAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgICAgICBzYWxtb246ICcjZmE4MDcyJyxcbiAgICAgICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgICAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgICAgICBzZWFzaGVsbDogJyNmZmY1ZWUnLFxuICAgICAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICAgICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgICAgIHNreWJsdWU6ICcjODdjZWViJyxcbiAgICAgICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgICAgICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgICAgICAgc25vdzogJyNmZmZhZmEnLFxuICAgICAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgICAgICBzdGVlbGJsdWU6ICcjNDY4MmI0JyxcbiAgICAgICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICAgICAgdGhpc3RsZTogJyNkOGJmZDgnLFxuICAgICAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICAgICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgICAgIHZpb2xldDogJyNlZTgyZWUnLFxuICAgICAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgICAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgICAgICB3aGl0ZXNtb2tlOiAnI2Y1ZjVmNScsXG4gICAgICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgICAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gICAgfTtcblxuICAgIHZhciB3M2N4MTFfMSA9IHczY3gxMSQxO1xuXG4gICAgdmFyIENvbG9yJHMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ1ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRjID0gdXRpbHMudHlwZTtcblxuICAgIHZhciB3M2N4MTEgPSB3M2N4MTFfMTtcbiAgICB2YXIgaGV4MnJnYiA9IGhleDJyZ2JfMTtcbiAgICB2YXIgcmdiMmhleCA9IHJnYjJoZXhfMTtcblxuICAgIENvbG9yJHMucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXModzNjeDExKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBuID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKHczY3gxMVtuXSA9PT0gaGV4KSB7IHJldHVybiBuLnRvTG93ZXJDYXNlKCk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGV4O1xuICAgIH07XG5cbiAgICBpbnB1dCQ1LmZvcm1hdC5uYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh3M2N4MTFbbmFtZV0pIHsgcmV0dXJuIGhleDJyZ2IodzNjeDExW25hbWVdKTsgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29sb3IgbmFtZTogJytuYW1lKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRjKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJDggPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgcmdiMm51bSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skOChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHJldHVybiAociA8PCAxNikgKyAoZyA8PCA4KSArIGI7XG4gICAgfTtcblxuICAgIHZhciByZ2IybnVtXzEgPSByZ2IybnVtJDE7XG5cbiAgICB2YXIgdHlwZSRiID0gdXRpbHMudHlwZTtcblxuICAgIHZhciBudW0ycmdiID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAodHlwZSRiKG51bSkgPT0gXCJudW1iZXJcIiAmJiBudW0gPj0gMCAmJiBudW0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgIHZhciByID0gbnVtID4+IDE2O1xuICAgICAgICAgICAgdmFyIGcgPSAobnVtID4+IDgpICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gbnVtICYgMHhGRjtcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBudW0gY29sb3I6IFwiK251bSk7XG4gICAgfTtcblxuICAgIHZhciBudW0ycmdiXzEgPSBudW0ycmdiO1xuXG4gICAgdmFyIGNocm9tYSQ5ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHIgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ0ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRhID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IybnVtID0gcmdiMm51bV8xO1xuXG4gICAgQ29sb3Ikci5wcm90b3R5cGUubnVtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IybnVtKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ5Lm51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkciwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ251bSddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNC5mb3JtYXQubnVtID0gbnVtMnJnYl8xO1xuXG4gICAgaW5wdXQkNC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGUkYShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiYgYXJnc1swXSA+PSAwICYmIGFyZ3NbMF0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBjaHJvbWEkOCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRxID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMyA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayQ3ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDkgPSB1dGlscy50eXBlO1xuICAgIHZhciByb3VuZCQxID0gTWF0aC5yb3VuZDtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uKHJuZCkge1xuICAgICAgICBpZiAoIHJuZCA9PT0gdm9pZCAwICkgcm5kPXRydWU7XG5cbiAgICAgICAgaWYgKHJuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDMpOyB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwzKS5tYXAocm91bmQkMSk7XG4gICAgfTtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbihybmQpIHtcbiAgICAgICAgaWYgKCBybmQgPT09IHZvaWQgMCApIHJuZD10cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCw0KS5tYXAoZnVuY3Rpb24gKHYsaSkge1xuICAgICAgICAgICAgcmV0dXJuIGk8MyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kJDEodikpIDogdjtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNocm9tYSQ4LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkcSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ3JnYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5mb3JtYXQucmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2JhID0gdW5wYWNrJDcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgaWYgKHJnYmFbM10gPT09IHVuZGVmaW5lZCkgeyByZ2JhWzNdID0gMTsgfVxuICAgICAgICByZXR1cm4gcmdiYTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQ3KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ5KGFyZ3MpID09PSAnYXJyYXknICYmIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoID09PSA0ICYmIHR5cGUkOShhcmdzWzNdKSA9PSAnbnVtYmVyJyAmJiBhcmdzWzNdID49IDAgJiYgYXJnc1szXSA8PSAxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqL1xuXG4gICAgdmFyIGxvZyQxID0gTWF0aC5sb2c7XG5cbiAgICB2YXIgdGVtcGVyYXR1cmUycmdiJDEgPSBmdW5jdGlvbiAoa2VsdmluKSB7XG4gICAgICAgIHZhciB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgICAgIHIgPSAyNTU7XG4gICAgICAgICAgICBnID0gdGVtcCA8IDYgPyAwIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtIDAuNDQ1OTY5NTA0Njk1NzkxMzMgKiAoZyA9IHRlbXAtMikgKyAxMDQuNDkyMTYxOTkzOTM4ODggKiBsb2ckMShnKTtcbiAgICAgICAgICAgIGIgPSB0ZW1wIDwgMjAgPyAwIDogLTI1NC43NjkzNTE4NDEyMDkwMiArIDAuODI3NDA5NjA2NDAwNzM5NSAqIChiID0gdGVtcC0xMCkgKyAxMTUuNjc5OTQ0MDEwNjYxNDcgKiBsb2ckMShiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIgPSAzNTEuOTc2OTA1NjY4MDU2OTMgKyAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcC01NSkgLSA0MC4yNTM2NjMwOTMzMjEyNyAqIGxvZyQxKHIpO1xuICAgICAgICAgICAgZyA9IDMyNS40NDk0MTI1NzExOTc0ICsgMC4wNzk0MzQ1NjUzNjY2MjM0MiAqIChnID0gdGVtcC01MCkgLSAyOC4wODUyOTYzNTA3OTU3ICogbG9nJDEoZyk7XG4gICAgICAgICAgICBiID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgfTtcblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2JfMSA9IHRlbXBlcmF0dXJlMnJnYiQxO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqKi9cblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2IgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcbiAgICB2YXIgdW5wYWNrJDYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiID0gdW5wYWNrJDYoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJnYlswXSwgYiA9IHJnYlsyXTtcbiAgICAgICAgdmFyIG1pblRlbXAgPSAxMDAwO1xuICAgICAgICB2YXIgbWF4VGVtcCA9IDQwMDAwO1xuICAgICAgICB2YXIgZXBzID0gMC40O1xuICAgICAgICB2YXIgdGVtcDtcbiAgICAgICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICAgICAgICB0ZW1wID0gKG1heFRlbXAgKyBtaW5UZW1wKSAqIDAuNTtcbiAgICAgICAgICAgIHZhciByZ2IkMSA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgICAgIGlmICgocmdiJDFbMl0gLyByZ2IkMVswXSkgPj0gKGIgLyByKSkge1xuICAgICAgICAgICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm91bmQodGVtcCk7XG4gICAgfTtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmVfMSA9IHJnYjJ0ZW1wZXJhdHVyZSQxO1xuXG4gICAgdmFyIGNocm9tYSQ3ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHAgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQyID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUgPSByZ2IydGVtcGVyYXR1cmVfMTtcblxuICAgIENvbG9yJHAucHJvdG90eXBlLnRlbXAgPVxuICAgIENvbG9yJHAucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IkcC5wcm90b3R5cGUudGVtcGVyYXR1cmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNy50ZW1wID1cbiAgICBjaHJvbWEkNy5rZWx2aW4gPVxuICAgIGNocm9tYSQ3LnRlbXBlcmF0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRwLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsndGVtcCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMi5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQkMi5mb3JtYXQua2VsdmluID1cbiAgICBpbnB1dCQyLmZvcm1hdC50ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlMnJnYl8xO1xuXG4gICAgdmFyIHVucGFjayQ1ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBjYnJ0ID0gTWF0aC5jYnJ0O1xuICAgIHZhciBwb3ckOCA9IE1hdGgucG93O1xuICAgIHZhciBzaWduJDEgPSBNYXRoLnNpZ247XG5cbiAgICB2YXIgcmdiMm9rbGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLy8gT0tMYWIgY29sb3Igc3BhY2UgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbVxuICAgICAgICAvLyBodHRwczovL2JvdHRvc3Nvbi5naXRodWIuaW8vcG9zdHMvb2tsYWIvXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skNShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IFtyZ2IybHJnYihyIC8gMjU1KSwgcmdiMmxyZ2IoZyAvIDI1NSksIHJnYjJscmdiKGIgLyAyNTUpXTtcbiAgICAgICAgdmFyIGxyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBsZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgbGIgPSByZWYkMVsyXTtcbiAgICAgICAgdmFyIGwgPSBjYnJ0KDAuNDEyMjIxNDcwOCAqIGxyICsgMC41MzYzMzI1MzYzICogbGcgKyAwLjA1MTQ0NTk5MjkgKiBsYik7XG4gICAgICAgIHZhciBtID0gY2JydCgwLjIxMTkwMzQ5ODIgKiBsciArIDAuNjgwNjk5NTQ1MSAqIGxnICsgMC4xMDczOTY5NTY2ICogbGIpO1xuICAgICAgICB2YXIgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMC4yMTA0NTQyNTUzICogbCArIDAuNzkzNjE3Nzg1ICogbSAtIDAuMDA0MDcyMDQ2OCAqIHMsXG4gICAgICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgICAgIDAuMDI1OTA0MDM3MSAqIGwgKyAwLjc4Mjc3MTc2NjIgKiBtIC0gMC44MDg2NzU3NjYgKiBzXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsYWJfMSA9IHJnYjJva2xhYiQyO1xuXG4gICAgZnVuY3Rpb24gcmdiMmxyZ2IoYykge1xuICAgICAgICB2YXIgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgICAgIGlmIChhYnMgPCAwLjA0MDQ1KSB7XG4gICAgICAgICAgICByZXR1cm4gYyAvIDEyLjkyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2lnbiQxKGMpIHx8IDEpICogcG93JDgoKGFicyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH1cblxuICAgIHZhciB1bnBhY2skNCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDcgPSBNYXRoLnBvdztcbiAgICB2YXIgc2lnbiA9IE1hdGguc2lnbjtcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBva2xhYjJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJDQoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgTCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBhID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuXG4gICAgICAgIHZhciBsID0gcG93JDcoTCArIDAuMzk2MzM3Nzc3NCAqIGEgKyAwLjIxNTgwMzc1NzMgKiBiLCAzKTtcbiAgICAgICAgdmFyIG0gPSBwb3ckNyhMIC0gMC4xMDU1NjEzNDU4ICogYSAtIDAuMDYzODU0MTcyOCAqIGIsIDMpO1xuICAgICAgICB2YXIgcyA9IHBvdyQ3KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoKzQuMDc2NzQxNjYyMSAqIGwgLSAzLjMwNzcxMTU5MTMgKiBtICsgMC4yMzA5Njk5MjkyICogcyksXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKC0wLjAwNDE5NjA4NjMgKiBsIC0gMC43MDM0MTg2MTQ3ICogbSArIDEuNzA3NjE0NzAxICogcyksXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgb2tsYWIycmdiXzEgPSBva2xhYjJyZ2IkMTtcblxuICAgIGZ1bmN0aW9uIGxyZ2IycmdiKGMpIHtcbiAgICAgICAgdmFyIGFicyA9IE1hdGguYWJzKGMpO1xuICAgICAgICBpZiAoYWJzID4gMC4wMDMxMzA4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3ckNyhhYnMsIDEgLyAyLjQpIC0gMC4wNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjICogMTIuOTI7XG4gICAgfVxuXG4gICAgdmFyIHVucGFjayQzID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDggPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkNiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRvID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMm9rbGFiJDEgPSByZ2Iyb2tsYWJfMTtcblxuICAgIENvbG9yJG8ucHJvdG90eXBlLm9rbGFiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGFiJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDYub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJG8sIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydva2xhYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMS5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2JfMTtcblxuICAgIGlucHV0JDEuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skMyhhcmdzLCAnb2tsYWInKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rbGFiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayQyID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByZ2Iyb2tsYWIgPSByZ2Iyb2tsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCA9IGxhYjJsY2hfMTtcblxuICAgIHZhciByZ2Iyb2tsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJDIoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgICAgIHZhciBsID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBhID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbGFiMmxjaChsLCBhLCBiXyk7XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsY2hfMSA9IHJnYjJva2xjaCQxO1xuXG4gICAgdmFyIHVucGFjayQxID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiID0gbGNoMmxhYl8xO1xuICAgIHZhciBva2xhYjJyZ2IgPSBva2xhYjJyZ2JfMTtcblxuICAgIHZhciBva2xjaDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayQxKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBoID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHJlZiA9IGxjaDJsYWIobCwgYywgaCk7XG4gICAgICAgIHZhciBMID0gcmVmWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgICAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIG9rbGNoMnJnYl8xID0gb2tsY2gycmdiO1xuXG4gICAgdmFyIHVucGFjayA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSQ3ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJDUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkbiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2Iyb2tsY2ggPSByZ2Iyb2tsY2hfMTtcblxuICAgIENvbG9yJG4ucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGNoKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ1Lm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRuLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnb2tsY2gnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYl8xO1xuXG4gICAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ3KGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdva2xjaCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRtID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ2ID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJG0ucHJvdG90eXBlLmFscGhhID0gZnVuY3Rpb24oYSwgbXV0YXRlKSB7XG4gICAgICAgIGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGU9ZmFsc2U7XG5cbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiB0eXBlJDYoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiWzNdID0gYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkbShbdGhpcy5fcmdiWzBdLCB0aGlzLl9yZ2JbMV0sIHRoaXMuX3JnYlsyXSwgYV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkbCA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRsLnByb3RvdHlwZS5jbGlwcGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2IuX2NsaXBwZWQgfHwgZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRrID0gQ29sb3JfMTtcbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQxID0gbGFiQ29uc3RhbnRzO1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHZhciBtZSA9IHRoaXM7XG4gICAgXHR2YXIgbGFiID0gbWUubGFiKCk7XG4gICAgXHRsYWJbMF0gLT0gTEFCX0NPTlNUQU5UUyQxLktuICogYW1vdW50O1xuICAgIFx0cmV0dXJuIG5ldyBDb2xvciRrKGxhYiwgJ2xhYicpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xuICAgIH07XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHRyZXR1cm4gdGhpcy5kYXJrZW4oLWFtb3VudCk7XG4gICAgfTtcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmRhcmtlciA9IENvbG9yJGsucHJvdG90eXBlLmRhcmtlbjtcbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlciA9IENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVuO1xuXG4gICAgdmFyIENvbG9yJGogPSBDb2xvcl8xO1xuXG4gICAgQ29sb3Ikai5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG1jKSB7XG4gICAgICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbW9kZSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHsgcmV0dXJuIHNyY1tpXTsgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gY2hhbm5lbCBcIiArIGNoYW5uZWwgKyBcIiBpbiBtb2RlIFwiICsgbW9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkaSA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkNSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIHBvdyQ2ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgRVBTID0gMWUtNztcbiAgICB2YXIgTUFYX0lURVIgPSAyMDtcblxuICAgIENvbG9yJGkucHJvdG90eXBlLmx1bWluYW5jZSA9IGZ1bmN0aW9uKGx1bSkge1xuICAgICAgICBpZiAobHVtICE9PSB1bmRlZmluZWQgJiYgdHlwZSQ1KGx1bSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobHVtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkoWzAsMCwwLHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTUsdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29tcHV0ZSBuZXcgY29sb3IgdXNpbmcuLi5cbiAgICAgICAgICAgIHZhciBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgIHZhciBtb2RlID0gJ3JnYic7XG4gICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSBNQVhfSVRFUjtcblxuICAgICAgICAgICAgdmFyIHRlc3QgPSBmdW5jdGlvbiAobG93LCBoaWdoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgICAgIHZhciBsbSA9IG1pZC5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciByZ2IgPSAoY3VyX2x1bSA+IGx1bSA/IHRlc3QobmV3IENvbG9yJGkoWzAsMCwwXSksIHRoaXMpIDogdGVzdCh0aGlzLCBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTVdKSkpLnJnYigpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKHJnYi5jb25jYXQoIFt0aGlzLl9yZ2JbM11dKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UuYXBwbHkodm9pZCAwLCAodGhpcy5fcmdiKS5zbGljZSgwLDMpKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgcmdiMmx1bWluYW5jZSA9IGZ1bmN0aW9uIChyLGcsYikge1xuICAgICAgICAvLyByZWxhdGl2ZSBsdW1pbmFuY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICAgICAgciA9IGx1bWluYW5jZV94KHIpO1xuICAgICAgICBnID0gbHVtaW5hbmNlX3goZyk7XG4gICAgICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICAgICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbiAgICB9O1xuXG4gICAgdmFyIGx1bWluYW5jZV94ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCAvPSAyNTU7XG4gICAgICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4LzEyLjkyIDogcG93JDYoKHgrMC4wNTUpLzEuMDU1LCAyLjQpO1xuICAgIH07XG5cbiAgICB2YXIgaW50ZXJwb2xhdG9yJDEgPSB7fTtcblxuICAgIHZhciBDb2xvciRoID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ0ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yJDE7XG5cbiAgICB2YXIgbWl4JDEgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICBpZiAoIGYgPT09IHZvaWQgMCApIGY9MC41O1xuICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMztcbiAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMyBdO1xuXG4gICAgICAgIHZhciBtb2RlID0gcmVzdFswXSB8fCAnbHJnYic7XG4gICAgICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdICYmICFyZXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJpbnRlcnBvbGF0aW9uIG1vZGUgXCIgKyBtb2RlICsgXCIgaXMgbm90IGRlZmluZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlJDQoY29sMSkgIT09ICdvYmplY3QnKSB7IGNvbDEgPSBuZXcgQ29sb3IkaChjb2wxKTsgfVxuICAgICAgICBpZiAodHlwZSQ0KGNvbDIpICE9PSAnb2JqZWN0JykgeyBjb2wyID0gbmV3IENvbG9yJGgoY29sMik7IH1cbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRvclttb2RlXShjb2wxLCBjb2wyLCBmKVxuICAgICAgICAgICAgLmFscGhhKGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRnID0gQ29sb3JfMTtcbiAgICB2YXIgbWl4ID0gbWl4JDE7XG5cbiAgICBDb2xvciRnLnByb3RvdHlwZS5taXggPVxuICAgIENvbG9yJGcucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24oY29sMiwgZikge1xuICAgIFx0aWYgKCBmID09PSB2b2lkIDAgKSBmPTAuNTtcbiAgICBcdHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgIFx0d2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gICAgXHRyZXR1cm4gbWl4LmFwcGx5KHZvaWQgMCwgWyB0aGlzLCBjb2wyLCBmIF0uY29uY2F0KCByZXN0ICkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZiA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRmLnByb3RvdHlwZS5wcmVtdWx0aXBseSA9IGZ1bmN0aW9uKG11dGF0ZSkge1xuICAgIFx0aWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZT1mYWxzZTtcblxuICAgIFx0dmFyIHJnYiA9IHRoaXMuX3JnYjtcbiAgICBcdHZhciBhID0gcmdiWzNdO1xuICAgIFx0aWYgKG11dGF0ZSkge1xuICAgIFx0XHR0aGlzLl9yZ2IgPSBbcmdiWzBdKmEsIHJnYlsxXSphLCByZ2JbMl0qYSwgYV07XG4gICAgXHRcdHJldHVybiB0aGlzO1xuICAgIFx0fSBlbHNlIHtcbiAgICBcdFx0cmV0dXJuIG5ldyBDb2xvciRmKFtyZ2JbMF0qYSwgcmdiWzFdKmEsIHJnYlsyXSphLCBhXSwgJ3JnYicpO1xuICAgIFx0fVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZSA9IENvbG9yXzE7XG4gICAgdmFyIExBQl9DT05TVEFOVFMgPSBsYWJDb25zdGFudHM7XG5cbiAgICBDb2xvciRlLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHR2YXIgbWUgPSB0aGlzO1xuICAgIFx0dmFyIGxjaCA9IG1lLmxjaCgpO1xuICAgIFx0bGNoWzFdICs9IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgXHRpZiAobGNoWzFdIDwgMCkgeyBsY2hbMV0gPSAwOyB9XG4gICAgXHRyZXR1cm4gbmV3IENvbG9yJGUobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIENvbG9yJGUucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0cmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRkID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQzID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJGQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtYywgdmFsdWUsIG11dGF0ZSkge1xuICAgICAgICBpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgICAgICB2YXIgY2hhbm5lbCA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIHZhciBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDModmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAqPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldIC89ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQzKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBDb2xvciRkKHNyYywgbW9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZ2IgPSBvdXQuX3JnYjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRjID0gQ29sb3JfMTtcblxuICAgIHZhciByZ2IgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEuX3JnYjtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkYyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0teHl6MFswXSksXG4gICAgICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdLXh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXS14eXowWzJdKSxcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgIClcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEucmdiID0gcmdiO1xuXG4gICAgdmFyIENvbG9yJGIgPSBDb2xvcl8xO1xuICAgIHZhciBzcXJ0JDIgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIHBvdyQ1ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgbHJnYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciByZWYgPSBjb2wxLl9yZ2I7XG4gICAgICAgIHZhciB4MSA9IHJlZlswXTtcbiAgICAgICAgdmFyIHkxID0gcmVmWzFdO1xuICAgICAgICB2YXIgejEgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGNvbDIuX3JnYjtcbiAgICAgICAgdmFyIHgyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciB5MiA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgejIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRiKFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHgxLDIpICogKDEtZikgKyBwb3ckNSh4MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHkxLDIpICogKDEtZikgKyBwb3ckNSh5MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHoxLDIpICogKDEtZikgKyBwb3ckNSh6MiwyKSAqIGYpLFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5scmdiID0gbHJnYjtcblxuICAgIHZhciBDb2xvciRhID0gQ29sb3JfMTtcblxuICAgIHZhciBsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEubGFiKCk7XG4gICAgICAgIHZhciB4eXoxID0gY29sMi5sYWIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRhKFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXS14eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0teHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdLXh5ejBbMl0pLFxuICAgICAgICAgICAgJ2xhYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5sYWIgPSBsYWI7XG5cbiAgICB2YXIgQ29sb3IkOSA9IENvbG9yXzE7XG5cbiAgICB2YXIgX2hzeCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmLCBtKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxO1xuXG4gICAgICAgIHZhciB4eXowLCB4eXoxO1xuICAgICAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzdigpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHN2KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjZygpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNnKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgICAgIG0gPSAnaGNsJztcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ29rbGNoJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBodWUwLCBodWUxLCBzYXQwLCBzYXQxLCBsYnYwLCBsYnYxO1xuICAgICAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgICAgICAoYXNzaWduID0geHl6MCwgaHVlMCA9IGFzc2lnblswXSwgc2F0MCA9IGFzc2lnblsxXSwgbGJ2MCA9IGFzc2lnblsyXSk7XG4gICAgICAgICAgICAoYXNzaWduJDEgPSB4eXoxLCBodWUxID0gYXNzaWduJDFbMF0sIHNhdDEgPSBhc3NpZ24kMVsxXSwgbGJ2MSA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgICAgICBpZiAoIWlzTmFOKGh1ZTApICYmICFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgICAgIGlmIChodWUxID4gaHVlMCAmJiBodWUxIC0gaHVlMCA+IDE4MCkge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSAtIChodWUwICsgMzYwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgKyAzNjAgLSBodWUwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHVlID0gaHVlMCArIGYgKiBkaDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgICAgIGh1ZSA9IGh1ZTA7XG4gICAgICAgICAgICBpZiAoKGxidjEgPT0gMSB8fCBsYnYxID09IDApICYmIG0gIT0gJ2hzdicpIHsgc2F0ID0gc2F0MDsgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgaHVlID0gaHVlMTtcbiAgICAgICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2JykgeyBzYXQgPSBzYXQxOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNhdCA9PT0gdW5kZWZpbmVkKSB7IHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTsgfVxuICAgICAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgICAgIHJldHVybiBtID09PSAnb2tsY2gnID8gbmV3IENvbG9yJDkoW2xidiwgc2F0LCBodWVdLCBtKSA6IG5ldyBDb2xvciQ5KFtodWUsIHNhdCwgbGJ2XSwgbSk7XG4gICAgfTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkNSA9IF9oc3g7XG5cbiAgICB2YXIgbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkNShjb2wxLCBjb2wyLCBmLCAnbGNoJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxjaCA9IGxjaDtcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2wgPSBsY2g7XG5cbiAgICB2YXIgQ29sb3IkOCA9IENvbG9yXzE7XG5cbiAgICB2YXIgbnVtID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIGMxID0gY29sMS5udW0oKTtcbiAgICAgICAgdmFyIGMyID0gY29sMi5udW0oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ4KGMxICsgZiAqIChjMi1jMSksICdudW0nKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5udW0gPSBudW07XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDQgPSBfaHN4O1xuXG4gICAgdmFyIGhjZyA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDQoY29sMSwgY29sMiwgZiwgJ2hjZycpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2cgPSBoY2c7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDMgPSBfaHN4O1xuXG4gICAgdmFyIGhzaSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDMoY29sMSwgY29sMiwgZiwgJ2hzaScpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2kgPSBoc2k7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDIgPSBfaHN4O1xuXG4gICAgdmFyIGhzbCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDIoY29sMSwgY29sMiwgZiwgJ2hzbCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2wgPSBoc2w7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDEgPSBfaHN4O1xuXG4gICAgdmFyIGhzdiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDEoY29sMSwgY29sMiwgZiwgJ2hzdicpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc3YgPSBoc3Y7XG5cbiAgICB2YXIgQ29sb3IkNyA9IENvbG9yXzE7XG5cbiAgICB2YXIgb2tsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEub2tsYWIoKTtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgICAgICdva2xhYidcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsYWIgPSBva2xhYjtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3ggPSBfaHN4O1xuXG4gICAgdmFyIG9rbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnb2tsY2gnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsY2ggPSBva2xjaDtcblxuICAgIHZhciBDb2xvciQ2ID0gQ29sb3JfMTtcbiAgICB2YXIgY2xpcF9yZ2IkMSA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciBwb3ckNCA9IE1hdGgucG93O1xuICAgIHZhciBzcXJ0JDEgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIFBJJDEgPSBNYXRoLlBJO1xuICAgIHZhciBjb3MkMiA9IE1hdGguY29zO1xuICAgIHZhciBzaW4kMiA9IE1hdGguc2luO1xuICAgIHZhciBhdGFuMiQxID0gTWF0aC5hdGFuMjtcblxuICAgIHZhciBhdmVyYWdlID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgd2VpZ2h0cykge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2xyZ2InO1xuICAgICAgICBpZiAoIHdlaWdodHMgPT09IHZvaWQgMCApIHdlaWdodHM9bnVsbDtcblxuICAgICAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIGlmICghd2VpZ2h0cykgeyB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9KTsgfVxuICAgICAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgICAgICB2YXIgayA9IGwgLyB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhICsgYjsgfSk7XG4gICAgICAgIHdlaWdodHMuZm9yRWFjaChmdW5jdGlvbiAodyxpKSB7IHdlaWdodHNbaV0gKj0gazsgfSk7XG4gICAgICAgIC8vIGNvbnZlcnQgY29sb3JzIHRvIENvbG9yIG9iamVjdHNcbiAgICAgICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gbmV3IENvbG9yJDYoYyk7IH0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgICAgICByZXR1cm4gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgICAgIHZhciB4eXogPSBmaXJzdC5nZXQobW9kZSk7XG4gICAgICAgIHZhciBjbnQgPSBbXTtcbiAgICAgICAgdmFyIGR4ID0gMDtcbiAgICAgICAgdmFyIGR5ID0gMDtcbiAgICAgICAgLy8gaW5pdGlhbCBjb2xvclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8eHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4eXpbaV0gPSAoeHl6W2ldIHx8IDApICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJyAmJiAhaXNOYU4oeHl6W2ldKSkge1xuICAgICAgICAgICAgICAgIHZhciBBID0geHl6W2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICBkeCArPSBjb3MkMihBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICAgICAgZHkgKz0gc2luJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNvbG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChjLGNpKSB7XG4gICAgICAgICAgICB2YXIgeHl6MiA9IGMuZ2V0KG1vZGUpO1xuICAgICAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHh5ejJbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEEgPSB4eXoyW2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICs9IGNvcyQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbiQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHh5eltpXSArPSB4eXoyW2ldICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTx4eXoubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkkMSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgIHZhciBBJDEgPSBhdGFuMiQxKGR5IC8gY250W2kkMV0sIGR4IC8gY250W2kkMV0pIC8gUEkkMSAqIDE4MDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoQSQxIDwgMCkgeyBBJDEgKz0gMzYwOyB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKEEkMSA+PSAzNjApIHsgQSQxIC09IDM2MDsgfVxuICAgICAgICAgICAgICAgIHh5eltpJDFdID0gQSQxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4eXpbaSQxXSA9IHh5eltpJDFdL2NudFtpJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFscGhhIC89IGw7XG4gICAgICAgIHJldHVybiAobmV3IENvbG9yJDYoeHl6LCBtb2RlKSkuYWxwaGEoYWxwaGEgPiAwLjk5OTk5ID8gMSA6IGFscGhhLCB0cnVlKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgX2F2ZXJhZ2VfbHJnYiA9IGZ1bmN0aW9uIChjb2xvcnMsIHdlaWdodHMpIHtcbiAgICAgICAgdmFyIGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICB2YXIgeHl6ID0gWzAsMCwwLDBdO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgICAgICB2YXIgZiA9IHdlaWdodHNbaV0gLyBsO1xuICAgICAgICAgICAgdmFyIHJnYiA9IGNvbC5fcmdiO1xuICAgICAgICAgICAgeHl6WzBdICs9IHBvdyQ0KHJnYlswXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbMV0gKz0gcG93JDQocmdiWzFdLDIpICogZjtcbiAgICAgICAgICAgIHh5elsyXSArPSBwb3ckNChyZ2JbMl0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzNdICs9IHJnYlszXSAqIGY7XG4gICAgICAgIH1cbiAgICAgICAgeHl6WzBdID0gc3FydCQxKHh5elswXSk7XG4gICAgICAgIHh5elsxXSA9IHNxcnQkMSh4eXpbMV0pO1xuICAgICAgICB4eXpbMl0gPSBzcXJ0JDEoeHl6WzJdKTtcbiAgICAgICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkgeyB4eXpbM10gPSAxOyB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNihjbGlwX3JnYiQxKHh5eikpO1xuICAgIH07XG5cbiAgICAvLyBtaW5pbWFsIG11bHRpLXB1cnBvc2UgaW50ZXJmYWNlXG5cbiAgICAvLyBAcmVxdWlyZXMgdXRpbHMgY29sb3IgYW5hbHl6ZVxuXG4gICAgdmFyIGNocm9tYSQ0ID0gY2hyb21hXzE7XG4gICAgdmFyIHR5cGUkMiA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcG93JDMgPSBNYXRoLnBvdztcblxuICAgIHZhciBzY2FsZSQyID0gZnVuY3Rpb24oY29sb3JzKSB7XG5cbiAgICAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgdmFyIF9tb2RlID0gJ3JnYic7XG4gICAgICAgIHZhciBfbmFjb2wgPSBjaHJvbWEkNCgnI2NjYycpO1xuICAgICAgICB2YXIgX3NwcmVhZCA9IDA7XG4gICAgICAgIC8vIGNvbnN0IF9maXhlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgX2RvbWFpbiA9IFswLCAxXTtcbiAgICAgICAgdmFyIF9wb3MgPSBbXTtcbiAgICAgICAgdmFyIF9wYWRkaW5nID0gWzAsMF07XG4gICAgICAgIHZhciBfY2xhc3NlcyA9IGZhbHNlO1xuICAgICAgICB2YXIgX2NvbG9ycyA9IFtdO1xuICAgICAgICB2YXIgX291dCA9IGZhbHNlO1xuICAgICAgICB2YXIgX21pbiA9IDA7XG4gICAgICAgIHZhciBfbWF4ID0gMTtcbiAgICAgICAgdmFyIF9jb3JyZWN0TGlnaHRuZXNzID0gZmFsc2U7XG4gICAgICAgIHZhciBfY29sb3JDYWNoZSA9IHt9O1xuICAgICAgICB2YXIgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9nYW1tYSA9IDE7XG5cbiAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzXG5cbiAgICAgICAgdmFyIHNldENvbG9ycyA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG4gICAgICAgICAgICBpZiAoY29sb3JzICYmIHR5cGUkMihjb2xvcnMpID09PSAnc3RyaW5nJyAmJiBjaHJvbWEkNC5icmV3ZXIgJiZcbiAgICAgICAgICAgICAgICBjaHJvbWEkNC5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gY2hyb21hJDQuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlJDIoY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBbY29sb3JzWzBdLCBjb2xvcnNbMF1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG4gICAgICAgICAgICAgICAgY29sb3JzID0gY29sb3JzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTA7IGM8Y29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYSQ0KGNvbG9yc1tjXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGF1dG8tZmlsbCBjb2xvciBwb3NpdGlvblxuICAgICAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjJDE9MDsgYyQxPGNvbG9ycy5sZW5ndGg7IGMkMSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9wb3MucHVzaChjJDEvKGNvbG9ycy5sZW5ndGgtMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBfY29sb3JzID0gY29sb3JzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBnZXRDbGFzcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuICAgICAgICB2YXIgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuXG4gICAgICAgIC8vIGNvbnN0IGNsYXNzaWZ5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyAgICAgbGV0IHZhbCA9IHZhbHVlO1xuICAgICAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgaSA9IGdldENsYXNzKHZhbHVlKTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbWF4YyA9IF9jbGFzc2VzW24tMV0gKyAoKF9jbGFzc2VzW25dLV9jbGFzc2VzW24tMV0pICogKDEgLSAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiBsYXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgdmFsID0gX21pbiArICgoKChfY2xhc3Nlc1tpXSArICgoX2NsYXNzZXNbaSsxXSAtIF9jbGFzc2VzW2ldKSAqIDAuNSkpIC0gbWluYykgLyAobWF4Yy1taW5jKSkgKiAoX21heCAtIF9taW4pKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiB2YWw7XG4gICAgICAgIC8vIH07XG5cbiAgICAgICAgdmFyIGdldENvbG9yID0gZnVuY3Rpb24odmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHZhciBjb2wsIHQ7XG4gICAgICAgICAgICBpZiAoYnlwYXNzTWFwID09IG51bGwpIHsgYnlwYXNzTWFwID0gZmFsc2U7IH1cbiAgICAgICAgICAgIGlmIChpc05hTih2YWwpIHx8ICh2YWwgPT09IG51bGwpKSB7IHJldHVybiBfbmFjb2w7IH1cbiAgICAgICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBjbGFzc1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGdldENsYXNzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBjIC8gKF9jbGFzc2VzLmxlbmd0aC0yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIG1pbi9tYXhcbiAgICAgICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ID0gdmFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkb21haW4gbWFwXG4gICAgICAgICAgICB0ID0gdE1hcERvbWFpbih0KTtcblxuICAgICAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgICAgICB0ID0gdE1hcExpZ2h0bmVzcyh0KTsgIC8vIGxpZ2h0bmVzcyBjb3JyZWN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfZ2FtbWEgIT09IDEpIHsgdCA9IHBvdyQzKHQsIF9nYW1tYSk7IH1cblxuICAgICAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgKHQgKiAoMSAtIF9wYWRkaW5nWzBdIC0gX3BhZGRpbmdbMV0pKTtcblxuICAgICAgICAgICAgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHQpKTtcblxuICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUgJiYgX2NvbG9yQ2FjaGVba10pIHtcbiAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JDYWNoZVtrXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8X3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgPj0gcCkgJiYgKGkgPT09IChfcG9zLmxlbmd0aC0xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2krMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQtcCkvKF9wb3NbaSsxXS1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBjaHJvbWEkNC5pbnRlcnBvbGF0ZShfY29sb3JzW2ldLCBfY29sb3JzW2krMV0sIHQsIF9tb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQyKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnModCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHsgX2NvbG9yQ2FjaGVba10gPSBjb2w7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfY29sb3JDYWNoZSA9IHt9OyB9O1xuXG4gICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgICAgIC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHZhciBjID0gY2hyb21hJDQoZ2V0Q29sb3IodikpO1xuICAgICAgICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkgeyByZXR1cm4gY1tfb3V0XSgpOyB9IGVsc2UgeyByZXR1cm4gYzsgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIGlmIChjbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKGNsYXNzZXMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gY2xhc3NlcztcbiAgICAgICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoLTFdXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGNocm9tYSQ0LmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IFtkLm1pbiwgZC5tYXhdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjaHJvbWEkNC5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY2xhc3NlcztcbiAgICAgICAgfTtcblxuXG4gICAgICAgIGYuZG9tYWluID0gZnVuY3Rpb24oZG9tYWluKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2RvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgICAgICBfbWF4ID0gZG9tYWluW2RvbWFpbi5sZW5ndGgtMV07XG4gICAgICAgICAgICBfcG9zID0gW107XG4gICAgICAgICAgICB2YXIgayA9IF9jb2xvcnMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKChkb21haW4ubGVuZ3RoID09PSBrKSAmJiAoX21pbiAhPT0gX21heCkpIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb25zXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBBcnJheS5mcm9tKGRvbWFpbik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKChkLV9taW4pIC8gKF9tYXgtX21pbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYz0wOyBjPGs7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICBfcG9zLnB1c2goYy8oay0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgZG9tYWluIG1hcFxuICAgICAgICAgICAgICAgICAgICB2YXIgdE91dCA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQsaSkgeyByZXR1cm4gaS8oZG9tYWluLmxlbmd0aC0xKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0QnJlYWtzID0gZG9tYWluLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbik7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRCcmVha3MuZXZlcnkoZnVuY3Rpb24gKHZhbCwgaSkgeyByZXR1cm4gdE91dFtpXSA9PT0gdmFsOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHsgcmV0dXJuIHQ7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpKzFdKSB7IGkrKzsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2krMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpKzFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLm1vZGUgPSBmdW5jdGlvbihfbSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9tb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucmFuZ2UgPSBmdW5jdGlvbihjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5vdXQgPSBmdW5jdGlvbihfbykge1xuICAgICAgICAgICAgX291dCA9IF9vO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5zcHJlYWQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3ByZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY29ycmVjdExpZ2h0bmVzcyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHsgdiA9IHRydWU7IH1cbiAgICAgICAgICAgIF9jb3JyZWN0TGlnaHRuZXNzID0gdjtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMMCA9IGdldENvbG9yKDAsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTDEgPSBnZXRDb2xvcigxLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9pZGVhbCA9IEwwICsgKChMMSAtIEwwKSAqIHQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDAgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChNYXRoLmFicyhMX2RpZmYpID4gMWUtMikgJiYgKG1heF9pdGVyLS0gPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHsgTF9kaWZmICo9IC0xOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTF9hY3R1YWwgPSBnZXRDb2xvcih0LCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnBhZGRpbmcgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICBpZiAocCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihwKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IFtwLHBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfcGFkZGluZyA9IHA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmNvbG9ycyA9IGZ1bmN0aW9uKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbG9ycyB0aGF0IHdlcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgeyBvdXQgPSAnaGV4JzsgfVxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW2YoMC41KV07XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID4gMSkge1xuICAgICAgICAgICAgICAgIHZhciBkbSA9IF9kb21haW5bMF07XG4gICAgICAgICAgICAgICAgdmFyIGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGYoIGRtICsgKChpLyhudW1Db2xvcnMtMSkpICogZGQpICk7IH0pO1xuXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyByZXR1cm5zIGFsbCBjb2xvcnMgYmFzZWQgb24gdGhlIGRlZmluZWQgY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBzYW1wbGVzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDsgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzYyA/IGkrKyA6IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5wdXNoKChfY2xhc3Nlc1tpLTFdK19jbGFzc2VzW2ldKSowLjUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IF9kb21haW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmKHYpOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNocm9tYSQ0W291dF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjW291dF0oKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2FjaGUgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3VzZUNhY2hlID0gYztcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF91c2VDYWNoZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmdhbW1hID0gZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5ub2RhdGEgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX25hY29sID0gY2hyb21hJDQoZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBbXTtcbiAgICAgIHZhciBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgICB2YXIgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgICAgZm9yICh2YXIgaSA9IGxlZnQ7IGFzY2VuZGluZyA/IGkgPCBlbmQgOiBpID4gZW5kOyBhc2NlbmRpbmcgPyBpKysgOiBpLS0pIHtcbiAgICAgICAgcmFuZ2UucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAvL1xuXG4gICAgLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuICAgIHZhciBDb2xvciQ1ID0gQ29sb3JfMTtcblxuICAgIHZhciBzY2FsZSQxID0gc2NhbGUkMjtcblxuICAgIC8vIG50aCByb3cgb2YgdGhlIHBhc2NhbCB0cmlhbmdsZVxuICAgIHZhciBiaW5vbV9yb3cgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciByb3cgPSBbMSwgMV07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmV3cm93ID0gWzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3cm93W2pdID0gKHJvd1tqXSB8fCAwKSArIHJvd1tqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuXG4gICAgdmFyIGJlemllciA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDI7XG5cbiAgICAgICAgdmFyIEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5ldyBDb2xvciQ1KGMpOyB9KTtcbiAgICAgICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICAoYXNzaWduID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ25bMF0sIGxhYjEgPSBhc3NpZ25bMV0pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGxhYjBbaV0gKyAodCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAvLyBxdWFkcmF0aWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIChhc3NpZ24kMSA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pLCBsYWIwID0gYXNzaWduJDFbMF0sIGxhYjEgPSBhc3NpZ24kMVsxXSwgbGFiMiA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKDEtdCkqKDEtdCkgKiBsYWIwW2ldKSArICgyICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAodCAqIHQgKiBsYWIyW2ldKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIHZhciBsYWIzO1xuICAgICAgICAgICAgKGFzc2lnbiQyID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ24kMlswXSwgbGFiMSA9IGFzc2lnbiQyWzFdLCBsYWIyID0gYXNzaWduJDJbMl0sIGxhYjMgPSBhc3NpZ24kMlszXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gKCgxLXQpKigxLXQpKigxLXQpICogbGFiMFtpXSkgKyAoMyAqICgxLXQpICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAoMyAqICgxLXQpICogdCAqIHQgKiBsYWIyW2ldKSArICh0KnQqdCAqIGxhYjNbaV0pOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID49IDUpIHtcbiAgICAgICAgICAgIC8vIGdlbmVyYWwgY2FzZSAoZGVncmVlIG4gYmV6aWVyKVxuICAgICAgICAgICAgdmFyIGxhYnMsIHJvdywgbjtcbiAgICAgICAgICAgIGxhYnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KTtcbiAgICAgICAgICAgIG4gPSBjb2xvcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHZhciB1ID0gMSAtIHQ7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBsYWJzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBlbCwgaikgeyByZXR1cm4gKHN1bSArIHJvd1tqXSAqIE1hdGgucG93KCB1LCAobiAtIGopICkgKiBNYXRoLnBvdyggdCwgaiApICogZWxbaV0pOyB9LCAwKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuXCIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEk7XG4gICAgfTtcblxuICAgIHZhciBiZXppZXJfMSA9IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAgICAgdmFyIGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICAgICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjYWxlJDEoZik7IH07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAgKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cDovL3d3dy52ZW50dXJlLXdhcmUuY29tL2tldmluL2NvZGluZy9sZXRzLWxlYXJuLW1hdGgtcGhvdG9zaG9wLWJsZW5kLW1vZGVzL1xuICAgICAqL1xuXG4gICAgdmFyIGNocm9tYSQzID0gY2hyb21hXzE7XG5cbiAgICB2YXIgYmxlbmQgPSBmdW5jdGlvbiAoYm90dG9tLCB0b3AsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG4gICAgfTtcblxuICAgIHZhciBibGVuZF9mID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChib3R0b20sdG9wKSB7XG4gICAgICAgICAgICB2YXIgYzAgPSBjaHJvbWEkMyh0b3ApLnJnYigpO1xuICAgICAgICAgICAgdmFyIGMxID0gY2hyb21hJDMoYm90dG9tKS5yZ2IoKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMy5yZ2IoZihjMCwgYzEpKTtcbiAgICAgICAgfTsgfTtcblxuICAgIHZhciBlYWNoID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChjMCwgYzEpIHtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICAgICAgICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICAgICAgICAgIG91dFsyXSA9IGYoYzBbMl0sIGMxWzJdKTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07IH07XG5cbiAgICB2YXIgbm9ybWFsID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGE7IH07XG4gICAgdmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSAqIGIgLyAyNTU7IH07XG4gICAgdmFyIGRhcmtlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgPiBiID8gYiA6IGE7IH07XG4gICAgdmFyIGxpZ2h0ZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhID4gYiA/IGEgOiBiOyB9O1xuICAgIHZhciBzY3JlZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiAyNTUgKiAoMSAtICgxLWEvMjU1KSAqICgxLWIvMjU1KSk7IH07XG4gICAgdmFyIG92ZXJsYXkgPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBiIDwgMTI4ID8gMiAqIGEgKiBiIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1ICkgKiAoIDEgLSBiIC8gMjU1ICkpOyB9O1xuICAgIHZhciBidXJuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gMjU1ICogKDEgLSAoMSAtIGIgLyAyNTUpIC8gKGEvMjU1KSk7IH07XG4gICAgdmFyIGRvZGdlID0gZnVuY3Rpb24gKGEsYikge1xuICAgICAgICBpZiAoYSA9PT0gMjU1KSB7IHJldHVybiAyNTU7IH1cbiAgICAgICAgYSA9IDI1NSAqIChiIC8gMjU1KSAvICgxIC0gYSAvIDI1NSk7XG4gICAgICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYVxuICAgIH07XG5cbiAgICAvLyAjIGFkZCA9IChhLGIpIC0+XG4gICAgLy8gIyAgICAgaWYgKGEgKyBiID4gMjU1KSB0aGVuIDI1NSBlbHNlIGEgKyBiXG5cbiAgICBibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG4gICAgYmxlbmQubXVsdGlwbHkgPSBibGVuZF9mKGVhY2gobXVsdGlwbHkpKTtcbiAgICBibGVuZC5zY3JlZW4gPSBibGVuZF9mKGVhY2goc2NyZWVuKSk7XG4gICAgYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG4gICAgYmxlbmQuZGFya2VuID0gYmxlbmRfZihlYWNoKGRhcmtlbikpO1xuICAgIGJsZW5kLmxpZ2h0ZW4gPSBibGVuZF9mKGVhY2gobGlnaHRlbikpO1xuICAgIGJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG4gICAgYmxlbmQuYnVybiA9IGJsZW5kX2YoZWFjaChidXJuKSk7XG4gICAgLy8gYmxlbmQuYWRkID0gYmxlbmRfZihlYWNoKGFkZCkpO1xuXG4gICAgdmFyIGJsZW5kXzEgPSBibGVuZDtcblxuICAgIC8vIGN1YmVoZWxpeCBpbnRlcnBvbGF0aW9uXG4gICAgLy8gYmFzZWQgb24gRC5BLiBHcmVlbiBcIkEgY29sb3VyIHNjaGVtZSBmb3IgdGhlIGRpc3BsYXkgb2YgYXN0cm9ub21pY2FsIGludGVuc2l0eSBpbWFnZXNcIlxuICAgIC8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5cbiAgICB2YXIgdHlwZSQxID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2xpcF9yZ2IgPSB1dGlscy5jbGlwX3JnYjtcbiAgICB2YXIgVFdPUEkgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgcG93JDIgPSBNYXRoLnBvdztcbiAgICB2YXIgc2luJDEgPSBNYXRoLnNpbjtcbiAgICB2YXIgY29zJDEgPSBNYXRoLmNvcztcbiAgICB2YXIgY2hyb21hJDIgPSBjaHJvbWFfMTtcblxuICAgIHZhciBjdWJlaGVsaXggPSBmdW5jdGlvbihzdGFydCwgcm90YXRpb25zLCBodWUsIGdhbW1hLCBsaWdodG5lc3MpIHtcbiAgICAgICAgaWYgKCBzdGFydCA9PT0gdm9pZCAwICkgc3RhcnQ9MzAwO1xuICAgICAgICBpZiAoIHJvdGF0aW9ucyA9PT0gdm9pZCAwICkgcm90YXRpb25zPS0xLjU7XG4gICAgICAgIGlmICggaHVlID09PSB2b2lkIDAgKSBodWU9MTtcbiAgICAgICAgaWYgKCBnYW1tYSA9PT0gdm9pZCAwICkgZ2FtbWE9MTtcbiAgICAgICAgaWYgKCBsaWdodG5lc3MgPT09IHZvaWQgMCApIGxpZ2h0bmVzcz1bMCwxXTtcblxuICAgICAgICB2YXIgZGggPSAwLCBkbDtcbiAgICAgICAgaWYgKHR5cGUkMShsaWdodG5lc3MpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRsID0gMDtcbiAgICAgICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKGZyYWN0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IFRXT1BJICogKCgoc3RhcnQrMTIwKS8zNjApICsgKHJvdGF0aW9ucyAqIGZyYWN0KSk7XG4gICAgICAgICAgICB2YXIgbCA9IHBvdyQyKGxpZ2h0bmVzc1swXSArIChkbCAqIGZyYWN0KSwgZ2FtbWEpO1xuICAgICAgICAgICAgdmFyIGggPSBkaCAhPT0gMCA/IGh1ZVswXSArIChmcmFjdCAqIGRoKSA6IGh1ZTtcbiAgICAgICAgICAgIHZhciBhbXAgPSAoaCAqIGwgKiAoMS1sKSkgLyAyO1xuICAgICAgICAgICAgdmFyIGNvc19hID0gY29zJDEoYSk7XG4gICAgICAgICAgICB2YXIgc2luX2EgPSBzaW4kMShhKTtcbiAgICAgICAgICAgIHZhciByID0gbCArIChhbXAgKiAoKC0wLjE0ODYxICogY29zX2EpICsgKDEuNzgyNzcqIHNpbl9hKSkpO1xuICAgICAgICAgICAgdmFyIGcgPSBsICsgKGFtcCAqICgoLTAuMjkyMjcgKiBjb3NfYSkgLSAoMC45MDY0OSogc2luX2EpKSk7XG4gICAgICAgICAgICB2YXIgYiA9IGwgKyAoYW1wICogKCsxLjk3Mjk0ICogY29zX2EpKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMihjbGlwX3JnYihbcioyNTUsZyoyNTUsYioyNTUsMV0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnN0YXJ0ID0gZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgaWYgKChzID09IG51bGwpKSB7IHJldHVybiBzdGFydDsgfVxuICAgICAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5yb3RhdGlvbnMgPSBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICBpZiAoKHIgPT0gbnVsbCkpIHsgcmV0dXJuIHJvdGF0aW9uczsgfVxuICAgICAgICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuZ2FtbWEgPSBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICBpZiAoKGcgPT0gbnVsbCkpIHsgcmV0dXJuIGdhbW1hOyB9XG4gICAgICAgICAgICBnYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmh1ZSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gaHVlOyB9XG4gICAgICAgICAgICBodWUgPSBoO1xuICAgICAgICAgICAgaWYgKHR5cGUkMShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG4gICAgICAgICAgICAgICAgaWYgKGRoID09PSAwKSB7IGh1ZSA9IGh1ZVsxXTsgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gbGlnaHRuZXNzOyB9XG4gICAgICAgICAgICBpZiAodHlwZSQxKGgpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgICAgICBkbCA9IGhbMV0gLSBoWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaWdodG5lc3MgPSBbaCxoXTtcbiAgICAgICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hyb21hJDIuc2NhbGUoZik7IH07XG5cbiAgICAgICAgZi5odWUoaHVlKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDQgPSBDb2xvcl8xO1xuICAgIHZhciBkaWdpdHMgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgICB2YXIgZmxvb3IkMSA9IE1hdGguZmxvb3I7XG4gICAgdmFyIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuXG4gICAgdmFyIHJhbmRvbV8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29kZSA9ICcjJztcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yJDEocmFuZG9tKCkgKiAxNikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNChjb2RlLCAnaGV4Jyk7XG4gICAgfTtcblxuICAgIHZhciB0eXBlID0gdHlwZSRwO1xuICAgIHZhciBsb2cgPSBNYXRoLmxvZztcbiAgICB2YXIgcG93JDEgPSBNYXRoLnBvdztcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG5cbiAgICB2YXIgYW5hbHl6ZSA9IGZ1bmN0aW9uIChkYXRhLCBrZXkpIHtcbiAgICAgICAgaWYgKCBrZXkgPT09IHZvaWQgMCApIGtleT1udWxsO1xuXG4gICAgICAgIHZhciByID0ge1xuICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTUFYX1ZBTFVFKi0xLFxuICAgICAgICAgICAgc3VtOiAwLFxuICAgICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICAgIGNvdW50OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlKGRhdGEpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgeyB2YWwgPSB2YWxba2V5XTsgfVxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiAhaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICByLnN1bSArPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IHIubWluKSB7IHIubWluID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA+IHIubWF4KSB7IHIubWF4ID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgICAgIHIubGltaXRzID0gZnVuY3Rpb24gKG1vZGUsIG51bSkgeyByZXR1cm4gbGltaXRzKHIsIG1vZGUsIG51bSk7IH07XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuXG4gICAgdmFyIGxpbWl0cyA9IGZ1bmN0aW9uIChkYXRhLCBtb2RlLCBudW0pIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdlcXVhbCc7XG4gICAgICAgIGlmICggbnVtID09PSB2b2lkIDAgKSBudW09NztcblxuICAgICAgICBpZiAodHlwZShkYXRhKSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gZGF0YS5taW47XG4gICAgICAgIHZhciBtYXggPSBkYXRhLm1heDtcbiAgICAgICAgdmFyIHZhbHVlcyA9IGRhdGEudmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYS1iOyB9KTtcblxuICAgICAgICBpZiAobnVtID09PSAxKSB7IHJldHVybiBbbWluLG1heF07IH1cblxuICAgICAgICB2YXIgbGltaXRzID0gW107XG5cbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdjJykgeyAvLyBjb250aW51b3VzXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnZScpIHsgLy8gZXF1YWwgaW50ZXJ2YWxcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTE7IGk8bnVtOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChtaW4rKChpL251bSkqKG1heC1taW4pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2wnKSB7IC8vIGxvZyBzY2FsZVxuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW5fbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWluKTtcbiAgICAgICAgICAgIHZhciBtYXhfbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWF4KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDE9MTsgaSQxPG51bTsgaSQxKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChwb3ckMSgxMCwgbWluX2xvZyArICgoaSQxL251bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdxJykgeyAvLyBxdWFudGlsZSBzY2FsZVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMj0xOyBpJDI8bnVtOyBpJDIrKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gKCh2YWx1ZXMubGVuZ3RoLTEpICogaSQyKS9udW07XG4gICAgICAgICAgICAgICAgdmFyIHBiID0gZmxvb3IocCk7XG4gICAgICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgICAgICB2YXIgcHIgPSBwIC0gcGI7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKCh2YWx1ZXNbcGJdKigxLXByKSkgKyAodmFsdWVzW3BiKzFdKnByKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2snKSB7IC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gICAgICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgY2x1c3RlcjtcbiAgICAgICAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgICAgIHZhciBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG5iX2l0ZXJzID0gMDtcbiAgICAgICAgICAgIHZhciBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBnZXQgc2VlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNlbnRyb2lkcyA9IFtdO1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0xOyBpJDM8bnVtOyBpJDMrKykge1xuICAgICAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArICgoaSQzL251bSkgKiAobWF4LW1pbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXBlYXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IHN0ZXBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8bnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ0PTA7IGkkNDxuOyBpJDQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaSQ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmVzdCA9ICh2b2lkIDApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDE9MDsgaiQxPG51bTsgaiQxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gYWJzJDEoY2VudHJvaWRzW2okMV0tdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBtaW5kaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGokMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tiZXN0XSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaSQ0XSA9IGJlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2VudHJvaWRzIHN0ZXBcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q2VudHJvaWRzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQyPTA7IGokMjxudW07IGokMisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDJdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ1PTA7IGkkNTxuOyBpJDUrKykge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gKz0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQzPTA7IGokMzxudW07IGokMysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDNdICo9IDEvY2x1c3RlclNpemVzW2okM107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY29udmVyZ2VuY2VcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDQ9MDsgaiQ0PG51bTsgaiQ0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqJDRdICE9PSBjZW50cm9pZHNbaiQ0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2VudHJvaWRzID0gbmV3Q2VudHJvaWRzO1xuICAgICAgICAgICAgICAgIG5iX2l0ZXJzKys7XG5cbiAgICAgICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgICAgIC8vIHRoZSBuZXh0IHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBnYWJyaWVsZmxvci5pdFxuICAgICAgICAgICAgdmFyIGtDbHVzdGVycyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaiQ1PTA7IGokNTxudW07IGokNSsrKSB7XG4gICAgICAgICAgICAgICAga0NsdXN0ZXJzW2okNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkkNj0wOyBpJDY8bjsgaSQ2KyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ2XTtcbiAgICAgICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaSQ2XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdG1wS01lYW5zQnJlYWtzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqJDY9MDsgaiQ2PG51bTsgaiQ2KyspIHtcbiAgICAgICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVswXSk7XG4gICAgICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1ba0NsdXN0ZXJzW2okNl0ubGVuZ3RoLTFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KGZ1bmN0aW9uIChhLGIpeyByZXR1cm4gYS1iOyB9KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDc9MTsgaSQ3IDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSQ3Kz0gMikge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdG1wS01lYW5zQnJlYWtzW2kkN107XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiAobGltaXRzLmluZGV4T2YodikgPT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9O1xuXG4gICAgdmFyIGFuYWx5emVfMSA9IHthbmFseXplOiBhbmFseXplLCBsaW1pdHM6IGxpbWl0c307XG5cbiAgICB2YXIgQ29sb3IkMyA9IENvbG9yXzE7XG5cblxuICAgIHZhciBjb250cmFzdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWZcbiAgICAgICAgYSA9IG5ldyBDb2xvciQzKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDMoYik7XG4gICAgICAgIHZhciBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgICAgIHZhciBsMiA9IGIubHVtaW5hbmNlKCk7XG4gICAgICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciQyID0gQ29sb3JfMTtcbiAgICB2YXIgc3FydCA9IE1hdGguc3FydDtcbiAgICB2YXIgcG93ID0gTWF0aC5wb3c7XG4gICAgdmFyIG1pbiA9IE1hdGgubWluO1xuICAgIHZhciBtYXggPSBNYXRoLm1heDtcbiAgICB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciBhYnMgPSBNYXRoLmFicztcbiAgICB2YXIgY29zID0gTWF0aC5jb3M7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luO1xuICAgIHZhciBleHAgPSBNYXRoLmV4cDtcbiAgICB2YXIgUEkgPSBNYXRoLlBJO1xuXG4gICAgdmFyIGRlbHRhRSA9IGZ1bmN0aW9uKGEsIGIsIEtsLCBLYywgS2gpIHtcbiAgICAgICAgaWYgKCBLbCA9PT0gdm9pZCAwICkgS2w9MTtcbiAgICAgICAgaWYgKCBLYyA9PT0gdm9pZCAwICkgS2M9MTtcbiAgICAgICAgaWYgKCBLaCA9PT0gdm9pZCAwICkgS2g9MTtcblxuICAgICAgICAvLyBEZWx0YSBFIChDSUUgMjAwMClcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0RlbHRhRV9DSUUyMDAwLmh0bWxcbiAgICAgICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgICAgIHJldHVybiAzNjAgKiByYWQgLyAoMiAqIFBJKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbihkZWcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICAgICAgfTtcbiAgICAgICAgYSA9IG5ldyBDb2xvciQyKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDIoYik7XG4gICAgICAgIHZhciByZWYgPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgICAgICB2YXIgTDEgPSByZWZbMF07XG4gICAgICAgIHZhciBhMSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIxID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgICAgICB2YXIgTDIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEyID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiMiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgYXZnTCA9IChMMSArIEwyKS8yO1xuICAgICAgICB2YXIgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMyID0gc3FydChwb3coYTIsIDIpICsgcG93KGIyLCAyKSk7XG4gICAgICAgIHZhciBhdmdDID0gKEMxICsgQzIpLzI7XG4gICAgICAgIHZhciBHID0gMC41KigxLXNxcnQocG93KGF2Z0MsIDcpLyhwb3coYXZnQywgNykgKyBwb3coMjUsIDcpKSkpO1xuICAgICAgICB2YXIgYTFwID0gYTEqKDErRyk7XG4gICAgICAgIHZhciBhMnAgPSBhMiooMStHKTtcbiAgICAgICAgdmFyIEMxcCA9IHNxcnQocG93KGExcCwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMycCA9IHNxcnQocG93KGEycCwgMikgKyBwb3coYjIsIDIpKTtcbiAgICAgICAgdmFyIGF2Z0NwID0gKEMxcCArIEMycCkvMjtcbiAgICAgICAgdmFyIGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICAgICAgdmFyIGFyY3RhbjIgPSByYWQyZGVnKGF0YW4yKGIyLCBhMnApKTtcbiAgICAgICAgdmFyIGgxcCA9IGFyY3RhbjEgPj0gMCA/IGFyY3RhbjEgOiBhcmN0YW4xICsgMzYwO1xuICAgICAgICB2YXIgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgICAgIHZhciBhdmdIcCA9IGFicyhoMXAgLSBoMnApID4gMTgwID8gKGgxcCArIGgycCArIDM2MCkvMiA6IChoMXAgKyBoMnApLzI7XG4gICAgICAgIHZhciBUID0gMSAtIDAuMTcqY29zKGRlZzJyYWQoYXZnSHAgLSAzMCkpICsgMC4yNCpjb3MoZGVnMnJhZCgyKmF2Z0hwKSkgKyAwLjMyKmNvcyhkZWcycmFkKDMqYXZnSHAgKyA2KSkgLSAwLjIqY29zKGRlZzJyYWQoNCphdmdIcCAtIDYzKSk7XG4gICAgICAgIHZhciBkZWx0YUhwID0gaDJwIC0gaDFwO1xuICAgICAgICBkZWx0YUhwID0gYWJzKGRlbHRhSHApIDw9IDE4MCA/IGRlbHRhSHAgOiBoMnAgPD0gaDFwID8gZGVsdGFIcCArIDM2MCA6IGRlbHRhSHAgLSAzNjA7XG4gICAgICAgIGRlbHRhSHAgPSAyKnNxcnQoQzFwKkMycCkqc2luKGRlZzJyYWQoZGVsdGFIcCkvMik7XG4gICAgICAgIHZhciBkZWx0YUwgPSBMMiAtIEwxO1xuICAgICAgICB2YXIgZGVsdGFDcCA9IEMycCAtIEMxcDsgICAgXG4gICAgICAgIHZhciBzbCA9IDEgKyAoMC4wMTUqcG93KGF2Z0wgLSA1MCwgMikpL3NxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgICAgIHZhciBzYyA9IDEgKyAwLjA0NSphdmdDcDtcbiAgICAgICAgdmFyIHNoID0gMSArIDAuMDE1KmF2Z0NwKlQ7XG4gICAgICAgIHZhciBkZWx0YVRoZXRhID0gMzAqZXhwKC1wb3coKGF2Z0hwIC0gMjc1KS8yNSwgMikpO1xuICAgICAgICB2YXIgUmMgPSAyKnNxcnQocG93KGF2Z0NwLCA3KS8ocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICAgICAgdmFyIFJ0ID0gLVJjKnNpbigyKmRlZzJyYWQoZGVsdGFUaGV0YSkpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gc3FydChwb3coZGVsdGFMLyhLbCpzbCksIDIpICsgcG93KGRlbHRhQ3AvKEtjKnNjKSwgMikgKyBwb3coZGVsdGFIcC8oS2gqc2gpLCAyKSArIFJ0KihkZWx0YUNwLyhLYypzYykpKihkZWx0YUhwLyhLaCpzaCkpKTtcbiAgICAgICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDEgPSBDb2xvcl8xO1xuXG4gICAgLy8gc2ltcGxlIEV1Y2xpZGVhbiBkaXN0YW5jZVxuICAgIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIsIG1vZGUpIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdsYWInO1xuXG4gICAgICAgIC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcXVhdGlvbnMuaHRtbFxuICAgICAgICBhID0gbmV3IENvbG9yJDEoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMShiKTtcbiAgICAgICAgdmFyIGwxID0gYS5nZXQobW9kZSk7XG4gICAgICAgIHZhciBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgICAgICB2YXIgc3VtX3NxID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBsMSkge1xuICAgICAgICAgICAgdmFyIGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICAgICAgICBzdW1fc3EgKz0gZCpkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtX3NxKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yID0gQ29sb3JfMTtcblxuICAgIHZhciB2YWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IsIFsgbnVsbCBdLmNvbmNhdCggYXJncykgKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuICAgIHZhciBjaHJvbWEkMSA9IGNocm9tYV8xO1xuXG4gICAgdmFyIHNjYWxlID0gc2NhbGUkMjtcblxuICAgIHZhciBzY2FsZXMgPSB7XG4gICAgXHRjb29sOiBmdW5jdGlvbiBjb29sKCkgeyByZXR1cm4gc2NhbGUoW2Nocm9tYSQxLmhzbCgxODAsMSwuOSksIGNocm9tYSQxLmhzbCgyNTAsLjcsLjQpXSkgfSxcbiAgICBcdGhvdDogZnVuY3Rpb24gaG90KCkgeyByZXR1cm4gc2NhbGUoWycjMDAwJywnI2YwMCcsJyNmZjAnLCcjZmZmJ10pLm1vZGUoJ3JnYicpIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLCBhbmQgVGhlXG4gICAgICAgIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuXG4gICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWRcbiAgICAgICAgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1JcbiAgICAgICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICAgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAqL1xuXG4gICAgdmFyIGNvbG9yYnJld2VyID0ge1xuICAgICAgICAvLyBzZXF1ZW50aWFsXG4gICAgICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICAgICAgUHVCdTogWycjZmZmN2ZiJywgJyNlY2U3ZjInLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM3NGE5Y2YnLCAnIzM2OTBjMCcsICcjMDU3MGIwJywgJyMwNDVhOGQnLCAnIzAyMzg1OCddLFxuICAgICAgICBCdVB1OiBbJyNmN2ZjZmQnLCAnI2UwZWNmNCcsICcjYmZkM2U2JywgJyM5ZWJjZGEnLCAnIzhjOTZjNicsICcjOGM2YmIxJywgJyM4ODQxOWQnLCAnIzgxMGY3YycsICcjNGQwMDRiJ10sXG4gICAgICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICAgICAgQnVHbjogWycjZjdmY2ZkJywgJyNlNWY1ZjknLCAnI2NjZWNlNicsICcjOTlkOGM5JywgJyM2NmMyYTQnLCAnIzQxYWU3NicsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgICAgICBZbE9yQnI6IFsnI2ZmZmZlNScsICcjZmZmN2JjJywgJyNmZWUzOTEnLCAnI2ZlYzQ0ZicsICcjZmU5OTI5JywgJyNlYzcwMTQnLCAnI2NjNGMwMicsICcjOTkzNDA0JywgJyM2NjI1MDYnXSxcbiAgICAgICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgICAgICBSZWRzOiBbJyNmZmY1ZjAnLCAnI2ZlZTBkMicsICcjZmNiYmExJywgJyNmYzkyNzInLCAnI2ZiNmE0YScsICcjZWYzYjJjJywgJyNjYjE4MWQnLCAnI2E1MGYxNScsICcjNjcwMDBkJ10sXG4gICAgICAgIFJkUHU6IFsnI2ZmZjdmMycsICcjZmRlMGRkJywgJyNmY2M1YzAnLCAnI2ZhOWZiNScsICcjZjc2OGExJywgJyNkZDM0OTcnLCAnI2FlMDE3ZScsICcjN2EwMTc3JywgJyM0OTAwNmEnXSxcbiAgICAgICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgICAgIFlsR25CdTogWycjZmZmZmQ5JywgJyNlZGY4YjEnLCAnI2M3ZTliNCcsICcjN2ZjZGJiJywgJyM0MWI2YzQnLCAnIzFkOTFjMCcsICcjMjI1ZWE4JywgJyMyNTM0OTQnLCAnIzA4MWQ1OCddLFxuICAgICAgICBQdXJwbGVzOiBbJyNmY2ZiZmQnLCAnI2VmZWRmNScsICcjZGFkYWViJywgJyNiY2JkZGMnLCAnIzllOWFjOCcsICcjODA3ZGJhJywgJyM2YTUxYTMnLCAnIzU0Mjc4ZicsICcjM2YwMDdkJ10sXG4gICAgICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICAgICAgR3JleXM6IFsnI2ZmZmZmZicsICcjZjBmMGYwJywgJyNkOWQ5ZDknLCAnI2JkYmRiZCcsICcjOTY5Njk2JywgJyM3MzczNzMnLCAnIzUyNTI1MicsICcjMjUyNTI1JywgJyMwMDAwMDAnXSxcbiAgICAgICAgWWxPclJkOiBbJyNmZmZmY2MnLCAnI2ZmZWRhMCcsICcjZmVkOTc2JywgJyNmZWIyNGMnLCAnI2ZkOGQzYycsICcjZmM0ZTJhJywgJyNlMzFhMWMnLCAnI2JkMDAyNicsICcjODAwMDI2J10sXG4gICAgICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICAgICAgQmx1ZXM6IFsnI2Y3ZmJmZicsICcjZGVlYmY3JywgJyNjNmRiZWYnLCAnIzllY2FlMScsICcjNmJhZWQ2JywgJyM0MjkyYzYnLCAnIzIxNzFiNScsICcjMDg1MTljJywgJyMwODMwNmInXSxcbiAgICAgICAgUHVCdUduOiBbJyNmZmY3ZmInLCAnI2VjZTJmMCcsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzY3YTljZicsICcjMzY5MGMwJywgJyMwMjgxOGEnLCAnIzAxNmM1OScsICcjMDE0NjM2J10sXG4gICAgICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgICAgICAvLyBkaXZlcmdpbmdcblxuICAgICAgICBTcGVjdHJhbDogWycjOWUwMTQyJywgJyNkNTNlNGYnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZTZmNTk4JywgJyNhYmRkYTQnLCAnIzY2YzJhNScsICcjMzI4OGJkJywgJyM1ZTRmYTInXSxcbiAgICAgICAgUmRZbEduOiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNkOWVmOGInLCAnI2E2ZDk2YScsICcjNjZiZDYzJywgJyMxYTk4NTAnLCAnIzAwNjgzNyddLFxuICAgICAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgICAgICBQaVlHOiBbJyM4ZTAxNTInLCAnI2M1MWI3ZCcsICcjZGU3N2FlJywgJyNmMWI2ZGEnLCAnI2ZkZTBlZicsICcjZjdmN2Y3JywgJyNlNmY1ZDAnLCAnI2I4ZTE4NicsICcjN2ZiYzQxJywgJyM0ZDkyMjEnLCAnIzI3NjQxOSddLFxuICAgICAgICBQUkduOiBbJyM0MDAwNGInLCAnIzc2MmE4MycsICcjOTk3MGFiJywgJyNjMmE1Y2YnLCAnI2U3ZDRlOCcsICcjZjdmN2Y3JywgJyNkOWYwZDMnLCAnI2E2ZGJhMCcsICcjNWFhZTYxJywgJyMxYjc4MzcnLCAnIzAwNDQxYiddLFxuICAgICAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgICAgIEJyQkc6IFsnIzU0MzAwNScsICcjOGM1MTBhJywgJyNiZjgxMmQnLCAnI2RmYzI3ZCcsICcjZjZlOGMzJywgJyNmNWY1ZjUnLCAnI2M3ZWFlNScsICcjODBjZGMxJywgJyMzNTk3OGYnLCAnIzAxNjY1ZScsICcjMDAzYzMwJ10sXG4gICAgICAgIFJkR3k6IFsnIzY3MDAxZicsICcjYjIxODJiJywgJyNkNjYwNGQnLCAnI2Y0YTU4MicsICcjZmRkYmM3JywgJyNmZmZmZmYnLCAnI2UwZTBlMCcsICcjYmFiYWJhJywgJyM4Nzg3ODcnLCAnIzRkNGQ0ZCcsICcjMWExYTFhJ10sXG4gICAgICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAgICAgLy8gcXVhbGl0YXRpdmVcblxuICAgICAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgICAgICBBY2NlbnQ6IFsnIzdmYzk3ZicsICcjYmVhZWQ0JywgJyNmZGMwODYnLCAnI2ZmZmY5OScsICcjMzg2Y2IwJywgJyNmMDAyN2YnLCAnI2JmNWIxNycsICcjNjY2NjY2J10sXG4gICAgICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICAgICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgICAgICBEYXJrMjogWycjMWI5ZTc3JywgJyNkOTVmMDInLCAnIzc1NzBiMycsICcjZTcyOThhJywgJyM2NmE2MWUnLCAnI2U2YWIwMicsICcjYTY3NjFkJywgJyM2NjY2NjYnXSxcbiAgICAgICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgICAgIFBhc3RlbDE6IFsnI2ZiYjRhZScsICcjYjNjZGUzJywgJyNjY2ViYzUnLCAnI2RlY2JlNCcsICcjZmVkOWE2JywgJyNmZmZmY2MnLCAnI2U1ZDhiZCcsICcjZmRkYWVjJywgJyNmMmYyZjInXSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIGxvd2VyY2FzZSBhbGlhc2VzIGZvciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IE9iamVjdC5rZXlzKGNvbG9yYnJld2VyKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGtleSA9IGxpc3RbaV07XG5cbiAgICAgICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3JicmV3ZXJfMSA9IGNvbG9yYnJld2VyO1xuXG4gICAgdmFyIGNocm9tYSA9IGNocm9tYV8xO1xuXG4gICAgLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuICAgIC8vIGEgc21hbGxlciBjaHJvbWEuanMgYnVpbHRcblxuICAgIC8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBvcGVyYXRvcnMgLS0+IG1vZGlmeSBleGlzdGluZyBDb2xvcnNcblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIGludGVycG9sYXRvcnNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbiAgICBjaHJvbWEuYXZlcmFnZSA9IGF2ZXJhZ2U7XG4gICAgY2hyb21hLmJlemllciA9IGJlemllcl8xO1xuICAgIGNocm9tYS5ibGVuZCA9IGJsZW5kXzE7XG4gICAgY2hyb21hLmN1YmVoZWxpeCA9IGN1YmVoZWxpeDtcbiAgICBjaHJvbWEubWl4ID0gY2hyb21hLmludGVycG9sYXRlID0gbWl4JDE7XG4gICAgY2hyb21hLnJhbmRvbSA9IHJhbmRvbV8xO1xuICAgIGNocm9tYS5zY2FsZSA9IHNjYWxlJDI7XG5cbiAgICAvLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbiAgICBjaHJvbWEuYW5hbHl6ZSA9IGFuYWx5emVfMS5hbmFseXplO1xuICAgIGNocm9tYS5jb250cmFzdCA9IGNvbnRyYXN0O1xuICAgIGNocm9tYS5kZWx0YUUgPSBkZWx0YUU7XG4gICAgY2hyb21hLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgY2hyb21hLmxpbWl0cyA9IGFuYWx5emVfMS5saW1pdHM7XG4gICAgY2hyb21hLnZhbGlkID0gdmFsaWQ7XG5cbiAgICAvLyBzY2FsZVxuICAgIGNocm9tYS5zY2FsZXMgPSBzY2FsZXM7XG5cbiAgICAvLyBjb2xvcnNcbiAgICBjaHJvbWEuY29sb3JzID0gdzNjeDExXzE7XG4gICAgY2hyb21hLmJyZXdlciA9IGNvbG9yYnJld2VyXzE7XG5cbiAgICB2YXIgY2hyb21hX2pzID0gY2hyb21hO1xuXG4gICAgcmV0dXJuIGNocm9tYV9qcztcblxufSkpO1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJ2YXIgQ0FOX1VTRV9ET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vLyBBZGFwdGVkIGZyb20gTW9kZXJuaXpyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL2FjYjNmMGQ5L2ZlYXR1cmUtZGV0ZWN0cy9kb20vcGFzc2l2ZWV2ZW50bGlzdGVuZXJzLmpzI0wyNi1MMzdcbmZ1bmN0aW9uIHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghQ0FOX1VTRV9ET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8ICF3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciB8fCAhT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnZXR0ZXItcmV0dXJuXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0O1xuICAgICAgfSgpXG4gICAgfSk7XG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlT3B0aW9uO1xufVxuXG52YXIgbWVtb2l6ZWQgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIGNhblVzZVBhc3NpdmVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKG1lbW9pemVkID09PSB1bmRlZmluZWQpIHtcbiAgICBtZW1vaXplZCA9IHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50T3B0aW9ucyhldmVudE9wdGlvbnMpIHtcbiAgaWYgKCFldmVudE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFjYW5Vc2VQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSkge1xuICAgIC8vIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHBhc3NpdmUgb3B0aW9uLCB0aGVuIGl0IGlzIGV4cGVjdGluZ1xuICAgIC8vIGEgYm9vbGVhbiBmb3IgdGhlIG9wdGlvbnMgYXJndW1lbnQgdG8gc3BlY2lmeSB3aGV0aGVyIGl0IHNob3VsZCB1c2VcbiAgICAvLyBjYXB0dXJlIG9yIG5vdC4gSW4gbW9yZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgaXMgcGFzc2VkIHZpYSB0aGUgYGNhcHR1cmVgXG4gICAgLy8gb3B0aW9uLCBzbyBsZXQncyBqdXN0IGhvaXN0IHRoYXQgdmFsdWUgdXAuXG4gICAgcmV0dXJuICEhZXZlbnRPcHRpb25zLmNhcHR1cmU7XG4gIH1cblxuICByZXR1cm4gZXZlbnRPcHRpb25zO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciBhbnkgc2V0IG9mIGV2ZW50IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXZlbnRPcHRpb25zS2V5KG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpIHtcbiAgaWYgKCFub3JtYWxpemVkRXZlbnRPcHRpb25zKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLCB0aGUgbm9ybWFsaXplZFxuICAvLyBldmVudCBvcHRpb25zIHdpbGwgYmUgYSBib29sZWFuLlxuICBpZiAobm9ybWFsaXplZEV2ZW50T3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAxMDA7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgYnJvd3NlciBzdXBwb3J0cyBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgc28gd2UgZXhwZWN0XG4gIC8vIHRoZSBldmVudCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCB3aXRoIHBvc3NpYmxlIHByb3BlcnRpZXMgb2YgY2FwdHVyZSxcbiAgLy8gcGFzc2l2ZSwgYW5kIG9uY2UuXG4gIC8vXG4gIC8vIFdlIHdhbnQgdG8gY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2ZcbiAgLy8gdGhlc2UgcHJvcGVydGllcywgc28gbGV0J3MgdXNlIGJpbmFyeSBtYXRocyB0byBhc3NpZ24gZWFjaCBwcm9wZXJ0eSB0byBhXG4gIC8vIGJpdCwgYW5kIHRoZW4gYWRkIHRob3NlIHRvZ2V0aGVyICh3aXRoIGFuIG9mZnNldCB0byBhY2NvdW50IGZvciB0aGVcbiAgLy8gYm9vbGVhbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uKS5cbiAgdmFyIGNhcHR1cmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLmNhcHR1cmUgPDwgMDtcbiAgdmFyIHBhc3NpdmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLnBhc3NpdmUgPDwgMTtcbiAgdmFyIG9uY2UgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLm9uY2UgPDwgMjtcbiAgcmV0dXJuIGNhcHR1cmUgKyBwYXNzaXZlICsgb25jZTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycykge1xuICBpZiAoZXZlbnRIYW5kbGVycy5oYW5kbGVycyA9PT0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMuaGFuZGxlcnMuc2xpY2UoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUYXJnZXRFdmVudEhhbmRsZXJzKHRhcmdldCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy5ldmVudHMgPSB7fTtcbn1cblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuZ2V0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZ2V0RXZlbnRIYW5kbGVycyhldmVudE5hbWUsIG9wdGlvbnMpIHtcbiAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50TmFtZSkgKyAnICcgKyBTdHJpbmcoZXZlbnRPcHRpb25zS2V5KG9wdGlvbnMpKTtcblxuICAgIGlmICghdGhpcy5ldmVudHNba2V5XSkge1xuICAgICAgdGhpcy5ldmVudHNba2V5XSA9IHtcbiAgICAgICAgaGFuZGxlcnM6IFtdLFxuICAgICAgICBoYW5kbGVFdmVudDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy5ldmVudHNba2V5XS5uZXh0SGFuZGxlcnMgPSB0aGlzLmV2ZW50c1trZXldLmhhbmRsZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV2ZW50c1trZXldO1xuICB9XG5cbiAgcmV0dXJuIGdldEV2ZW50SGFuZGxlcnM7XG59KCk7XG5cblRhcmdldEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudE5hbWUsIG9wdGlvbnMsIGV2ZW50KSB7XG4gICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB0aGlzLmdldEV2ZW50SGFuZGxlcnMoZXZlbnROYW1lLCBvcHRpb25zKTtcbiAgICBldmVudEhhbmRsZXJzLmhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnM7XG4gICAgZXZlbnRIYW5kbGVycy5oYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBwcmVzZW5jZSBoZXJlIGJlY2F1c2UgYSBoYW5kbGVyIGZ1bmN0aW9uIG1heVxuICAgICAgICAvLyBjYXVzZSBsYXRlciBoYW5kbGVycyB0byBnZXQgcmVtb3ZlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBmb3JcbiAgICAgICAgLy8gaW5zdGFuY2UgaGF2ZSBhIHdheXBvaW50IHRoYXQgdW5tb3VudHMgYW5vdGhlciB3YXlwb2ludCBhcyBwYXJ0IG9mIGFuXG4gICAgICAgIC8vIG9uRW50ZXIvb25MZWF2ZSBoYW5kbGVyLlxuICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVFdmVudDtcbn0oKTtcblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBvcHRpb25zIGhhcyBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50LlxuICAgIHZhciBldmVudEhhbmRsZXJzID0gdGhpcy5nZXRFdmVudEhhbmRsZXJzKGV2ZW50TmFtZSwgb3B0aW9ucyk7XG5cbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0RXZlbnRIYW5kbGVycyhldmVudEhhbmRsZXJzKTtcblxuICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcywgZXZlbnROYW1lLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgdmFyIGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgdmFyIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycyk7XG4gICAgICAgIHZhciBpbmRleCA9IGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBBbGwgZXZlbnQgaGFuZGxlcnMgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBldmVudFxuICAgICAgICAgIC8vIGxpc3RlbmVyIGZyb20gdGhlIHRhcmdldCBub2RlLlxuXG4gICAgICAgICAgaWYgKF90aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHRhcmdldCBtYXkgbm8gbG9uZ2VyIGV4aXN0XG4gICAgICAgICAgICAvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBlLmcuIHdoZW4gYSBSZWFjdCBjb21wb25lbnQgaXNcbiAgICAgICAgICAgIC8vIHVubW91bnRpbmcuIEd1YXJkaW5nIGFnYWluc3QgdGhpcyBwcmV2ZW50cyB0aGUgZm9sbG93aW5nIGVycm9yOlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlbW92ZUV2ZW50TGlzdGVuZXInIG9mIHVuZGVmaW5lZFxuICAgICAgICAgICAgX3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50LCBvcHRpb25zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KCk7XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgcmV0dXJuIGFkZDtcbn0oKTtcblxudmFyIEVWRU5UX0hBTkRMRVJTX0tFWSA9ICdfX2NvbnNvbGlkYXRlZF9ldmVudHNfaGFuZGxlcnNfXyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAoIXRhcmdldFtFVkVOVF9IQU5ETEVSU19LRVldKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0gPSBuZXcgVGFyZ2V0RXZlbnRIYW5kbGVycyh0YXJnZXQpO1xuICB9XG4gIHZhciBub3JtYWxpemVkRXZlbnRPcHRpb25zID0gbm9ybWFsaXplRXZlbnRPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0uYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBhZGRFdmVudExpc3RlbmVyIH07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLyogVmFycyAqL1xcbjpyb290IHtcXG4gIC8qIENPTE9SUyAqL1xcbiAgLyogQWNjZW50ICovXFxuICAtLWJsdWU6ICMxOGEwZmI7XFxuICAtLXB1cnBsZTogIzdiNjFmZjtcXG4gIC0taG90LXBpbms6ICNmZjAwZmY7XFxuICAtLWdyZWVuOiAjMWJjNDdkO1xcbiAgLS1yZWQ6ICNmMjQ4MjI7XFxuICAtLXllbGxvdzogI2ZmZWIwMDtcXG4gIC8qIEJhc2ljIGZvcmVncm91bmQgKi9cXG4gIC0tYmxhY2s6ICMwMDAwMDA7XFxuICAtLWJsYWNrODogcmdiYSgwLCAwLCAwLCAuOCk7XFxuICAtLWJsYWNrOC1vcGFxdWU6ICMzMzMzMzM7XFxuICAtLWJsYWNrMzogcmdiYSgwLCAwLCAwLCAuMyk7XFxuICAtLWJsYWNrMy1vcGFxdWU6ICNCM0IzQjM7XFxuICAtLXdoaXRlOiAjZmZmZmZmO1xcbiAgLS13aGl0ZTg6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjgpO1xcbiAgLS13aGl0ZTQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjQpO1xcbiAgLyogQmFzaWMgYmFja2dyb3VuZCAqL1xcbiAgLS1ncmV5OiAjZjBmMGYwO1xcbiAgLS1zaWx2ZXI6ICNlNWU1ZTU7XFxuICAtLWh1ZDogIzIyMjIyMjtcXG4gIC0tdG9vbGJhcjogIzJjMmMyYztcXG4gIC8qIFNwZWNpYWwgKi9cXG4gIC0tYmxhY2sxOiByZ2JhKDAsIDAsIDAsIC4xKTtcXG4gIC0tYmx1ZTM6IHJnYmEoMjQsIDE0NSwgMjUxLCAuMyk7XFxuICAtLXB1cnBsZTQ6IHJnYmEoMTIzLCA5NywgMjU1LCAuNCk7XFxuICAtLWhvdmVyLWZpbGw6IHJnYmEoMCwgMCwgMCwgLjA2KTtcXG4gIC0tc2VsZWN0aW9uLWE6ICNkYWViZjc7XFxuICAtLXNlbGVjdGlvbi1iOiAjZWRmNWZhO1xcbiAgLS13aGl0ZTI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjIpO1xcbiAgLyogVFlQT0dSQVBIWSAqL1xcbiAgLyogUG9zID0gcG9zaXRpdmUgYXBwbGljYXRpb25zIChibGFjayBvbiB3aGl0ZSkgKi9cXG4gIC8qIE5lZyA9IG5lZ2F0aXZlIGFwcGxpY2F0aW9ucyAod2hpdGUgb24gYmxhY2spICovXFxuICAvKiBGb250IHN0YWNrICovXFxuICAtLWZvbnQtc3RhY2s6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICAvKiBGb250IHNpemVzICovXFxuICAtLWZvbnQtc2l6ZS14c21hbGw6IDExcHg7XFxuICAtLWZvbnQtc2l6ZS1zbWFsbDogMTJweDtcXG4gIC0tZm9udC1zaXplLWxhcmdlOiAxM3B4O1xcbiAgLS1mb250LXNpemUteGxhcmdlOiAxNHB4O1xcbiAgLyogRm9udCB3ZWlnaHRzICovXFxuICAtLWZvbnQtd2VpZ2h0LW5vcm1hbDogNDAwO1xcbiAgLS1mb250LXdlaWdodC1tZWRpdW06IDUwMDtcXG4gIC0tZm9udC13ZWlnaHQtYm9sZDogNjAwO1xcbiAgLyogTGluZWhlaWdodCAqL1xcbiAgLS1mb250LWxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgLyogVXNlIEZvciB4c21hbGwsIHNtYWxsIGZvbnQgc2l6ZXMgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodC1sYXJnZTogMjRweDtcXG4gIC8qIFVzZSBGb3IgbGFyZ2UsIHhsYXJnZSBmb250IHNpemVzICovXFxuICAvKiBMZXR0ZXJzcGFjaW5nICovXFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbDogLjAwNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGw6IC4wMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbDogMDtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2U6IC0uMDAyNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZTogLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlOiAtLjAwMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2U6IC0uMDAxZW07XFxuICAvKiBCT1JERVIgUkFESVVTICovXFxuICAtLWJvcmRlci1yYWRpdXMtc21hbGw6IDJweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1tZWQ6IDVweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1sYXJnZTogNnB4O1xcbiAgLyogU0hBRE9XUyAqL1xcbiAgLS1zaGFkb3ctaHVkOiAwIDVweCAxN3B4IHJnYmEoMCwgMCwgMCwgLjIpLCAwIDJweCA3cHggcmdiYSgwLCAwLCAwLCAuMTUpO1xcbiAgLS1zaGFkb3ctZmxvYXRpbmctd2luZG93OiAwIDJweCAxNHB4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC8qIFNQQUNJTkcgKyBTSVpJTkcgKi9cXG4gIC0tc2l6ZS14eHhzbWFsbDogNHB4O1xcbiAgLS1zaXplLXh4c21hbGw6IDhweDtcXG4gIC0tc2l6ZS14c21hbGw6IDE2cHg7XFxuICAtLXNpemUtc21hbGw6IDI0cHg7XFxuICAtLXNpemUtbWVkaXVtOiAzMnB4O1xcbiAgLS1zaXplLWxhcmdlOiA0MHB4O1xcbiAgLS1zaXplLXhsYXJnZTogNDhweDtcXG4gIC0tc2l6ZS14eGxhcmdlOiA2NHB4O1xcbiAgLS1zaXplLXh4eGxhcmdlOiA4MHB4O1xcbn1cXG5cXG4vKiBHbG9iYWwgc3R5bGVzICovXFxuKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5ib2R5IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBmb250LWZhbWlseTogJ0ludGVyJywgc2Fucy1zZXJpZjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi8qICBGT05UUyAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItUmVndWxhci53b2ZmP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLU1lZGl1bS53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ0ludGVyJztcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBzcmM6IHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuLyogVVRJTElUSUVTICovXFxuLyogcGFkZGluZyAqL1xcbi5wLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucC14eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wLXhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wLXNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucC1tZWRpdW0ge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucC1sYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnAteGxhcmdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnAteHhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucC1odWdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHRvcCAqL1xcbi5wdC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wdC14eHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wdC1zbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wdC1tZWRpdW0ge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnB0LWxhcmdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnB0LXhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucHQteHhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnB0LWh1Z2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHJpZ2h0ICovXFxuLnByLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnByLXNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHItbWVkaXVtIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnByLWxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucHIteGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnByLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnByLWh1Z2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgYm90dG9tICovXFxuLnBiLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBiLXh4c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wYi14c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnBiLXNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBiLW1lZGl1bSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGItbGFyZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucGIteGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wYi14eGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGItaHVnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgbGVmdCAqL1xcbi5wbC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wbC14c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wbC1zbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucGwtbWVkaXVtIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGwtbGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBsLXhsYXJnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnBsLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGwtaHVnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gKi9cXG4ubS14eHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubS14eHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm0teHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubS1zbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubS1tZWRpdW0ge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tLWxhcmdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tLXhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm0teHhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tLWh1Z2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHRvcCAqL1xcbi5tdC14eHhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm10LXh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm10LXhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tdC1zbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm10LW1lZGl1bSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tdC1sYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm10LXhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tdC14eGxhcmdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tdC1odWdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gcmlnaHQgKi9cXG4ubXIteHh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1yLXh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubXIteHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXItc21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1yLW1lZGl1bSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1yLWxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tci14bGFyZ2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tci14eGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1yLWh1Z2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGJvdHRvbSAqL1xcbi5tYi14eHhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1iLXh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1iLXhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tYi1zbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1iLW1lZGl1bSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tYi1sYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1iLXhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tYi14eGxhcmdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tYi1odWdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gbGVmdCAqL1xcbi5tbC14eHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tbC14eHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tbC1zbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tbC1tZWRpdW0ge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1sLWxhcmdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1sLXhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWwteHhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1sLWh1Z2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBsYXlvdXQgdXRpbGl0aWVzICovXFxuLmhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uaW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZTtcXG59XFxuXFxuLmJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmZsZXgge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmlubGluZS1mbGV4IHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG4uY29sdW1uIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5jb2x1bW4tcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcblxcbi5yb3cge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnJvdy1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcblxcbi5mbGV4LXdyYXAtcmV2ZXJzZSB7XFxuICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtbm8td3JhcCB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLmZsZXgtc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAxO1xcbn1cXG5cXG4uZmxleC1uby1zaHJpbmsge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5mbGV4LWdyb3cge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4uZmxleC1uby1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWFyb3VuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtZW5kIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtZW5kIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1jZW50ZXIge1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0YXJ0IHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWNlbnRlciB7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0cmV0Y2gge1xcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCkgMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeTpkaXNhYmxlZCwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tcmVkKTtcXG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnksIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZW5hYmxlZDpmb2N1cywgLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4uY2hlY2tib3gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qIHVuY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbiAgLyogY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Y2hlY2tlZDpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuXFx0XFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0td2hpdGUpO1xcblxcdCAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuXFx0fSovXFxufVxcblxcbi5jaGVja2JveF9fYm94IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWwge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogLTFweCAxMHB4IDAgLThweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fYm94OmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyNyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDglMjA3JTIyJTIwd2lkdGglM0QlMjI4JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMS4xNzY0NyUyMDEuODgyMzYlMjAxLjg4MjM1JTIwMS44ODIzNiUyMDMuNzY0NzEtMy43NjQ3MiUyMDEuMTc2NDclMjAxLjE3NjQ4LTQuOTQxMTglMjA0Ljk0MTItMy4wNTg4Mi0zLjA1ODg0eiUyMiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IDJweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkOmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpbHZlcik7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCA4cHggMCAyNHB4O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogOHB4O1xcbiAgbGVmdDogNHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIG9wYWNpdHk6IDAuMztcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm0xMSUyMDgtNC0zdjZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpob3ZlcjpiZWZvcmUge1xcbiAgb3BhY2l0eTogMC44O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fY29udGVudCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUtc21hbGwpO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLXNlY3Rpb24ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1leHBhbmRlZCAuZGlzY2xvc3VyZV9fbGFiZWw6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm05JTIwMTAlMjAzLTRoLTZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMnB4IC0xcHg7XFxufVxcblxcbi5pY29uLS1zcGluIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW5nIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5pY29uLS1ibHVlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg1NCUpIHNlcGlhKDE2JSkgc2F0dXJhdGUoNzQ5OSUpIGh1ZS1yb3RhdGUoMTc5ZGVnKSBicmlnaHRuZXNzKDk4JSkgY29udHJhc3QoMTAxJSk7XFxufVxcblxcbi5pY29uLS1wdXJwbGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzIlKSBzZXBpYSg0MCUpIHNhdHVyYXRlKDY2MCUpIGh1ZS1yb3RhdGUoMjAyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMyUpO1xcbn1cXG5cXG4uaWNvbi0taG90LXBpbmsge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbn1cXG5cXG4uaWNvbi0tZ3JlZW4ge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDY2JSkgc2VwaWEoMzklKSBzYXR1cmF0ZSg1MzgyJSkgaHVlLXJvdGF0ZSgxMTRkZWcpIGJyaWdodG5lc3MoMTAyJSkgY29udHJhc3QoNzklKTtcXG59XFxuXFxuLmljb24tLXJlZCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDQzJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSg1NjMyJSkgaHVlLXJvdGF0ZSgzNDlkZWcpIGJyaWdodG5lc3MoOTclKSBjb250cmFzdCg5NSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG59XFxuXFxuLmljb24tLXllbGxvdyB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDc4JSkgc2VwaWEoODYlKSBzYXR1cmF0ZSgxNjA4JSkgaHVlLXJvdGF0ZSgxZGVnKSBicmlnaHRuZXNzKDEwNyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2s4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSgyNSUpIGh1ZS1yb3RhdGUoMTM3ZGVnKSBicmlnaHRuZXNzKDEwNSUpIGNvbnRyYXN0KDYwJSk7XFxufVxcblxcbi5pY29uLS1ibGFjazMge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNjk4JSkgaHVlLXJvdGF0ZSgyMTlkZWcpIGJyaWdodG5lc3MoNjYlKSBjb250cmFzdCgxMjclKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGU4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG59XFxuXFxuLmljb24tLXdoaXRlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxufVxcblxcbi5pY29uLS1hZGp1c3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTIgMTYuMDVWOWgxdjcuMDVhMi41IDIuNSAwIDAxMCA0LjlWMjNoLTF2LTIuMDVhMi41IDIuNSAwIDAxMC00Ljl6bTIgMi40NWExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHpNMTkgMjNoMXYtNy4wNWEyLjUgMi41IDAgMDAwLTQuOVY5aC0xdjIuMDVhMi41IDIuNSAwIDAwMCA0Ljl6bTItOS41YTEuNSAxLjUgMCAxMC0zIDAgMS41IDEuNSAwIDAwMyAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGVydCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuMjUgMTcuMzkzYTEuNzUgMS43NSAwIDAwMS43NSAxLjc1VjIwSDl2LS44NTdhMS43NSAxLjc1IDAgMDAxLjc1LTEuNzVWMTRjMC0zLjMxNCAyLjM1LTYgNS4yNS02czUuMjUgMi42ODYgNS4yNSA2em0tMS0zLjM5M3YzLjM5M2MwIC42LjE5MiAxLjE1NS41MTggMS42MDdoLTkuNTM2YTIuNzM4IDIuNzM4IDAgMDAuNTE4LTEuNjA3VjE0YzAtMi44OTEgMi4wMjQtNSA0LjI1LTVzNC4yNSAyLjEwOSA0LjI1IDV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTE2IDIzYTIgMiAwIDAxLTItMmgtMWEzIDMgMCAxMDYgMGgtMWEyIDIgMCAwMS0yIDJ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFuZ2xlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMiAxMnY4aDh2LTFoLTNhNCA0IDAgMDAtNC00di0zem0xIDR2M2gzYTMgMyAwIDAwLTMtM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hcnJvdy1sZWZ0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuMjA3IDE2LjVsMS42NDcgMS42NDYtLjcwNy43MDhMMTAuMjkzIDE2bDIuODU0LTIuODU0LjcwNy43MDgtMS42NDcgMS42NDZoNy41ODZsLTEuNjQ2LTEuNjQ2LjcwNy0uNzA4TDIxLjcwNyAxNmwtMi44NTMgMi44NTQtLjcwNy0uNzA4IDEuNjQ2LTEuNjQ2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS11cC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTAuMjkybDIuODU0IDIuODU0LS43MDcuNzA3LTEuNjQ2LTEuNjQ2djcuNTg1bDEuNjQ2LTEuNjQ2LjcwNy43MDctMi44NTMgMi44NTQtMi44NTQtMi44NTQuNzA3LS43MDcgMS42NDcgMS42NDZ2LTcuNTg1bC0xLjY0NyAxLjY0Ni0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDV2MTJoLTV6bTEgMWgzdjEwaC0zem02LTFoNXYxMmgtNXptMSAxaDN2MTBoLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXV0by1sYXlvdXQtdmVydGljYWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDEydjVIMTB6bTEgMWgxMHYzSDExem0tMSA2aDEydjVIMTB6bTEgMWgxMHYzSDExeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJhY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjcwNyAxNmw0LjY0Ni00LjY0Ni0uNzA3LS43MDdMMTIuMjkzIDE2bDUuMzUzIDUuMzU0LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kLWVtcHR5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi42OTUgMTEuNzJsLS42OTMtLjcxOEwxNiAxMWwtLjAwMS4wMDItLjY5NC43MThDMTMuMTAyIDE0LjAxMiAxMiAxNS4yOTQgMTIgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDAxLjE3MiAyLjkzNiAzLjkwNiAzLjkwNiAwIDAwNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAwMjAgMTYuODUyYzAtMS41NTgtMS4xMDItMi44NC0zLjMwNS01LjEzMnptLS42OTUuNzJjLS45NzcgMS4wMTctMS42OTMgMS43OS0yLjE5NSAyLjQ3MS0uNi44MTQtLjgwNSAxLjM4LS44MDUgMS45NHYuMDAzYTMuMiAzLjIgMCAwMC44OSAyLjIzOSAyLjkwNiAyLjkwNiAwIDAwNC4yMiAwIDMuMiAzLjIgMCAwMC44OS0yLjIzOXYtLjAwMmMwLS41Ni0uMjA1LTEuMTI3LS44MDUtMS45NC0uNTAyLS42ODEtMS4yMTktMS40NTUtMi4xOTUtMi40NzJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYmxlbmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2LjAwMiAxMS4wMDJsLjY5My43MThDMTguODk4IDE0LjAxMiAyMCAxNS4yOTQgMjAgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDEtMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMS01LjY1NiAwQTQuMTk5IDQuMTk5IDAgMDExMiAxNi44NTJjMC0xLjU1OCAxLjEwMi0yLjg0IDMuMzA1LTUuMTMybC42OTQtLjcxOXptLTIuMTk3IDMuOTFjLjUwMi0uNjgxIDEuMjE5LTEuNDU1IDIuMTk1LTIuNDcyLjk3NiAxLjAxNyAxLjY5MyAxLjc5IDIuMTk1IDIuNDcxLjYuODE0LjgwNSAxLjM4LjgwNSAxLjk0di4wMDNjMCAuMDQ5IDAgLjA5OC0uMDAzLjE0NmgtNS45OTRhMy4zNyAzLjM3IDAgMDEtLjAwMy0uMTQ2di0uMDAyYzAtLjU2LjIwNS0xLjEyNy44MDUtMS45NHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1icmVhayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBvcGFjaXR5PScuOSclM0UlM0NwYXRoIGQ9J00xMyA5djNoMVY5ek0yMi4xMDMgOS44OTZhMi45NzUgMi45NzUgMCAwMC00LjIwNyAwbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMS45NzUgMS45NzUgMCAwMTIuNzkzIDIuNzkzbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMi45NzUgMi45NzUgMCAwMDAtNC4yMDd6TTkuODk2IDIyLjEwNGEyLjk3NSAyLjk3NSAwIDAxMC00LjIwOGwyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMS45NzUgMS45NzUgMCAwMDIuNzkzIDIuNzkzbDIuNzUtMi43NS43MDcuNzA3LTIuNzUgMi43NWEyLjk3NSAyLjk3NSAwIDAxLTQuMjA3IDB6TTIzIDE5aC0zdi0xaDN6TTE5IDIwdjNoLTF2LTN6TTEyIDEzSDl2MWgzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMThsMy00aC02eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1sZWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTMgMTZsNC0zdjZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTkgMTZsLTQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC11cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE0bDMgNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2hlY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjIwNyAxMy43MDdMMTUgMTkuOTE0bC0zLjcwNy0zLjcwNyAxLjQxNC0xLjQxNEwxNSAxNy4wODZsNC43OTMtNC43OTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2xvc2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNS4yOTNsNC42NDYtNC42NDYuNzA4LjcwN0wxNi43MDcgMTZsNC42NDcgNC42NDctLjcwNy43MDdMMTYgMTYuNzA3bC00LjY0NiA0LjY0Ny0uNzA3LS43MDdMMTUuMjkzIDE2bC00LjY0Ni00LjY0Ni43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29tcG9uZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMi4wNjMgMTAuOTM4TDE2IDE0Ljg3NGwzLjkzOC0zLjkzOEwxNiA3em02LjQ2IDBMMTYgMTMuNDZsLTIuNTIzLTIuNTI0TDE2IDguNDE1em0tNi40NiAxMC4xMjRMMTYgMjVsMy45MzgtMy45MzhMMTYgMTcuMTI1em02LjQ2IDBMMTYgMjMuNTg3bC0yLjUyMy0yLjUyM0wxNiAxOC41Mzh6TTcgMTZsMy45MzctMy45MzhMMTQuODc1IDE2bC0zLjkzOCAzLjkzOHptMy45MzcgMi41MjNMMTMuNDYxIDE2bC0yLjUyNC0yLjUyM0w4LjQxNSAxNnpNMTcuMTI1IDE2bDMuOTM4IDMuOTM4TDI1IDE2bC0zLjkzOC0zLjkzOHptNi40NiAwbC0yLjUyMyAyLjUyM0wxOC41NCAxNmwyLjUyMy0yLjUyM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXItcmFkaXVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMSAxM2gtNGE0IDQgMCAwMC00IDR2NGgtMXYtNGE1IDUgMCAwMTUtNWg0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvcm5lcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDExaDN2MWgtMnYyaC0xem03IDBoM3YzaC0xdi0yaC0yem0tNiA5di0yaC0xdjNoM3YtMXptOS0ydjNoLTN2LTFoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLWhvcml6b250YWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExIDIyLjV2LTEzaC0xdjEzek0yMiA5LjV2MTNoLTF2LTEzek0xNyAxMi41djdoLTJ2LTd6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRpc3RyaWJ1dGUtdmVydGljYWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YxaC0xM3pNMTIuNSAxNWg3djJoLTd6TTIyLjUgMjFoLTEzdjFoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRyYWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCA4LjVoNy43MDdMMjIgMTIuNzkzVjIzLjVIMTB6bTEgMXYxM2gxMHYtOWgtNHYtNHptNyAuNzA3bDIuMjkzIDIuMjkzSDE4eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVmZmVjdHMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNi41IDguNWgtMXYzaDF6TTExLjA1IDEwLjM0M2wtLjcwNy43MDcgMi4xMjEgMi4xMjIuNzA4LS43MDh6TTIxLjY1NyAxMS4wNWwtLjcwNy0uNzA3LTIuMTIxIDIuMTIxLjcwNy43MDh6TTguNSAxNS41djFoM3YtMXpNMjAuNSAxNS41djFoM3YtMXpNMTMuMTcyIDE5LjUzNWwtLjcwOC0uNzA3LTIuMTIgMi4xMjIuNzA2LjcwN3pNMTkuNTM1IDE4LjgyOGwtLjcwNy43MDcgMi4xMjIgMi4xMjIuNzA3LS43MDd6TTE2LjUgMjAuNWgtMXYzaDF6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjQ5OCAxNS45OThhMi41IDIuNSAwIDExLTUgMCAyLjUgMi41IDAgMDE1IDB6bS0xIDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZWxsaXBzZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjUgMTZhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTYgMGExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHptNC41IDEuNWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWV5ZWRyb3BwZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMi40NDcgOS42Yy0uOC0uOC0yLS44LTIuOCAwbC0yLjggMi44LS44LS43Yy0uNC0uNC0xLS40LTEuNCAwcy0uNCAxIDAgMS40bC43LjctNS44IDUuOGMtLjQuNC0xIDEuOSAwIDIuOXMyLjUuNCAyLjkgMGw1LjgtNS44LjcuN2MuNC40IDEgLjQgMS40IDBzLjQtMSAwLTEuNGwtLjctLjcgMi44LTIuOGMuOC0uOS44LTIuMSAwLTIuOXptLTEwLjkgMTEuOWgtMXYtMWw1LjgtNS44IDEgMWMtLjEgMC01LjggNS44LTUuOCA1Ljh6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZvcndhcmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3Ljk0IDE2bC00LjY0Ny00LjY0Ni43MDctLjcwN0wxOS4zNTQgMTYgMTQgMjEuMzU0bC0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZnJhbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDI0di0zSDh2LTFoM3YtOEg4di0xaDNWOGgxdjNoOFY4aDF2M2gzdjFoLTN2OGgzdjFoLTN2M2gtMXYtM2gtOHYzem05LTR2LThoLTh2OHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ncm91cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE3LjQgOWgtMi44djFoMi44ek0yMC45IDIySDIydi0xLjFoMVYyM2gtMi4xek0xMCAxNC42djIuOEg5di0yLjh6TTIyIDExLjFWMTBoLTEuMVY5SDIzdjIuMXpNMjIgMTQuNnYyLjhoMXYtMi44ek0xMCAxMS4xVjEwaDEuMVY5SDl2Mi4xek05IDIwLjloMVYyMmgxLjF2MUg5ek0xNy40IDIyaC0yLjh2MWgyLjh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhpZGRlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuNTA5IDE1LjgwMUE4LjAzMyA4LjAzMyAwIDAwMjIuOTI4IDE0aC0xLjE4NEE2Ljk5MiA2Ljk5MiAwIDAxMTYgMTdhNi45OTIgNi45OTIgMCAwMS01Ljc0NS0zSDkuMDdhOC4wMzMgOC4wMzMgMCAwMDEuNDIxIDEuODAxbC0xLjU5NSAxLjU5NS43MDguNzA3IDEuNjU3LTEuNjU3Yy43MS41MjMgMS41MTEuOTMyIDIuMzc0IDEuMTk5bC0uNjE3IDIuMjIxLjk2NC4yNjguNjI2LTIuMjU1YTguMDUxIDguMDUxIDAgMDAyLjc4NCAwbC42MjYgMi4yNTUuOTY0LS4yNjgtLjYxNy0yLjIyMWE3Ljk3MSA3Ljk3MSAwIDAwMi4zNzQtMS4ybDEuNjU4IDEuNjU4LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhvcml6b250YWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOXYxNGgxVjl6bTEzIDB2MTRoMVY5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxOXYtNmg2djZ6bS0xLTdoOHY4aC04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWh5cGVybGluayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIwLjgyNCAxNC40OTJsLTEuNjU3IDEuNjU3LjgyOC44MjkgMS42NTgtMS42NTdhMy41MTcgMy41MTcgMCAwMC00Ljk3My00Ljk3M2wtMS42NTcgMS42NTguODI5LjgyOCAxLjY1Ny0xLjY1N2EyLjM0NSAyLjM0NSAwIDAxMy4zMTUgMy4zMTV6bS00Ljk3NCA0Ljk3MmwuODI5LjgyOS0xLjY1OCAxLjY1N2EzLjUxNiAzLjUxNiAwIDExLTQuOTcyLTQuOTcybDEuNjU5LTEuNjU4LjgyOC44MjktMS42NTYgMS42NTdhMi4zNDMgMi4zNDMgMCAxMDMuMzE1IDMuMzE1bDEuNjU3LTEuNjU3em0yLjA3Mi02LjIxNmwtNC45NzIgNC45NzMuODI4LjgyOSA0Ljk3My00Ljk3M3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW1hZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyIDEwSDEwdjcuNzkzbDMuMDgzLTMuMDgzIDcuMjkgNy4yOUgyMnpNMTAgMjJ2LTIuNzkzbDMuMDgzLTMuMDgzTDE4Ljk2IDIyem0wLTEzYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVYxMGExIDEgMCAwMC0xLTF6bTkuNjY3IDQuNjY3YTEuMzMzIDEuMzMzIDAgMTEtMi42NjcgMCAxLjMzMyAxLjMzMyAwIDAxMi42NjcgMHptMSAwYTIuMzMzIDIuMzMzIDAgMTEtNC42NjcgMCAyLjMzMyAyLjMzMyAwIDAxNC42NjcgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1pbnN0YW5jZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgN2w5IDktOSA5LTktOXptLTcuNTg2IDlMMTYgMjMuNTg2IDIzLjU4NiAxNiAxNiA4LjQxNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1rZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE0IDIwLjE0YTMuMDE0IDMuMDE0IDAgMDAuMzMxLTMuODY4bDIuMDQ3LTIuMDQ3IDEuNzY3IDEuNzY3YS41LjUgMCAxMC43MDctLjcwN2wtMS43NjctMS43NjcgMS4yOTMtMS4yOTMgMS43ODQgMS43ODRhLjUuNSAwIDEwLjcwNy0uNzA3bC0xLjc4NC0xLjc4NC43NjItLjc2MWEuNS41IDAgMDAtLjcwNy0uNzA4bC01LjUxMyA1LjUxM2EzLjAxNCAzLjAxNCAwIDEwLjM3MyA0LjU3OHptLS43MTItLjcxMmEyLjAwNiAyLjAwNiAwIDEwLTIuODM3LTIuODM3IDIuMDA2IDIuMDA2IDAgMDAyLjgzNyAyLjgzN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtYWxpZ24tYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNC41IDEwdjEwaC0yVjEwem04IDEydjFoLTEzdi0xem0tMy0ydi02aC0ydjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24taG9yaXpvbnRhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYuNSA5LjVoLTF2M2gtNXYyaDV2M2gtM3YyaDN2M2gxdi0zaDN2LTJoLTN2LTNoNXYtMmgtNXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjVIOXYtMTNoMXpNMjIgMTQuNUgxMnYtMmgxMHpNMTIgMTkuNWg2di0yaC02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIyIDIyLjVoMXYtMTNoLTF6TTEwIDE0LjVoMTB2LTJIMTB6TTIwIDE5LjVoLTZ2LTJoNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tdG9wIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTQuNSAyMlYxMmgtMnYxMHpNMjIuNSAxMFY5aC0xM3Yxek0xOS41IDEydjZoLTJ2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXZlcnRpY2FsLWNlbnRlcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMi41IDE1LjV2LTVoMnY1aDN2LTNoMnYzaDN2MWgtM3YzaC0ydi0zaC0zdjVoLTJ2LTVoLTN2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLWNvbHVtbnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YxNEg5ek0xNC41IDloM3YxNGgtM3pNMjAgOWgzdjE0aC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1yb3dzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDE0djNIOXpNOSAxNC41aDE0djNIOXpNOSAyMGgxNHYzSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLXVuaWZvcm0ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YzSDl6TTIwIDloM3YzaC0zek0xNC41IDloM3YzaC0zek05IDE0LjVoM3YzSDl6TTIwIDE0LjVoM3YzaC0zek0xNC41IDE0LjVoM3YzaC0zek05IDIwaDN2M0g5ek0yMCAyMGgzdjNoLTN6TTE0LjUgMjBoM3YzaC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saWJyYXJ5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4zNzMgMjJoMS4yNThjLjI4LS4zMi42MTYtLjU5Ny45OTUtLjgxOSAxLjQ3OC0uODYyIDQuMDA1LS45MDkgNS4zODYuMTA5SDI0LjV2LTkuMnMtLjc5Ny0yLjI1LTQuNDItMi4yNWMtMS44NzUgMC0yLjkwMi42MDItMy40NTYgMS4xODRhMi41NjggMi41NjggMCAwMC0uNi45NzZoLS4wNDhhMi41NjkgMi41NjkgMCAwMC0uNi0uOTc2Yy0uNTU0LS41ODItMS41ODEtMS4xODQtMy40NTYtMS4xODQtMy42MjMgMC00LjQyIDIuMjUtNC40MiAyLjI1djkuMTloMS40ODhjMS4zODItMS4wMTkgMy45MS0uOTcgNS4zODgtLjEwNS4zOC4yMjMuNzE3LjUwMy45OTcuODI1em0xLjEyNy05LjcxMXY4LjQ1N2MuMTk1LS4xNTcuNDAzLS4zLjYyMi0uNDI4LjkyNy0uNTQxIDIuMTE1LS43OTYgMy4yNDEtLjc4NyAxLjAwNi4wMDggMi4wODEuMjI3IDIuOTUyLjc1OWguMTg1di03Ljk3M2EyLjQxNCAyLjQxNCAwIDAwLS41MDUtLjU5NWMtLjQ2LS4zOTctMS4zMy0uODgyLTIuOTE1LS44ODItMS41ODYgMC0yLjM0LjQ4My0yLjY5NS44MzVhMS43NDkgMS43NDkgMCAwMC0uMzUzLjQ5IDEuMDc2IDEuMDc2IDAgMDAtLjA1Mi4xMzFsLS4wMDUuMDE3LjAwMS0uMDA2LjAwMi0uMDA4di0uMDA1bC4wMDEtLjAwMnYtLjAwMmwtLjAwNS0uMDAxem0tMSAwaC0uNDc0bC0uMDA2LjAwMXYuMDAybC4wMDEuMDAyLjAwMS4wMDUuMDAyLjAwOC4wMDEuMDA2LS4wMDUtLjAxN2ExLjA3NiAxLjA3NiAwIDAwLS4wNTMtLjEzMSAxLjc0OSAxLjc0OSAwIDAwLS4zNTMtLjQ5Yy0uMzU0LS4zNTEtMS4xMDgtLjgzNS0yLjY5NC0uODM1LTEuNTg1IDAtMi40NTUuNDg1LTIuOTE2Ljg4MmEyLjQxMSAyLjQxMSAwIDAwLS41MDQuNTk1djcuOTYzaC4xODVjLjg3Mi0uNTMyIDEuOTQ4LS43NTIgMi45NTQtLjc1OSAxLjEyOC0uMDA4IDIuMzE2LjI0OSAzLjI0My43OTIuMjE3LjEyNy40MjQuMjcuNjE4LjQyNnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWJyb2tlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE4IDE0di0yYTIgMiAwIDEwLTQgMHYyaC0xdi0yYTMgMyAwIDExNiAwdjJ6TTE5IDE4aC0xdjJhMiAyIDAgMTEtNCAwdi0yaC0xdjJhMyAzIDAgMTA2IDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpbmstY29ubmVjdGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMTBhMiAyIDAgMDEyIDJ2Mmgxdi0yYTMgMyAwIDEwLTYgMHYyaDF2LTJhMiAyIDAgMDEyLTJ6TTE4IDE4aDF2MmEzIDMgMCAxMS02IDB2LTJoMXYyYTIgMiAwIDEwNCAweicvJTNFJTNDcGF0aCBkPSdNMTUuNSAxM3Y2aDF2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3QtZGV0YWlsZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMiAxMGgtMnYxaDJ6TTEyIDIwaC0ydjFoMnpNMTAgMTVoMnYxaC0yek0yMiAxMGgtOHYxaDh6TTE0IDIwaDh2MWgtOHpNMjIgMTVoLTh2MWg4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LXRpbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0IDExaC0zdjNoM3ptLTQtMXY1aDV2LTV6bTExIDFoLTN2M2gzem0tNC0xdjVoNXYtNXptLTMgOGgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBmaWxsLW9wYWNpdHk9Jy44JyUzRSUzQ3BhdGggZD0nTTIzIDEwSDl2MWgxNHpNOSAxNS41aDE0djFIOXpNOSAyMWgxNHYxSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb2ZmIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTggMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNUgxN3YtMi41YTIuNSAyLjUgMCAwMTUgMFYxNGgtMXYtMS41YTEuNSAxLjUgMCAwMC0zIDB6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjUgMTV2LTEuNWEyLjUgMi41IDAgMDE1IDBWMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNXptNC0xLjVWMTVoLTN2LTEuNWExLjUgMS41IDAgMDEzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbWludXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMS41IDE2LjVoLTExdi0xaDExeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1wbGF5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMC4wOThMMjIuNDQzIDE2IDEzIDIxLjkwMnptMSAxLjgwNHY4LjE5NkwyMC41NTcgMTZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGx1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE1LjUgMTUuNXYtNWgxdjVoNXYxaC01djVoLTF2LTVoLTV2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJhbmRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMTE4IDExYTIuNSAyLjUgMCAwMC0xLjMzNS4zODZMMTEuMjI4IDEzSDE4LjV2MWgtOC40OTdhLjUxMi41MTIgMCAwMC0uMDAzLjA1MVYyMC41YzAgLjI3OC4yMjMuNS40OTcuNWg3LjYyOGEuNDk4LjQ5OCAwIDAwLjMyOC0uMTIzbDMuMjA2LTIuODA1YTEgMSAwIDAwLjM0MS0uNzUzVjExLjVhLjUuNSAwIDAwLS41LS41em0tMS44NjktLjQ2YTMuNSAzLjUgMCAwMTEuODctLjU0SDIxLjVhMS41IDEuNSAwIDAxMS41IDEuNXY1LjgyYTIgMiAwIDAxLS42ODMgMS41MDRsLTMuMjA1IDIuODA1Yy0uMjc0LjI0LS42MjQuMzcxLS45ODcuMzcxaC03LjYyN0M5LjY2OCAyMiA5IDIxLjMyNyA5IDIwLjV2LTYuNDQ5YTEuNSAxLjUgMCAwMS42OTktMS4yNjh6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTEzIDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTZhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xNyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTEzIDE5YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHonLyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMjIuNDA3IDEwLjcxYS41LjUgMCAwMS0uMTE2LjY5N2wtMy41IDIuNWEuNS41IDAgMDEtLjU4Mi0uODE0bDMuNS0yLjVhLjUuNSAwIDAxLjY5OC4xMTZ6Jy8lM0UlM0NwYXRoIGQ9J00xOCAyMXYtOGgxdjh6Jy8lM0UlM0MvZyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVjZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTUgMTJ2NWg1di0xaC00di00eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNpemUtdG8tZml0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOC42NDYgOS4zNTRMMTIuMjkzIDEzSDEwdjFoNHYtNGgtMXYyLjI5M0w5LjM1NCA4LjY0NnpNMTkuNzA3IDEzbDMuNjQ3LTMuNjQ2LS43MDctLjcwOEwxOSAxMi4yOTNWMTBoLTF2NGg0di0xek0xOS43MDcgMTlsMy42NDcgMy42NDYtLjcwNy43MDhMMTkgMTkuNzA3VjIyaC0xdi00aDR2MXpNMTIuMjkzIDE5bC0zLjY0NyAzLjY0Ni43MDguNzA4TDEzIDE5LjcwN1YyMmgxdi00aC00djF6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUtZmlsbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiAyNGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjkxMS05LjYzNWwtLjgyMi0uNzMtMy42MTMgNC4wNjQtMi41ODctMi41ODgtLjc3OC43NzggMy40MTMgMy40MTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzb2x2ZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5LjkxMSAxNC4zNjVsLS44MjItLjczLTMuNjEzIDQuMDYzLTIuNTg3LTIuNTg3LS43NzguNzc4IDMuNDEzIDMuNDEyeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXZlcnNlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS44NTQgOC42NDZMMTguMjA3IDExbC0yLjM1MyAyLjM1NC0uNzA4LS43MDggMS4xNDctMS4xNDZIMTRjLS41MDMgMC0xLjI3LjE1NS0xLjg5NS42MDYtLjYuNDMyLTEuMTA1IDEuMTU3LTEuMTA1IDIuMzk0djcuMjVoLTFWMTQuNWMwLTEuNTYzLjY2Mi0yLjU4OCAxLjUyLTMuMjA2LjgzMy0uNiAxLjgxNy0uNzk0IDIuNDgtLjc5NGgyLjI5M2wtMS4xNDctMS4xNDZ6TTIyIDEwdjcuMjVjMCAxLjU2My0uNjYyIDIuNTg4LTEuNTIgMy4yMDYtLjgzMy42LTEuODE3Ljc5NC0yLjQ4Ljc5NGgtMi4yOTNsMS4xNDcgMS4xNDYtLjcwOC43MDgtMi4zNTMtMi4zNTQgMi4zNTMtMi4zNTQuNzA4LjcwOC0xLjE0NyAxLjE0NkgxOGMuNTAzIDAgMS4yNy0uMTU1IDEuODk1LS42MDYuNi0uNDMyIDEuMTA1LTEuMTU3IDEuMTA1LTIuMzk0VjEweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaC1sYXJnZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguODc0IDE5LjU4MWE2IDYgMCAxMS43MDctLjcwN2w0LjI3MyA0LjI3Mi0uNzA4LjcwOHpNMjAgMTVhNSA1IDAgMTEtMTAgMCA1IDUgMCAwMTEwIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2VhcmNoIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC4zOTcgMTguNjA1YTQuNTUyIDQuNTUyIDAgMTEuNzA3LS43MDdsMy4yNSAzLjI0OS0uNzA4LjcwN3ptLjcwNi0zLjU1M2EzLjU1MiAzLjU1MiAwIDExLTcuMTAzIDAgMy41NTIgMy41NTIgMCAwMTcuMTAzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2V0dGluZ3Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTYuOTU0IDkuOTI4bC0uMTM5LS4zMzFDMTYuNjM1IDkuMTY1IDE2LjMwMSA5IDE2IDlzLS42MzUuMTY1LS44MTUuNTk3bC0uMTM5LjMzMWMtLjU2IDEuMzQzLTEuOTkyIDIuMTMtMy40MjUgMS43MmwtLjUtLjE0NGMtLjMwOS0uMDg4LS42MDYuMDI1LS44MTUuMzI3YTEuMDUgMS4wNSAwIDAwLS4wNDkgMS4xMjNjLjc0MyAxLjMyMy40MDIgMy4wNjgtLjg2IDMuOTUtLjMxOC4yMjItLjQ1Ni42MTQtLjM3NSAxLjAyNC4wODEuNDA5LjM0Mi42NjguNjczLjcyM2wuMTk1LjAzM2MxLjUyNS4yNTMgMi41MSAxLjY4NyAyLjQyMyAzLjE4LS4wMy41MDMuMjIuODYxLjUyIDEuMDI4LjI4OC4xNjEuNjIzLjE1NS45MjEtLjEwOGwuMzczLS4zM2EyLjggMi44IDAgMDEzLjc0NiAwbC4zNzMuMzNjLjI5OC4yNjQuNjMzLjI3LjkyMi4xMDguMy0uMTY3LjU0OS0uNTI1LjUyLTEuMDI4LS4wODgtMS40OTMuODk3LTIuOTI3IDIuNDIzLTMuMThsLjE5NC0uMDMzYy4zMy0uMDU1LjU5Mi0uMzE0LjY3My0uNzIzLjA4MS0uNDEtLjA1Ny0uODAyLS4zNzUtMS4wMjQtMS4yNjItLjg4Mi0xLjYwMy0yLjYyNy0uODYtMy45NWExLjA1IDEuMDUgMCAwMC0uMDUtMS4xMjNjLS4yMDgtLjMwMi0uNTA1LS40MTUtLjgxNS0uMzI3bC0uNDk5LjE0M2MtMS40MzMuNDEtMi44NjUtLjM3Ni0zLjQyNS0xLjcxOXptLjc4NC0uNzE3Yy0uNjc0LTEuNjE1LTIuODAyLTEuNjE1LTMuNDc2IDBsLS4xMzguMzMyYy0uMzgzLjkxNy0xLjMyNiAxLjQwMS0yLjIyOCAxLjE0M2wtLjQ5OS0uMTQzYy0xLjU3NS0uNDUtMi44NTUgMS4zOTgtMi4wMTIgMi45LjUwNS45LjI1NyAyLjA3LS41NiAyLjY0LTEuMzkyLjk3My0uOTMzIDMuMjgyLjcwNiAzLjU1NWwuMTk1LjAzMmMuOTYuMTYgMS42NSAxLjA5IDEuNTg4IDIuMTM1LS4xMDQgMS43ODggMS44MiAyLjg2NCAzLjEwMyAxLjcyN2wuMzczLS4zM2ExLjggMS44IDAgMDEyLjQyIDBsLjM3My4zM2MxLjI4NCAxLjEzNyAzLjIwNy4wNjEgMy4xMDMtMS43MjctLjA2MS0xLjA0Ni42MjgtMS45NzUgMS41ODktMi4xMzVsLjE5NC0uMDMyYzEuNjM5LS4yNzMgMi4wOTgtMi41ODIuNzA3LTMuNTU0LS44MTgtLjU3Mi0xLjA2Ni0xLjc0Mi0uNTYxLTIuNjQuODQzLTEuNTAzLS40MzctMy4zNTItMi4wMTItMi45MDFsLS41LjE0M2MtLjkuMjU4LTEuODQ0LS4yMjYtMi4yMjYtMS4xNDN6Jy8lM0UlM0NwYXRoIGQ9J00xNiAxOC41YTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0wIDFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNoYXJlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMCA5LjVhMy41IDMuNSAwIDAwLTEuMzgzIDYuNzE2QTQuNTEzIDQuNTEzIDAgMDAxNiAxOC40MzZhNC41MTMgNC41MTMgMCAwMC0yLjYxOC0yLjIyIDMuNTAxIDMuNTAxIDAgMTAtMi43NjQgMEE0LjUwMiA0LjUwMiAwIDAwNy41IDIwLjVWMjJoMTd2LTEuNWMwLTIuMDAzLTEuMzA5LTMuNy0zLjExOC00LjI4NEEzLjUwMSAzLjUwMSAwIDAwMjAgOS41ek0xNy41IDEzYTIuNSAyLjUgMCAxMTUgMCAyLjUgMi41IDAgMDEtNSAwem0tMSA4di0uNWEzLjUgMy41IDAgMTE3IDB2LjV6bS0xLS41di41aC03di0uNWEzLjUgMy41IDAgMTE3IDB6bS02LTcuNWEyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zbWlsZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAyMGE0LjAwMiA0LjAwMiAwIDAxLTMuODc0LTNoMS4wNDVhMy4wMDEgMy4wMDEgMCAwMDUuNjU4IDBoMS4wNDVBNC4wMDIgNC4wMDIgMCAwMTE2IDIwek0xOS41IDE0LjEyNWEuODc1Ljg3NSAwIDExLTEuNzUgMCAuODc1Ljg3NSAwIDAxMS43NSAwek0xMy4xMjUgMTVhLjg3NS44NzUgMCAxMDAtMS43NS44NzUuODc1IDAgMDAwIDEuNzV6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTI0IDE2YTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tMSAwYTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtYXNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMC41IDguMjkzbDMuMzU0IDMuMzUzLS43MDguNzA4TDIxIDEwLjIwN1YyM2gtMVYxMC4yMDdsLTIuMTQ2IDIuMTQ3LS43MDgtLjcwOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc29ydC1hbHBoYS1kc2Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTAuODk3IDlMOSAxNGgxLjA3bC4zNzktMWgyLjEzM2wuMzM4IDFoMS4wNTZsLTEuNjktNXptMS4zNDcgM2wtLjY2Ny0xLjk3M0wxMC44MjggMTJ6TTEyLjU1MyAxOUg5LjV2LTFIMTR2Ljk3OUwxMC45MzIgMjJIMTR2MUg5LjV2LS45OTN6TTIwIDIxLjc5M1Y5aDF2MTIuNzkzbDIuMTQ2LTIuMTQ3LjcwOC43MDgtMy4zNTQgMy4zNTMtMy4zNTQtMy4zNTMuNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtdG9wLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAuNDUgMTJIMTB2LTFoMTAuNDVjLjk3IDAgMS4zNzIgMS4yNDQuNTg0IDEuODEyTDExLjA1IDIwaDkuMjQzbC0xLjY0Ny0xLjY0Ni43MDgtLjcwOCAyLjg1MyAyLjg1NC0yLjg1MyAyLjg1NC0uNzA4LS43MDhMMjAuMjkzIDIxSDExLjA1Yy0uOTcgMC0xLjM3Mi0xLjI0NC0uNTg0LTEuODEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMiAxMWgtMnYxMGgydjFoLTNWMTBoM3ptLTEwLTF2MTJIOXYtMWgyVjExSDl2LTF6bTQgM2gtMXY2aDF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwaW5uZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE2NSA4LjUzYS41LjUgMCAwMS0uNDA0LjU4QTcgNyAwIDEwMjMgMTZhLjUuNSAwIDAxMSAwIDggOCAwIDExLTkuNDE2LTcuODc0LjUuNSAwIDAxLjU4LjQwNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdGFyLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTggMTQuMDA0TDE2IDhsLTIgNi4wMDRIOEwxMi45NiAxOGwtMS45MDQgNkwxNiAyMGw0Ljk0NCA0LTEuOTA0LTZMMjQgMTR6bTMuMTY1Ljk5OGwtMy44ODYuMDAyTDE2IDExLjE2NGwtMS4yOCAzLjg0aC0zLjg4NWwzLjI4NSAyLjY0Ni0xLjEwMyAzLjQ3N0wxNiAxOC43MTRsMi45ODMgMi40MTMtMS4xMDMtMy40NzZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDhsMiA2LjAwNEwyNCAxNGwtNC45NiA0IDEuOTA0IDZMMTYgMjBsLTQuOTQ0IDQgMS45MDQtNkw4IDE0LjAwNGg2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHJva2Utd2VpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnYxSDEwem0wIDRoMTJ2MkgxMHptMTIgNUgxMHYzaDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0eWxlcyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExLjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE3LjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE5IDIwLjVhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3pNMTEuNSAxOWExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3dhcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIzIDEzLjE4OGwtMS4xNzUgMS40NjhhNS41IDUuNSAwIDAwLTEwLjAwMy0yLjIxOWwuODMuNTU3YTQuNSA0LjUgMCAwMTguMjE2IDIuMDU3bC0yLjItMS40NjctLjU1NS44MzIgMy4zODEgMi4yNTQgMi4yODctMi44NTh6TTkgMTcuMTg4bC43OC42MjQgMS4xNzYtMS40NjguMDI2LjE1NmE1LjUgNS41IDAgMDA5Ljk3NiAyLjA2NXYtLjAwMmwtLjgzLS41NTctLjAwMS4wMDFhNC41IDQuNSAwIDAxLTguMjE0LTIuMDU4bDIuMiAxLjQ2Ny41NTUtLjgzMi0zLjM4Mi0yLjI1NHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGhlbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzIDEwaC0zdjEyaDN6bS0zLTFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDNhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMC43NSAyMC41YS43NS43NSAwIDExMS41IDAgLjc1Ljc1IDAgMDEtMS41IDB6TTIyIDE4YTEgMSAwIDAxMSAxdjNhMSAxIDAgMDEtMSAxaC03di0xaDd2LTNoLTd2LTF6TTE4LjM4NSAxN2wyLjc1Ny0yLjc1N2ExIDEgMCAwMDAtMS40MTVsLTIuMTIxLTIuMTJhMSAxIDAgMDAtMS40MTQgMEwxNSAxMy4zMTN2MS40MTRsMy4zMTQtMy4zMTQgMi4xMjEgMi4xMjJMMTYuOTcxIDE3eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWdyaWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAxMGgydjJoLTJ6TTIwIDEwaDJ2MmgtMnpNMTIgMTVoLTJ2Mmgyek0yMCAxNWgydjJoLTJ6TTEyIDIwaC0ydjJoMnpNMjAgMjBoMnYyaC0yek0xNyAxMGgtMnYyaDJ6TTE1IDE1aDJ2MmgtMnpNMTcgMjBoLTJ2MmgyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWxpc3QtaG9yaXpvbnRhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjV2LTEzaDJ2MTN6TTE1IDIyLjV2LTEzaDJ2MTN6TTIwIDkuNXYxM2gydi0xM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOS41IDEwaDEzdjJoLTEzek05LjUgMTVoMTN2MmgtMTN6TTIyLjUgMjBoLTEzdjJoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpbWVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTkgOGgtNlY3aDZ6TTE2LjUgMTd2LTVoLTF2NWEuNS41IDAgMDAxIDB6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyLjcxNSAxMi42NWwxLjUyNy0xLjUyOUwyMi4xMjIgOWwtMS40ODMgMS40ODJhOCA4IDAgMTAyLjA3NSAyLjE2N3pNMjMgMTdhNyA3IDAgMTEtMi4zODQtNS4yNjNsLjY0Ny42NDdBNi45NzQgNi45NzQgMCAwMTIzIDE3em0tMS4wMDgtNS4zbC4xMy4xMjguNzA2LS43MDctLjcwNy0uNzA3LS43MDEuNzAxYy4yLjE4NS4zOTEuMzguNTcyLjU4NXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10cmFzaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0IDE4LjV2LTRoMXY0ek0xNyAxOC41di00aDF2NHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTAuNWEyIDIgMCAwMC0yLTJoLTJhMiAyIDAgMDAtMiAyaC0zdjFoMXYxMGEyIDIgMCAwMDIgMmg2YTIgMiAwIDAwMi0ydi0xMGgxdi0xem0tNC0xYTEgMSAwIDAwLTEgMWg0YTEgMSAwIDAwLTEtMXptNSAyaC04djEwYTEgMSAwIDAwMSAxaDZhMSAxIDAgMDAxLTF6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdmVydGljYWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYxSDl6bTAgMTNoMTR2MUg5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOSAxM2gtNnY2aDZ6bS03LTF2OGg4di04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZpc2libGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAxOGEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMTJhNy40OTkgNy40OTkgMCAwMTYuNjM1IDRBNy40OTkgNy40OTkgMCAwMTE2IDIwYTcuNDk5IDcuNDk5IDAgMDEtNi42MzUtNEE3LjQ5OSA3LjQ5OSAwIDAxMTYgMTJ6bTAgN2E2LjQ5NSA2LjQ5NSAwIDAxLTUuNDc4LTNBNi40OTUgNi40OTUgMCAwMTE2IDEzYzIuMyAwIDQuMzIyIDEuMTk0IDUuNDc4IDNBNi40OTUgNi40OTUgMCAwMTE2IDE5eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmctbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDZsMTAgMThINnptLTEgMTF2LTRoMnY0em0wIDJ2Mmgydi0yeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDlsOCAxNEg4em0tMSA4LjVWMTRoMnYzLjV6bTAgMS41djJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmljb24tYnV0dG9uICoge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1ob3Zlci1maWxsKTtcXG59XFxuXFxuLmljb24tYnV0dG9uOmFjdGl2ZSwgLmljb24tYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDphY3RpdmUsIC5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5pbnB1dF9fZmllbGQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpob3ZlciwgLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93bjpob3ZlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDphY3RpdmUsIC5pbnB1dF9fZmllbGQ6Zm9jdXMge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uaW5wdXQtLXdpdGgtaWNvbiAuaW5wdXRfX2ZpZWxkIHtcXG4gIHBhZGRpbmctbGVmdDogMzJweDtcXG59XFxuXFxuLmlucHV0IC5pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMHB4O1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogdG9wO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCAwO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXAgLmljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXBfX21zZyB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5yYWRpbyB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHZpZXdCb3g9XFxcIjAgMCA2IDZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIlM0UlM0NyZWN0IHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHJ4PVxcXCIzXFxcIiBmaWxsPVxcXCJibGFja1xcXCIgZmlsbC1vcGFjaXR5PVxcXCIwLjhcXFwiLyUzRSUzQy9zdmclM0UlMEEnKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggMnB4O1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWwge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkOmRpc2FibGVkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDJweCAxMHB4IDAgLThweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLnNlY3Rpb24tdGl0bGUge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXh4c21hbGwpIC8gMikgMCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG5zZWxlY3Quc2VsZWN0LW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMzBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXh4c21hbGwpIDBweCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYmxhY2sxKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24gKiB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZDpob3ZlciAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCwgLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAxLjA7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkIC5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2NhcmV0IHtcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjMwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzAlMjAzMCUyMiUyMHdpZHRoJTNEJTIyMzAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xNSUyMDE2LjcwNzEtMy0zJTIwLjcwNzEtLjcwNzElMjAyLjY0NjUlMjAyLjY0NjQlMjAyLjY0NjQtMi42NDY0LjcwNzEuNzA3MS0zJTIwMy0uMzUzNS4zNTM2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51IC5pY29uIHtcXG4gIG1hcmdpbi1sZWZ0OiAtOHB4O1xcbiAgbWFyZ2luLXRvcDogLTJweDtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1odWQpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWh1ZCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBtYXJnaW46IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgb3ZlcmZsb3cteDogb3ZlcmxheTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudS0tYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9KTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICBib3JkZXI6IHNvbGlkIDNweCB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IDEwcHggdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMHB4IHZhcigtLXNpemUteHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0tLXNlbGVjdGVkIC5zZWxlY3QtbWVudV9faXRlbS1pY29uIHtcXG4gIG9wYWNpdHk6IDEuMDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWxhYmVsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEzLjIwNjklMjA1LjIwNzI0LTUuNTAwMDIlMjA1LjQ5OTk2LS43MDcxMS43MDcyLS43MDcxMS0uNzA3Mi0zLTIuOTk5OTYlMjAxLjQxNDIyLTEuNDE0MjElMjAyLjI5Mjg5JTIwMi4yOTI4OSUyMDQuNzkyOTMtNC43OTI4OXolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5zZWxlY3QtbWVudS0taGlnaGxpZ2h0LCAuc2VsZWN0LW1lbnVfX2l0ZW06aG92ZXIsIC5zZWxlY3QtbWVudV9faXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19kaXZpZGVyLWxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHhzbWFsbCkgMCB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBjb2xvcjogdmFyKC0td2hpdGU0KTtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZTIpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG1hcmdpbjogOHB4IDAgN3B4IDA7XFxufVxcblxcbi5zd2l0Y2gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qXFxuICAgICZfX3RvZ2dsZTpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuICAgIH1cXG4gICAgKi9cXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4LW9wYXF1ZSk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEycHgpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZDpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjayk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgY2FsYyh2YXIoLS1zaXplLXhsYXJnZSkgLSAycHgpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMCAwLjJzO1xcbiAgd2lkdGg6IDIycHg7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xcbiAgd2lkdGg6IDEwcHg7XFxufVxcblxcbi50ZXh0YXJlYSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiA2MnB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgcmVzaXplOiBub25lO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXFxuLnRleHRhcmVhOmhvdmVyLCAudGV4dGFyZWE6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmFjdGl2ZSwgLnRleHRhcmVhOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQsIC50ZXh0YXJlYTpkaXNhYmxlZDpob3ZlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQ6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi50eXBlIHtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgLyogc2l6ZXMgKi9cXG4gIC8qIHdlaWdodHMgKi9cXG4gIC8qIGxldHRlciBzcGFjaW5nIGFkanVzdG1lbnRzIGJhc2VkIHBvcy9uZWcgYXBwbGljYXRpb24gKi9cXG59XFxuXFxuLnR5cGUtLXNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1sYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0teGxhcmdlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLW1lZGl1bSB7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG59XFxuXFxuLnR5cGUtLWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tc21hbGwge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tbGFyZ2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0teGxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0taW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9maWdtYS1wbHVnaW4tZHMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLFNBQVM7QUFDVDtFQUNFLFdBQVc7RUFDWCxXQUFXO0VBQ1gsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQiwyQkFBMkI7RUFDM0Isd0JBQXdCO0VBQ3hCLDJCQUEyQjtFQUMzQix3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osMkJBQTJCO0VBQzNCLCtCQUErQjtFQUMvQixpQ0FBaUM7RUFDakMsZ0NBQWdDO0VBQ2hDLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsaUNBQWlDO0VBQ2pDLGVBQWU7RUFDZixpREFBaUQ7RUFDakQsaURBQWlEO0VBQ2pELGVBQWU7RUFDZixpQ0FBaUM7RUFDakMsZUFBZTtFQUNmLHdCQUF3QjtFQUN4Qix1QkFBdUI7RUFDdkIsdUJBQXVCO0VBQ3ZCLHdCQUF3QjtFQUN4QixpQkFBaUI7RUFDakIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix1QkFBdUI7RUFDdkIsZUFBZTtFQUNmLHdCQUF3QjtFQUN4QixxQ0FBcUM7RUFDckMsOEJBQThCO0VBQzlCLHFDQUFxQztFQUNyQyxrQkFBa0I7RUFDbEIsd0NBQXdDO0VBQ3hDLHVDQUF1QztFQUN2QyxrQ0FBa0M7RUFDbEMsdUNBQXVDO0VBQ3ZDLHlDQUF5QztFQUN6Qyx3Q0FBd0M7RUFDeEMseUNBQXlDO0VBQ3pDLHlDQUF5QztFQUN6QyxrQkFBa0I7RUFDbEIsMEJB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Q0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCLGtDQUFrQztFQUNsQyxzQ0FBc0M7RUFDdEMsb0NBQW9DO0VBQ3BDLHFEQUFxRDtFQUNyRCxVQUFVO0VBQ1YsWUFBWTtFQUNaLHlEQUF5RDtBQUMzRDs7QUFFQTtFQUNFLGlDQUFpQztFQUNqQyxvREFBb0Q7QUFDdEQ7O0FBRUE7RUFDRSxpQ0FBaUM7RUFDakMsMENBQTBDO0VBQzFDLG9EQUFvRDtBQUN0RDs7QUFFQTtFQUNFLGtDQUFrQztFQUNsQywwQ0FBMEM7RUFDMUMscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usc0NBQXNDO0FBQ3hDOztBQUVBO0VBQ0Usb0NBQW9DO0FBQ3RDOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIFZhcnMgKi9cXG46cm9vdCB7XFxuICAvKiBDT0xPUlMgKi9cXG4gIC8qIEFjY2VudCAqL1xcbiAgLS1ibHVlOiAjMThhMGZiO1xcbiAgLS1wdXJwbGU6ICM3YjYxZmY7XFxuICAtLWhvdC1waW5rOiAjZmYwMGZmO1xcbiAgLS1ncmVlbjogIzFiYzQ3ZDtcXG4gIC0tcmVkOiAjZjI0ODIyO1xcbiAgLS15ZWxsb3c6ICNmZmViMDA7XFxuICAvKiBCYXNpYyBmb3JlZ3JvdW5kICovXFxuICAtLWJsYWNrOiAjMDAwMDAwO1xcbiAgLS1ibGFjazg6IHJnYmEoMCwgMCwgMCwgLjgpO1xcbiAgLS1ibGFjazgtb3BhcXVlOiAjMzMzMzMzO1xcbiAgLS1ibGFjazM6IHJnYmEoMCwgMCwgMCwgLjMpO1xcbiAgLS1ibGFjazMtb3BhcXVlOiAjQjNCM0IzO1xcbiAgLS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0td2hpdGU4OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44KTtcXG4gIC0td2hpdGU0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC40KTtcXG4gIC8qIEJhc2ljIGJhY2tncm91bmQgKi9cXG4gIC0tZ3JleTogI2YwZjBmMDtcXG4gIC0tc2lsdmVyOiAjZTVlNWU1O1xcbiAgLS1odWQ6ICMyMjIyMjI7XFxuICAtLXRvb2xiYXI6ICMyYzJjMmM7XFxuICAvKiBTcGVjaWFsICovXFxuICAtLWJsYWNrMTogcmdiYSgwLCAwLCAwLCAuMSk7XFxuICAtLWJsdWUzOiByZ2JhKDI0LCAxNDUsIDI1MSwgLjMpO1xcbiAgLS1wdXJwbGU0OiByZ2JhKDEyMywgOTcsIDI1NSwgLjQpO1xcbiAgLS1ob3Zlci1maWxsOiByZ2JhKDAsIDAsIDAsIC4wNik7XFxuICAtLXNlbGVjdGlvbi1hOiAjZGFlYmY3O1xcbiAgLS1zZWxlY3Rpb24tYjogI2VkZjVmYTtcXG4gIC0td2hpdGUyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4yKTtcXG4gIC8qIFRZUE9HUkFQSFkgKi9cXG4gIC8qIFBvcyA9IHBvc2l0aXZlIGFwcGxpY2F0aW9ucyAoYmxhY2sgb24gd2hpdGUpICovXFxuICAvKiBOZWcgPSBuZWdhdGl2ZSBhcHBsaWNhdGlvbnMgKHdoaXRlIG9uIGJsYWNrKSAqL1xcbiAgLyogRm9udCBzdGFjayAqL1xcbiAgLS1mb250LXN0YWNrOiAnSW50ZXInLCBzYW5zLXNlcmlmO1xcbiAgLyogRm9udCBzaXplcyAqL1xcbiAgLS1mb250LXNpemUteHNtYWxsOiAxMXB4O1xcbiAgLS1mb250LXNpemUtc21hbGw6IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1sYXJnZTogMTNweDtcXG4gIC0tZm9udC1zaXplLXhsYXJnZTogMTRweDtcXG4gIC8qIEZvbnQgd2VpZ2h0cyAqL1xcbiAgLS1mb250LXdlaWdodC1ub3JtYWw6IDQwMDtcXG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWJvbGQ6IDYwMDtcXG4gIC8qIExpbmVoZWlnaHQgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodDogMTZweDtcXG4gIC8qIFVzZSBGb3IgeHNtYWxsLCBzbWFsbCBmb250IHNpemVzICovXFxuICAtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2U6IDI0cHg7XFxuICAvKiBVc2UgRm9yIGxhcmdlLCB4bGFyZ2UgZm9udCBzaXplcyAqL1xcbiAgLyogTGV0dGVyc3BhY2luZyAqL1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsOiAuMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGw6IDA7XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsOiAuMDA1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlOiAtLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctbGFyZ2U6IC4wMDI1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZTogLS4wMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlOiAtLjAwMWVtO1xcbiAgLyogQk9SREVSIFJBRElVUyAqL1xcbiAgLS1ib3JkZXItcmFkaXVzLXNtYWxsOiAycHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbWVkOiA1cHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbGFyZ2U6IDZweDtcXG4gIC8qIFNIQURPV1MgKi9cXG4gIC0tc2hhZG93LWh1ZDogMCA1cHggMTdweCByZ2JhKDAsIDAsIDAsIC4yKSwgMCAycHggN3B4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC0tc2hhZG93LWZsb2F0aW5nLXdpbmRvdzogMCAycHggMTRweCByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuICAvKiBTUEFDSU5HICsgU0laSU5HICovXFxuICAtLXNpemUteHh4c21hbGw6IDRweDtcXG4gIC0tc2l6ZS14eHNtYWxsOiA4cHg7XFxuICAtLXNpemUteHNtYWxsOiAxNnB4O1xcbiAgLS1zaXplLXNtYWxsOiAyNHB4O1xcbiAgLS1zaXplLW1lZGl1bTogMzJweDtcXG4gIC0tc2l6ZS1sYXJnZTogNDBweDtcXG4gIC0tc2l6ZS14bGFyZ2U6IDQ4cHg7XFxuICAtLXNpemUteHhsYXJnZTogNjRweDtcXG4gIC0tc2l6ZS14eHhsYXJnZTogODBweDtcXG59XFxuXFxuLyogR2xvYmFsIHN0eWxlcyAqL1xcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4vKiAgRk9OVFMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1SZWd1bGFyLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItTWVkaXVtLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbi8qIFVUSUxJVElFUyAqL1xcbi8qIHBhZGRpbmcgKi9cXG4ucC14eHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnAteHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucC14c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucC1zbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnAtbWVkaXVtIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnAtbGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wLXhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wLXh4bGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnAtaHVnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyB0b3AgKi9cXG4ucHQteHh4c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnB0LXhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucHQtc21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHQtbWVkaXVtIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wdC1sYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wdC14bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnB0LXh4bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wdC1odWdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyByaWdodCAqL1xcbi5wci14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnByLXh4c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnByLXhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wci1zbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnByLW1lZGl1bSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wci1sYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnByLXhsYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wci14eGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wci1odWdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGJvdHRvbSAqL1xcbi5wYi14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wYi14eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGIteHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wYi1zbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wYi1tZWRpdW0ge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBiLWxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBiLXhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucGIteHhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBiLWh1Z2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGxlZnQgKi9cXG4ucGwteHh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBsLXh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucGwtc21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBsLW1lZGl1bSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBsLWxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wbC14bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wbC14eGxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBsLWh1Z2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luICovXFxuLm0teHh4c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm0teHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tLXhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm0tc21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm0tbWVkaXVtIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubS1sYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubS14bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tLXh4bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubS1odWdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiB0b3AgKi9cXG4ubXQteHh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tdC14eHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tdC14c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXQtc21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tdC1tZWRpdW0ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubXQtbGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tdC14bGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXQteHhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubXQtaHVnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHJpZ2h0ICovXFxuLm1yLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tci14eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1yLXhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1yLXNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tci1tZWRpdW0ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tci1sYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubXIteGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXIteHhsYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tci1odWdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiBib3R0b20gKi9cXG4ubWIteHh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tYi14eHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tYi14c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWItc21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tYi1tZWRpdW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubWItbGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tYi14bGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWIteHhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubWItaHVnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGxlZnQgKi9cXG4ubWwteHh4c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1sLXhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWwtc21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubWwtbWVkaXVtIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tbC1sYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tbC14bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1sLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tbC1odWdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbGF5b3V0IHV0aWxpdGllcyAqL1xcbi5oaWRkZW4ge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmU7XFxufVxcblxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY29sdW1uLXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG5cXG4ucm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5yb3ctcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5mbGV4LXdyYXAge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG5cXG4uZmxleC13cmFwLXJldmVyc2Uge1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcblxcbi5mbGV4LW5vLXdyYXAge1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcblxcbi5mbGV4LXNocmluayB7XFxuICBmbGV4LXNocmluazogMTtcXG59XFxuXFxuLmZsZXgtbm8tc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uZmxleC1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZsZXgtbm8tZ3JvdyB7XFxuICBmbGV4LWdyb3c6IDA7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtc3RhcnQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWVuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1iZXR3ZWVuIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1jZW50ZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LXN0YXJ0IHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWVuZCB7XFxuICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtY2VudGVyIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RyZXRjaCB7XFxuICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdGFydCB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1lbmQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1jZW50ZXIge1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcblxcbi5idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxhcmdlKTtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpIDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeTplbmFibGVkOmZvY3VzLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLXJlZCk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmRpc2FibGVkLCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmUge1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmNoZWNrYm94IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiB1bmNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG5cXHRcXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aGl0ZSk7XFxuXFx0ICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG5cXHR9Ki9cXG4gIC8qIGNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmNoZWNrZWQ6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IC0xcHggMTBweCAwIC04cHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA4JTIwNyUyMiUyMHdpZHRoJTNEJTIyOCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEuMTc2NDclMjAxLjg4MjM2JTIwMS44ODIzNSUyMDEuODgyMzYlMjAzLjc2NDcxLTMuNzY0NzIlMjAxLjE3NjQ3JTIwMS4xNzY0OC00Ljk0MTE4JTIwNC45NDEyLTMuMDU4ODItMy4wNTg4NHolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDFweCAycHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zaWx2ZXIpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgOHB4IDAgMjRweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDhweDtcXG4gIGxlZnQ6IDRweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtMTElMjA4LTQtM3Y2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWw6aG92ZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1zZWN0aW9uIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLWV4cGFuZGVkIC5kaXNjbG9zdXJlX19jb250ZW50IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtOSUyMDEwJTIwMy00aC02eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTJweCAtMXB4O1xcbn1cXG5cXG4uaWNvbi0tc3BpbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcm90YXRpbmcge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG4uaWNvbi0tYmx1ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDU0JSkgc2VwaWEoMTYlKSBzYXR1cmF0ZSg3NDk5JSkgaHVlLXJvdGF0ZSgxNzlkZWcpIGJyaWdodG5lc3MoOTglKSBjb250cmFzdCgxMDElKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG59XFxuXFxuLmljb24tLXB1cnBsZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3MiUpIHNlcGlhKDQwJSkgc2F0dXJhdGUoNjYwJSkgaHVlLXJvdGF0ZSgyMDJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG59XFxuXFxuLmljb24tLWhvdC1waW5rIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG59XFxuXFxuLmljb24tLWdyZWVuIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNjYlKSBzZXBpYSgzOSUpIHNhdHVyYXRlKDUzODIlKSBodWUtcm90YXRlKDExNGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCg3OSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxufVxcblxcbi5pY29uLS1yZWQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDMlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDU2MzIlKSBodWUtcm90YXRlKDM0OWRlZykgYnJpZ2h0bmVzcyg5NyUpIGNvbnRyYXN0KDk1JSk7XFxufVxcblxcbi5pY29uLS15ZWxsb3cge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzglKSBzZXBpYSg4NiUpIHNhdHVyYXRlKDE2MDglKSBodWUtcm90YXRlKDFkZWcpIGJyaWdodG5lc3MoMTA3JSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pY29uLS1ibGFjayB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDI1JSkgaHVlLXJvdGF0ZSgxMzdkZWcpIGJyaWdodG5lc3MoMTA1JSkgY29udHJhc3QoNjAlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2szIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg2OTglKSBodWUtcm90YXRlKDIxOWRlZykgYnJpZ2h0bmVzcyg2NiUpIGNvbnRyYXN0KDEyNyUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLXdoaXRlOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbn1cXG5cXG4uaWNvbi0tYWRqdXN0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEyIDE2LjA1VjloMXY3LjA1YTIuNSAyLjUgMCAwMTAgNC45VjIzaC0xdi0yLjA1YTIuNSAyLjUgMCAwMTAtNC45em0yIDIuNDVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTE5IDIzaDF2LTcuMDVhMi41IDIuNSAwIDAwMC00LjlWOWgtMXYyLjA1YTIuNSAyLjUgMCAwMDAgNC45em0yLTkuNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxlcnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjI1IDE3LjM5M2ExLjc1IDEuNzUgMCAwMDEuNzUgMS43NVYyMEg5di0uODU3YTEuNzUgMS43NSAwIDAwMS43NS0xLjc1VjE0YzAtMy4zMTQgMi4zNS02IDUuMjUtNnM1LjI1IDIuNjg2IDUuMjUgNnptLTEtMy4zOTN2My4zOTNjMCAuNi4xOTIgMS4xNTUuNTE4IDEuNjA3aC05LjUzNmEyLjczOCAyLjczOCAwIDAwLjUxOC0xLjYwN1YxNGMwLTIuODkxIDIuMDI0LTUgNC4yNS01czQuMjUgMi4xMDkgNC4yNSA1eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xNiAyM2EyIDIgMCAwMS0yLTJoLTFhMyAzIDAgMTA2IDBoLTFhMiAyIDAgMDEtMiAyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbmdsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIgMTJ2OGg4di0xaC0zYTQgNCAwIDAwLTQtNHYtM3ptMSA0djNoM2EzIDMgMCAwMC0zLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXJyb3ctbGVmdC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyLjIwNyAxNi41bDEuNjQ3IDEuNjQ2LS43MDcuNzA4TDEwLjI5MyAxNmwyLjg1NC0yLjg1NC43MDcuNzA4LTEuNjQ3IDEuNjQ2aDcuNTg2bC0xLjY0Ni0xLjY0Ni43MDctLjcwOEwyMS43MDcgMTZsLTIuODUzIDIuODU0LS43MDctLjcwOCAxLjY0Ni0xLjY0NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdXAtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDEwLjI5MmwyLjg1NCAyLjg1NC0uNzA3LjcwNy0xLjY0Ni0xLjY0NnY3LjU4NWwxLjY0Ni0xLjY0Ni43MDcuNzA3LTIuODUzIDIuODU0LTIuODU0LTIuODU0LjcwNy0uNzA3IDEuNjQ3IDEuNjQ2di03LjU4NWwtMS42NDcgMS42NDYtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hdXRvLWxheW91dC1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGg1djEyaC01em0xIDFoM3YxMGgtM3ptNi0xaDV2MTJoLTV6bTEgMWgzdjEwaC0zeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnY1SDEwem0xIDFoMTB2M0gxMXptLTEgNmgxMnY1SDEwem0xIDFoMTB2M0gxMXonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1iYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy43MDcgMTZsNC42NDYtNC42NDYtLjcwNy0uNzA3TDEyLjI5MyAxNmw1LjM1MyA1LjM1NC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ibGVuZC1lbXB0eSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYuNjk1IDExLjcybC0uNjkzLS43MThMMTYgMTFsLS4wMDEuMDAyLS42OTQuNzE4QzEzLjEwMiAxNC4wMTIgMTIgMTUuMjk0IDEyIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAwMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMDUuNjU2IDBBNC4xOTkgNC4xOTkgMCAwMDIwIDE2Ljg1MmMwLTEuNTU4LTEuMTAyLTIuODQtMy4zMDUtNS4xMzJ6bS0uNjk1LjcyYy0uOTc3IDEuMDE3LTEuNjkzIDEuNzktMi4xOTUgMi40NzEtLjYuODE0LS44MDUgMS4zOC0uODA1IDEuOTR2LjAwM2EzLjIgMy4yIDAgMDAuODkgMi4yMzkgMi45MDYgMi45MDYgMCAwMDQuMjIgMCAzLjIgMy4yIDAgMDAuODktMi4yMzl2LS4wMDJjMC0uNTYtLjIwNS0xLjEyNy0uODA1LTEuOTQtLjUwMi0uNjgxLTEuMjE5LTEuNDU1LTIuMTk1LTIuNDcyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi4wMDIgMTEuMDAybC42OTMuNzE4QzE4Ljg5OCAxNC4wMTIgMjAgMTUuMjk0IDIwIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAxLTEuMTcyIDIuOTM2IDMuOTA2IDMuOTA2IDAgMDEtNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAxMTIgMTYuODUyYzAtMS41NTggMS4xMDItMi44NCAzLjMwNS01LjEzMmwuNjk0LS43MTl6bS0yLjE5NyAzLjkxYy41MDItLjY4MSAxLjIxOS0xLjQ1NSAyLjE5NS0yLjQ3Mi45NzYgMS4wMTcgMS42OTMgMS43OSAyLjE5NSAyLjQ3MS42LjgxNC44MDUgMS4zOC44MDUgMS45NHYuMDAzYzAgLjA0OSAwIC4wOTgtLjAwMy4xNDZoLTUuOTk0YTMuMzcgMy4zNyAwIDAxLS4wMDMtLjE0NnYtLjAwMmMwLS41Ni4yMDUtMS4xMjcuODA1LTEuOTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYnJlYWsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgb3BhY2l0eT0nLjknJTNFJTNDcGF0aCBkPSdNMTMgOXYzaDFWOXpNMjIuMTAzIDkuODk2YTIuOTc1IDIuOTc1IDAgMDAtNC4yMDcgMGwtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTEuOTc1IDEuOTc1IDAgMDEyLjc5MyAyLjc5M2wtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTIuOTc1IDIuOTc1IDAgMDAwLTQuMjA3ek05Ljg5NiAyMi4xMDRhMi45NzUgMi45NzUgMCAwMTAtNC4yMDhsMi43NS0yLjc1LjcwNy43MDctMi43NSAyLjc1YTEuOTc1IDEuOTc1IDAgMDAyLjc5MyAyLjc5M2wyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMi45NzUgMi45NzUgMCAwMS00LjIwNyAwek0yMyAxOWgtM3YtMWgzek0xOSAyMHYzaC0xdi0zek0xMiAxM0g5djFoM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE4bDMtNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzIDE2bDQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE5IDE2bC00LTN2NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNGwzIDRoLTZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNoZWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS4yMDcgMTMuNzA3TDE1IDE5LjkxNGwtMy43MDctMy43MDcgMS40MTQtMS40MTRMMTUgMTcuMDg2bDQuNzkzLTQuNzkzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNsb3NlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTUuMjkzbDQuNjQ2LTQuNjQ2LjcwOC43MDdMMTYuNzA3IDE2bDQuNjQ3IDQuNjQ3LS43MDcuNzA3TDE2IDE2LjcwN2wtNC42NDYgNC42NDctLjcwNy0uNzA3TDE1LjI5MyAxNmwtNC42NDYtNC42NDYuNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvbXBvbmVudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIuMDYzIDEwLjkzOEwxNiAxNC44NzRsMy45MzgtMy45MzhMMTYgN3ptNi40NiAwTDE2IDEzLjQ2bC0yLjUyMy0yLjUyNEwxNiA4LjQxNXptLTYuNDYgMTAuMTI0TDE2IDI1bDMuOTM4LTMuOTM4TDE2IDE3LjEyNXptNi40NiAwTDE2IDIzLjU4N2wtMi41MjMtMi41MjNMMTYgMTguNTM4ek03IDE2bDMuOTM3LTMuOTM4TDE0Ljg3NSAxNmwtMy45MzggMy45Mzh6bTMuOTM3IDIuNTIzTDEzLjQ2MSAxNmwtMi41MjQtMi41MjNMOC40MTUgMTZ6TTE3LjEyNSAxNmwzLjkzOCAzLjkzOEwyNSAxNmwtMy45MzgtMy45Mzh6bTYuNDYgMGwtMi41MjMgMi41MjNMMTguNTQgMTZsMi41MjMtMi41MjN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29ybmVyLXJhZGl1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEgMTNoLTRhNCA0IDAgMDAtNCA0djRoLTF2LTRhNSA1IDAgMDE1LTVoNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAxMWgzdjFoLTJ2MmgtMXptNyAwaDN2M2gtMXYtMmgtMnptLTYgOXYtMmgtMXYzaDN2LTF6bTktMnYzaC0zdi0xaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZGlzdHJpYnV0ZS1ob3Jpem9udGFsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMSAyMi41di0xM2gtMXYxM3pNMjIgOS41djEzaC0xdi0xM3pNMTcgMTIuNXY3aC0ydi03eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLXZlcnRpY2FsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005LjUgMTBoMTN2MWgtMTN6TTEyLjUgMTVoN3YyaC03ek0yMi41IDIxaC0xM3YxaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kcmFmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgOC41aDcuNzA3TDIyIDEyLjc5M1YyMy41SDEwem0xIDF2MTNoMTB2LTloLTR2LTR6bTcgLjcwN2wyLjI5MyAyLjI5M0gxOHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1lZmZlY3RzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYuNSA4LjVoLTF2M2gxek0xMS4wNSAxMC4zNDNsLS43MDcuNzA3IDIuMTIxIDIuMTIyLjcwOC0uNzA4ek0yMS42NTcgMTEuMDVsLS43MDctLjcwNy0yLjEyMSAyLjEyMS43MDcuNzA4ek04LjUgMTUuNXYxaDN2LTF6TTIwLjUgMTUuNXYxaDN2LTF6TTEzLjE3MiAxOS41MzVsLS43MDgtLjcwNy0yLjEyIDIuMTIyLjcwNi43MDd6TTE5LjUzNSAxOC44MjhsLS43MDcuNzA3IDIuMTIyIDIuMTIyLjcwNy0uNzA3ek0xNi41IDIwLjVoLTF2M2gxeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC40OTggMTUuOTk4YTIuNSAyLjUgMCAxMS01IDAgMi41IDIuNSAwIDAxNSAwem0tMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVsbGlwc2VzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS41IDE2YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwem02IDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTQuNSAxLjVhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1leWVkcm9wcGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIuNDQ3IDkuNmMtLjgtLjgtMi0uOC0yLjggMGwtMi44IDIuOC0uOC0uN2MtLjQtLjQtMS0uNC0xLjQgMHMtLjQgMSAwIDEuNGwuNy43LTUuOCA1LjhjLS40LjQtMSAxLjkgMCAyLjlzMi41LjQgMi45IDBsNS44LTUuOC43LjdjLjQuNCAxIC40IDEuNCAwcy40LTEgMC0xLjRsLS43LS43IDIuOC0yLjhjLjgtLjkuOC0yLjEgMC0yLjl6bS0xMC45IDExLjloLTF2LTFsNS44LTUuOCAxIDFjLS4xIDAtNS44IDUuOC01LjggNS44eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1mb3J3YXJkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNy45NCAxNmwtNC42NDctNC42NDYuNzA3LS43MDdMMTkuMzU0IDE2IDE0IDIxLjM1NGwtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZyYW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAyNHYtM0g4di0xaDN2LThIOHYtMWgzVjhoMXYzaDhWOGgxdjNoM3YxaC0zdjhoM3YxaC0zdjNoLTF2LTNoLTh2M3ptOS00di04aC04djh6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZ3JvdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNy40IDloLTIuOHYxaDIuOHpNMjAuOSAyMkgyMnYtMS4xaDFWMjNoLTIuMXpNMTAgMTQuNnYyLjhIOXYtMi44ek0yMiAxMS4xVjEwaC0xLjFWOUgyM3YyLjF6TTIyIDE0LjZ2Mi44aDF2LTIuOHpNMTAgMTEuMVYxMGgxLjFWOUg5djIuMXpNOSAyMC45aDFWMjJoMS4xdjFIOXpNMTcuNCAyMmgtMi44djFoMi44eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oaWRkZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjUwOSAxNS44MDFBOC4wMzMgOC4wMzMgMCAwMDIyLjkyOCAxNGgtMS4xODRBNi45OTIgNi45OTIgMCAwMTE2IDE3YTYuOTkyIDYuOTkyIDAgMDEtNS43NDUtM0g5LjA3YTguMDMzIDguMDMzIDAgMDAxLjQyMSAxLjgwMWwtMS41OTUgMS41OTUuNzA4LjcwNyAxLjY1Ny0xLjY1N2MuNzEuNTIzIDEuNTExLjkzMiAyLjM3NCAxLjE5OWwtLjYxNyAyLjIyMS45NjQuMjY4LjYyNi0yLjI1NWE4LjA1MSA4LjA1MSAwIDAwMi43ODQgMGwuNjI2IDIuMjU1Ljk2NC0uMjY4LS42MTctMi4yMjFhNy45NzEgNy45NzEgMCAwMDIuMzc0LTEuMmwxLjY1OCAxLjY1OC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ob3Jpem9udGFsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDl2MTRoMVY5em0xMyAwdjE0aDFWOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTl2LTZoNnY2em0tMS03aDh2OGgtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oeXBlcmxpbmsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMC44MjQgMTQuNDkybC0xLjY1NyAxLjY1Ny44MjguODI5IDEuNjU4LTEuNjU3YTMuNTE3IDMuNTE3IDAgMDAtNC45NzMtNC45NzNsLTEuNjU3IDEuNjU4LjgyOS44MjggMS42NTctMS42NTdhMi4zNDUgMi4zNDUgMCAwMTMuMzE1IDMuMzE1em0tNC45NzQgNC45NzJsLjgyOS44MjktMS42NTggMS42NTdhMy41MTYgMy41MTYgMCAxMS00Ljk3Mi00Ljk3MmwxLjY1OS0xLjY1OC44MjguODI5LTEuNjU2IDEuNjU3YTIuMzQzIDIuMzQzIDAgMTAzLjMxNSAzLjMxNWwxLjY1Ny0xLjY1N3ptMi4wNzItNi4yMTZsLTQuOTcyIDQuOTczLjgyOC44MjkgNC45NzMtNC45NzN6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWltYWdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMiAxMEgxMHY3Ljc5M2wzLjA4My0zLjA4MyA3LjI5IDcuMjlIMjJ6TTEwIDIydi0yLjc5M2wzLjA4My0zLjA4M0wxOC45NiAyMnptMC0xM2ExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xem05LjY2NyA0LjY2N2ExLjMzMyAxLjMzMyAwIDExLTIuNjY3IDAgMS4zMzMgMS4zMzMgMCAwMTIuNjY3IDB6bTEgMGEyLjMzMyAyLjMzMyAwIDExLTQuNjY3IDAgMi4zMzMgMi4zMzMgMCAwMTQuNjY3IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW5zdGFuY2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDdsOSA5LTkgOS05LTl6bS03LjU4NiA5TDE2IDIzLjU4NiAyMy41ODYgMTYgMTYgOC40MTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0ta2V5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNCAyMC4xNGEzLjAxNCAzLjAxNCAwIDAwLjMzMS0zLjg2OGwyLjA0Ny0yLjA0NyAxLjc2NyAxLjc2N2EuNS41IDAgMTAuNzA3LS43MDdsLTEuNzY3LTEuNzY3IDEuMjkzLTEuMjkzIDEuNzg0IDEuNzg0YS41LjUgMCAxMC43MDctLjcwN2wtMS43ODQtMS43ODQuNzYyLS43NjFhLjUuNSAwIDAwLS43MDctLjcwOGwtNS41MTMgNS41MTNhMy4wMTQgMy4wMTQgMCAxMC4zNzMgNC41Nzh6bS0uNzEyLS43MTJhMi4wMDYgMi4wMDYgMCAxMC0yLjgzNy0yLjgzNyAyLjAwNiAyLjAwNiAwIDAwMi44MzcgMi44Mzd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWFsaWduLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNSAxMHYxMGgtMlYxMHptOCAxMnYxaC0xM3YtMXptLTMtMnYtNmgtMnY2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWhvcml6b250YWwtY2VudGVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2LjUgOS41aC0xdjNoLTV2Mmg1djNoLTN2MmgzdjNoMXYtM2gzdi0yaC0zdi0zaDV2LTJoLTV6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41SDl2LTEzaDF6TTIyIDE0LjVIMTJ2LTJoMTB6TTEyIDE5LjVoNnYtMmgtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMiAyMi41aDF2LTEzaC0xek0xMCAxNC41aDEwdi0ySDEwek0yMCAxOS41aC02di0yaDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXRvcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0LjUgMjJWMTJoLTJ2MTB6TTIyLjUgMTBWOWgtMTN2MXpNMTkuNSAxMnY2aC0ydi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi12ZXJ0aWNhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuNSAxNS41di01aDJ2NWgzdi0zaDJ2M2gzdjFoLTN2M2gtMnYtM2gtM3Y1aC0ydi01aC0zdi0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1jb2x1bW5zIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2MTRIOXpNMTQuNSA5aDN2MTRoLTN6TTIwIDloM3YxNGgtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtcm93cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYzSDl6TTkgMTQuNWgxNHYzSDl6TTkgMjBoMTR2M0g5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC11bmlmb3JtIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2M0g5ek0yMCA5aDN2M2gtM3pNMTQuNSA5aDN2M2gtM3pNOSAxNC41aDN2M0g5ek0yMCAxNC41aDN2M2gtM3pNMTQuNSAxNC41aDN2M2gtM3pNOSAyMGgzdjNIOXpNMjAgMjBoM3YzaC0zek0xNC41IDIwaDN2M2gtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlicmFyeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMzczIDIyaDEuMjU4Yy4yOC0uMzIuNjE2LS41OTcuOTk1LS44MTkgMS40NzgtLjg2MiA0LjAwNS0uOTA5IDUuMzg2LjEwOUgyNC41di05LjJzLS43OTctMi4yNS00LjQyLTIuMjVjLTEuODc1IDAtMi45MDIuNjAyLTMuNDU2IDEuMTg0YTIuNTY4IDIuNTY4IDAgMDAtLjYuOTc2aC0uMDQ4YTIuNTY5IDIuNTY5IDAgMDAtLjYtLjk3NmMtLjU1NC0uNTgyLTEuNTgxLTEuMTg0LTMuNDU2LTEuMTg0LTMuNjIzIDAtNC40MiAyLjI1LTQuNDIgMi4yNXY5LjE5aDEuNDg4YzEuMzgyLTEuMDE5IDMuOTEtLjk3IDUuMzg4LS4xMDUuMzguMjIzLjcxNy41MDMuOTk3LjgyNXptMS4xMjctOS43MTF2OC40NTdjLjE5NS0uMTU3LjQwMy0uMy42MjItLjQyOC45MjctLjU0MSAyLjExNS0uNzk2IDMuMjQxLS43ODcgMS4wMDYuMDA4IDIuMDgxLjIyNyAyLjk1Mi43NTloLjE4NXYtNy45NzNhMi40MTQgMi40MTQgMCAwMC0uNTA1LS41OTVjLS40Ni0uMzk3LTEuMzMtLjg4Mi0yLjkxNS0uODgyLTEuNTg2IDAtMi4zNC40ODMtMi42OTUuODM1YTEuNzQ5IDEuNzQ5IDAgMDAtLjM1My40OSAxLjA3NiAxLjA3NiAwIDAwLS4wNTIuMTMxbC0uMDA1LjAxNy4wMDEtLjAwNi4wMDItLjAwOHYtLjAwNWwuMDAxLS4wMDJ2LS4wMDJsLS4wMDUtLjAwMXptLTEgMGgtLjQ3NGwtLjAwNi4wMDF2LjAwMmwuMDAxLjAwMi4wMDEuMDA1LjAwMi4wMDguMDAxLjAwNi0uMDA1LS4wMTdhMS4wNzYgMS4wNzYgMCAwMC0uMDUzLS4xMzEgMS43NDkgMS43NDkgMCAwMC0uMzUzLS40OWMtLjM1NC0uMzUxLTEuMTA4LS44MzUtMi42OTQtLjgzNS0xLjU4NSAwLTIuNDU1LjQ4NS0yLjkxNi44ODJhMi40MTEgMi40MTEgMCAwMC0uNTA0LjU5NXY3Ljk2M2guMTg1Yy44NzItLjUzMiAxLjk0OC0uNzUyIDIuOTU0LS43NTkgMS4xMjgtLjAwOCAyLjMxNi4yNDkgMy4yNDMuNzkyLjIxNy4xMjcuNDI0LjI3LjYxOC40MjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGluay1icm9rZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOCAxNHYtMmEyIDIgMCAxMC00IDB2MmgtMXYtMmEzIDMgMCAxMTYgMHYyek0xOSAxOGgtMXYyYTIgMiAwIDExLTQgMHYtMmgtMXYyYTMgMyAwIDEwNiAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWNvbm5lY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDEwYTIgMiAwIDAxMiAydjJoMXYtMmEzIDMgMCAxMC02IDB2Mmgxdi0yYTIgMiAwIDAxMi0yek0xOCAxOGgxdjJhMyAzIDAgMTEtNiAwdi0yaDF2MmEyIDIgMCAxMDQgMHonLyUzRSUzQ3BhdGggZD0nTTE1LjUgMTN2Nmgxdi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LWRldGFpbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTIgMTBoLTJ2MWgyek0xMiAyMGgtMnYxaDJ6TTEwIDE1aDJ2MWgtMnpNMjIgMTBoLTh2MWg4ek0xNCAyMGg4djFoLTh6TTIyIDE1aC04djFoOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdC10aWxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNCAxMWgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6bS0zIDhoLTN2M2gzem0tNC0xdjVoNXYtNXptMTEgMWgtM3YzaDN6bS00LTF2NWg1di01eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgZmlsbC1vcGFjaXR5PScuOCclM0UlM0NwYXRoIGQ9J00yMyAxMEg5djFoMTR6TTkgMTUuNWgxNHYxSDl6TTkgMjFoMTR2MUg5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE4IDE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjVIMTd2LTIuNWEyLjUgMi41IDAgMDE1IDBWMTRoLTF2LTEuNWExLjUgMS41IDAgMDAtMyAweicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy41IDE1di0xLjVhMi41IDIuNSAwIDAxNSAwVjE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjV6bTQtMS41VjE1aC0zdi0xLjVhMS41IDEuNSAwIDAxMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLW1pbnVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjEuNSAxNi41aC0xMXYtMWgxMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGxheSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTAuMDk4TDIyLjQ0MyAxNiAxMyAyMS45MDJ6bTEgMS44MDR2OC4xOTZMMjAuNTU3IDE2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXBsdXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNS41IDE1LjV2LTVoMXY1aDV2MWgtNXY1aC0xdi01aC01di0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yYW5kb20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjExOCAxMWEyLjUgMi41IDAgMDAtMS4zMzUuMzg2TDExLjIyOCAxM0gxOC41djFoLTguNDk3YS41MTIuNTEyIDAgMDAtLjAwMy4wNTFWMjAuNWMwIC4yNzguMjIzLjUuNDk3LjVoNy42MjhhLjQ5OC40OTggMCAwMC4zMjgtLjEyM2wzLjIwNi0yLjgwNWExIDEgMCAwMC4zNDEtLjc1M1YxMS41YS41LjUgMCAwMC0uNS0uNXptLTEuODY5LS40NmEzLjUgMy41IDAgMDExLjg3LS41NEgyMS41YTEuNSAxLjUgMCAwMTEuNSAxLjV2NS44MmEyIDIgMCAwMS0uNjgzIDEuNTA0bC0zLjIwNSAyLjgwNWMtLjI3NC4yNC0uNjI0LjM3MS0uOTg3LjM3MWgtNy42MjdDOS42NjggMjIgOSAyMS4zMjcgOSAyMC41di02LjQ0OWExLjUgMS41IDAgMDEuNjk5LTEuMjY4eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMyAxNmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTE3IDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTlhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xMyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6Jy8lM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTIyLjQwNyAxMC43MWEuNS41IDAgMDEtLjExNi42OTdsLTMuNSAyLjVhLjUuNSAwIDAxLS41ODItLjgxNGwzLjUtMi41YS41LjUgMCAwMS42OTguMTE2eicvJTNFJTNDcGF0aCBkPSdNMTggMjF2LThoMXY4eicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlY2VudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE1IDEydjVoNXYtMWgtNHYtNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzaXplLXRvLWZpdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTguNjQ2IDkuMzU0TDEyLjI5MyAxM0gxMHYxaDR2LTRoLTF2Mi4yOTNMOS4zNTQgOC42NDZ6TTE5LjcwNyAxM2wzLjY0Ny0zLjY0Ni0uNzA3LS43MDhMMTkgMTIuMjkzVjEwaC0xdjRoNHYtMXpNMTkuNzA3IDE5bDMuNjQ3IDMuNjQ2LS43MDcuNzA4TDE5IDE5LjcwN1YyMmgtMXYtNGg0djF6TTEyLjI5MyAxOWwtMy42NDcgMy42NDYuNzA4LjcwOEwxMyAxOS43MDdWMjJoMXYtNGgtNHYxeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNvbHZlLWZpbGxlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMjRhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy45MTEtOS42MzVsLS44MjItLjczLTMuNjEzIDQuMDY0LTIuNTg3LTIuNTg4LS43NzguNzc4IDMuNDEzIDMuNDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOS45MTEgMTQuMzY1bC0uODIyLS43My0zLjYxMyA0LjA2My0yLjU4Ny0yLjU4Ny0uNzc4Ljc3OCAzLjQxMyAzLjQxMnonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmV2ZXJzZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuODU0IDguNjQ2TDE4LjIwNyAxMWwtMi4zNTMgMi4zNTQtLjcwOC0uNzA4IDEuMTQ3LTEuMTQ2SDE0Yy0uNTAzIDAtMS4yNy4xNTUtMS44OTUuNjA2LS42LjQzMi0xLjEwNSAxLjE1Ny0xLjEwNSAyLjM5NHY3LjI1aC0xVjE0LjVjMC0xLjU2My42NjItMi41ODggMS41Mi0zLjIwNi44MzMtLjYgMS44MTctLjc5NCAyLjQ4LS43OTRoMi4yOTNsLTEuMTQ3LTEuMTQ2ek0yMiAxMHY3LjI1YzAgMS41NjMtLjY2MiAyLjU4OC0xLjUyIDMuMjA2LS44MzMuNi0xLjgxNy43OTQtMi40OC43OTRoLTIuMjkzbDEuMTQ3IDEuMTQ2LS43MDguNzA4LTIuMzUzLTIuMzU0IDIuMzUzLTIuMzU0LjcwOC43MDgtMS4xNDcgMS4xNDZIMThjLjUwMyAwIDEuMjctLjE1NSAxLjg5NS0uNjA2LjYtLjQzMiAxLjEwNS0xLjE1NyAxLjEwNS0yLjM5NFYxMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZWFyY2gtbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4Ljg3NCAxOS41ODFhNiA2IDAgMTEuNzA3LS43MDdsNC4yNzMgNC4yNzItLjcwOC43MDh6TTIwIDE1YTUgNSAwIDExLTEwIDAgNSA1IDAgMDExMCAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguMzk3IDE4LjYwNWE0LjU1MiA0LjU1MiAwIDExLjcwNy0uNzA3bDMuMjUgMy4yNDktLjcwOC43MDd6bS43MDYtMy41NTNhMy41NTIgMy41NTIgMCAxMS03LjEwMyAwIDMuNTUyIDMuNTUyIDAgMDE3LjEwMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNldHRpbmdzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTE2Ljk1NCA5LjkyOGwtLjEzOS0uMzMxQzE2LjYzNSA5LjE2NSAxNi4zMDEgOSAxNiA5cy0uNjM1LjE2NS0uODE1LjU5N2wtLjEzOS4zMzFjLS41NiAxLjM0My0xLjk5MiAyLjEzLTMuNDI1IDEuNzJsLS41LS4xNDRjLS4zMDktLjA4OC0uNjA2LjAyNS0uODE1LjMyN2ExLjA1IDEuMDUgMCAwMC0uMDQ5IDEuMTIzYy43NDMgMS4zMjMuNDAyIDMuMDY4LS44NiAzLjk1LS4zMTguMjIyLS40NTYuNjE0LS4zNzUgMS4wMjQuMDgxLjQwOS4zNDIuNjY4LjY3My43MjNsLjE5NS4wMzNjMS41MjUuMjUzIDIuNTEgMS42ODcgMi40MjMgMy4xOC0uMDMuNTAzLjIyLjg2MS41MiAxLjAyOC4yODguMTYxLjYyMy4xNTUuOTIxLS4xMDhsLjM3My0uMzNhMi44IDIuOCAwIDAxMy43NDYgMGwuMzczLjMzYy4yOTguMjY0LjYzMy4yNy45MjIuMTA4LjMtLjE2Ny41NDktLjUyNS41Mi0xLjAyOC0uMDg4LTEuNDkzLjg5Ny0yLjkyNyAyLjQyMy0zLjE4bC4xOTQtLjAzM2MuMzMtLjA1NS41OTItLjMxNC42NzMtLjcyMy4wODEtLjQxLS4wNTctLjgwMi0uMzc1LTEuMDI0LTEuMjYyLS44ODItMS42MDMtMi42MjctLjg2LTMuOTVhMS4wNSAxLjA1IDAgMDAtLjA1LTEuMTIzYy0uMjA4LS4zMDItLjUwNS0uNDE1LS44MTUtLjMyN2wtLjQ5OS4xNDNjLTEuNDMzLjQxLTIuODY1LS4zNzYtMy40MjUtMS43MTl6bS43ODQtLjcxN2MtLjY3NC0xLjYxNS0yLjgwMi0xLjYxNS0zLjQ3NiAwbC0uMTM4LjMzMmMtLjM4My45MTctMS4zMjYgMS40MDEtMi4yMjggMS4xNDNsLS40OTktLjE0M2MtMS41NzUtLjQ1LTIuODU1IDEuMzk4LTIuMDEyIDIuOS41MDUuOS4yNTcgMi4wNy0uNTYgMi42NC0xLjM5Mi45NzMtLjkzMyAzLjI4Mi43MDYgMy41NTVsLjE5NS4wMzJjLjk2LjE2IDEuNjUgMS4wOSAxLjU4OCAyLjEzNS0uMTA0IDEuNzg4IDEuODIgMi44NjQgMy4xMDMgMS43MjdsLjM3My0uMzNhMS44IDEuOCAwIDAxMi40MiAwbC4zNzMuMzNjMS4yODQgMS4xMzcgMy4yMDcuMDYxIDMuMTAzLTEuNzI3LS4wNjEtMS4wNDYuNjI4LTEuOTc1IDEuNTg5LTIuMTM1bC4xOTQtLjAzMmMxLjYzOS0uMjczIDIuMDk4LTIuNTgyLjcwNy0zLjU1NC0uODE4LS41NzItMS4wNjYtMS43NDItLjU2MS0yLjY0Ljg0My0xLjUwMy0uNDM3LTMuMzUyLTIuMDEyLTIuOTAxbC0uNS4xNDNjLS45LjI1OC0xLjg0NC0uMjI2LTIuMjI2LTEuMTQzeicvJTNFJTNDcGF0aCBkPSdNMTYgMTguNWEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHptMCAxYTMgMyAwIDEwMC02IDMgMyAwIDAwMCA2eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zaGFyZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAgOS41YTMuNSAzLjUgMCAwMC0xLjM4MyA2LjcxNkE0LjUxMyA0LjUxMyAwIDAwMTYgMTguNDM2YTQuNTEzIDQuNTEzIDAgMDAtMi42MTgtMi4yMiAzLjUwMSAzLjUwMSAwIDEwLTIuNzY0IDBBNC41MDIgNC41MDIgMCAwMDcuNSAyMC41VjIyaDE3di0xLjVjMC0yLjAwMy0xLjMwOS0zLjctMy4xMTgtNC4yODRBMy41MDEgMy41MDEgMCAwMDIwIDkuNXpNMTcuNSAxM2EyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHptLTEgOHYtLjVhMy41IDMuNSAwIDExNyAwdi41em0tMS0uNXYuNWgtN3YtLjVhMy41IDMuNSAwIDExNyAwem0tNi03LjVhMi41IDIuNSAwIDExNSAwIDIuNSAyLjUgMCAwMS01IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc21pbGV5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMjBhNC4wMDIgNC4wMDIgMCAwMS0zLjg3NC0zaDEuMDQ1YTMuMDAxIDMuMDAxIDAgMDA1LjY1OCAwaDEuMDQ1QTQuMDAyIDQuMDAyIDAgMDExNiAyMHpNMTkuNSAxNC4xMjVhLjg3NS44NzUgMCAxMS0xLjc1IDAgLjg3NS44NzUgMCAwMTEuNzUgMHpNMTMuMTI1IDE1YS44NzUuODc1IDAgMTAwLTEuNzUuODc1Ljg3NSAwIDAwMCAxLjc1eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LWFscGhhLWFzYyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMC44OTcgOUw5IDE0aDEuMDdsLjM3OS0xaDIuMTMzbC4zMzggMWgxLjA1NmwtMS42OS01em0xLjM0NyAzbC0uNjY3LTEuOTczTDEwLjgyOCAxMnpNMTIuNTUzIDE5SDkuNXYtMUgxNHYuOTc5TDEwLjkzMiAyMkgxNHYxSDkuNXYtLjk5M3pNMjAuNSA4LjI5M2wzLjM1NCAzLjM1My0uNzA4LjcwOEwyMSAxMC4yMDdWMjNoLTFWMTAuMjA3bC0yLjE0NiAyLjE0Ny0uNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtZHNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMCAyMS43OTNWOWgxdjEyLjc5M2wyLjE0Ni0yLjE0Ny43MDguNzA4LTMuMzU0IDMuMzUzLTMuMzU0LTMuMzUzLjcwOC0uNzA4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LXRvcC1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIwLjQ1IDEySDEwdi0xaDEwLjQ1Yy45NyAwIDEuMzcyIDEuMjQ0LjU4NCAxLjgxMkwxMS4wNSAyMGg5LjI0M2wtMS42NDctMS42NDYuNzA4LS43MDggMi44NTMgMi44NTQtMi44NTMgMi44NTQtLjcwOC0uNzA4TDIwLjI5MyAyMUgxMS4wNWMtLjk3IDAtMS4zNzItMS4yNDQtLjU4NC0xLjgxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIgMTFoLTJ2MTBoMnYxaC0zVjEwaDN6bS0xMC0xdjEySDl2LTFoMlYxMUg5di0xem00IDNoLTF2NmgxeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNjUgOC41M2EuNS41IDAgMDEtLjQwNC41OEE3IDcgMCAxMDIzIDE2YS41LjUgMCAwMTEgMCA4IDggMCAxMS05LjQxNi03Ljg3NC41LjUgMCAwMS41OC40MDR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vZmYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4IDE0LjAwNEwxNiA4bC0yIDYuMDA0SDhMMTIuOTYgMThsLTEuOTA0IDZMMTYgMjBsNC45NDQgNC0xLjkwNC02TDI0IDE0em0zLjE2NS45OThsLTMuODg2LjAwMkwxNiAxMS4xNjRsLTEuMjggMy44NGgtMy44ODVsMy4yODUgMi42NDYtMS4xMDMgMy40NzdMMTYgMTguNzE0bDIuOTgzIDIuNDEzLTEuMTAzLTMuNDc2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0YXItb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiA4bDIgNi4wMDRMMjQgMTRsLTQuOTYgNCAxLjkwNCA2TDE2IDIwbC00Ljk0NCA0IDEuOTA0LTZMOCAxNC4wMDRoNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Ryb2tlLXdlaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoMTJ2MUgxMHptMCA0aDEydjJIMTB6bTEyIDVIMTB2M2gxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHlsZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMS41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xNy41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xOSAyMC41YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6TTExLjUgMTlhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN3YXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMyAxMy4xODhsLTEuMTc1IDEuNDY4YTUuNSA1LjUgMCAwMC0xMC4wMDMtMi4yMTlsLjgzLjU1N2E0LjUgNC41IDAgMDE4LjIxNiAyLjA1N2wtMi4yLTEuNDY3LS41NTUuODMyIDMuMzgxIDIuMjU0IDIuMjg3LTIuODU4ek05IDE3LjE4OGwuNzguNjI0IDEuMTc2LTEuNDY4LjAyNi4xNTZhNS41IDUuNSAwIDAwOS45NzYgMi4wNjV2LS4wMDJsLS44My0uNTU3LS4wMDEuMDAxYTQuNSA0LjUgMCAwMS04LjIxNC0yLjA1OGwyLjIgMS40NjcuNTU1LS44MzItMy4zODItMi4yNTR6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRoZW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMGgtM3YxMmgzem0tMy0xYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xVjEwYTEgMSAwIDAwLTEtMXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTAuNzUgMjAuNWEuNzUuNzUgMCAxMTEuNSAwIC43NS43NSAwIDAxLTEuNSAwek0yMiAxOGExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMWgtN3YtMWg3di0zaC03di0xek0xOC4zODUgMTdsMi43NTctMi43NTdhMSAxIDAgMDAwLTEuNDE1bC0yLjEyMS0yLjEyYTEgMSAwIDAwLTEuNDE0IDBMMTUgMTMuMzEzdjEuNDE0bDMuMzE0LTMuMzE0IDIuMTIxIDIuMTIyTDE2Ljk3MSAxN3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1ncmlkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMTBoMnYyaC0yek0yMCAxMGgydjJoLTJ6TTEyIDE1aC0ydjJoMnpNMjAgMTVoMnYyaC0yek0xMiAyMGgtMnYyaDJ6TTIwIDIwaDJ2MmgtMnpNMTcgMTBoLTJ2Mmgyek0xNSAxNWgydjJoLTJ6TTE3IDIwaC0ydjJoMnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41di0xM2gydjEzek0xNSAyMi41di0xM2gydjEzek0yMCA5LjV2MTNoMnYtMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtbGlzdC12ZXJ0aWNhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YyaC0xM3pNOS41IDE1aDEzdjJoLTEzek0yMi41IDIwaC0xM3YyaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aW1lciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5IDhoLTZWN2g2ek0xNi41IDE3di01aC0xdjVhLjUuNSAwIDAwMSAweicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMi43MTUgMTIuNjVsMS41MjctMS41MjlMMjIuMTIyIDlsLTEuNDgzIDEuNDgyYTggOCAwIDEwMi4wNzUgMi4xNjd6TTIzIDE3YTcgNyAwIDExLTIuMzg0LTUuMjYzbC42NDcuNjQ3QTYuOTc0IDYuOTc0IDAgMDEyMyAxN3ptLTEuMDA4LTUuM2wuMTMuMTI4LjcwNi0uNzA3LS43MDctLjcwNy0uNzAxLjcwMWMuMi4xODUuMzkxLjM4LjU3Mi41ODV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdHJhc2gge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNCAxOC41di00aDF2NHpNMTcgMTguNXYtNGgxdjR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE5IDEwLjVhMiAyIDAgMDAtMi0yaC0yYTIgMiAwIDAwLTIgMmgtM3YxaDF2MTBhMiAyIDAgMDAyIDJoNmEyIDIgMCAwMDItMnYtMTBoMXYtMXptLTQtMWExIDEgMCAwMC0xIDFoNGExIDEgMCAwMC0xLTF6bTUgMmgtOHYxMGExIDEgMCAwMDEgMWg2YTEgMSAwIDAwMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZlcnRpY2FsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloMTR2MUg5em0wIDEzaDE0djFIOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTNoLTZ2Nmg2em0tNy0xdjhoOHYtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS12aXNpYmxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMThhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDEyYTcuNDk5IDcuNDk5IDAgMDE2LjYzNSA0QTcuNDk5IDcuNDk5IDAgMDExNiAyMGE3LjQ5OSA3LjQ5OSAwIDAxLTYuNjM1LTRBNy40OTkgNy40OTkgMCAwMTE2IDEyem0wIDdhNi40OTUgNi40OTUgMCAwMS01LjQ3OC0zQTYuNDk1IDYuNDk1IDAgMDExNiAxM2MyLjMgMCA0LjMyMiAxLjE5NCA1LjQ3OCAzQTYuNDk1IDYuNDk1IDAgMDExNiAxOXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nLWxhcmdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA2bDEwIDE4SDZ6bS0xIDExdi00aDJ2NHptMCAydjJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA5bDggMTRIOHptLTEgOC41VjE0aDJ2My41em0wIDEuNXYyaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pY29uLWJ1dHRvbiAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b246aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0taG92ZXItZmlsbCk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjphY3RpdmUsIC5pY29uLWJ1dHRvbjpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6YWN0aXZlLCAuaWNvbi1idXR0b24tLXNlbGVjdGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQgKiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaW5wdXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMzBweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6aG92ZXIsIC5pbnB1dF9fZmllbGQ6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6c2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6YWN0aXZlLCAuaW5wdXRfX2ZpZWxkOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmlucHV0LS13aXRoLWljb24gLmlucHV0X19maWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcblxcbi5pbnB1dCAuaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDBweDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB6LWluZGV4OiAxO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ubGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IHRvcDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgMDtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIC5pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwX19tc2cge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4ucmFkaW8ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJhZGlvX19idXR0b24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiB2aWV3Qm94PVxcXCIwIDAgNiA2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiJTNFJTNDcmVjdCB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiByeD1cXFwiM1xcXCIgZmlsbD1cXFwiYmxhY2tcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC44XFxcIi8lM0UlM0Mvc3ZnJTNFJTBBJyk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IDJweDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246ZGlzYWJsZWQgKyAucmFkaW9fX2xhYmVsIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZDpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrKTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUtc21hbGwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAycHggMTBweCAwIC04cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5zZWN0aW9uLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIGNhbGModmFyKC0tc2l6ZS14eHNtYWxsKSAvIDIpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuc2VsZWN0LnNlbGVjdC1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uICoge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQsIC5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMS4wO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZCAuc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMzBweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLXRvcDogLTFweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIzMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDMwJTIwMzAlMjIlMjB3aWR0aCUzRCUyMjMwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMTUlMjAxNi43MDcxLTMtMyUyMC43MDcxLS43MDcxJTIwMi42NDY1JTIwMi42NDY0JTIwMi42NDY0LTIuNjQ2NC43MDcxLjcwNzEtMyUyMDMtLjM1MzUuMzUzNnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudSAuaWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taHVkKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1odWQpO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgbWFyZ2luOiAwO1xcbiAgei1pbmRleDogMTAwMDtcXG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XFxuICB3aWR0aDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gIGJvcmRlcjogc29saWQgM3B4IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXhzbWFsbCkgMHB4IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZCAuc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICBvcGFjaXR5OiAxLjA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS1sYWJlbCB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWljb24ge1xcbiAgd2lkdGg6IHZhcigtLXNpemUteHNtYWxsKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xMy4yMDY5JTIwNS4yMDcyNC01LjUwMDAyJTIwNS40OTk5Ni0uNzA3MTEuNzA3Mi0uNzA3MTEtLjcwNzItMy0yLjk5OTk2JTIwMS40MTQyMi0xLjQxNDIxJTIwMi4yOTI4OSUyMDIuMjkyODklMjA0Ljc5MjkzLTQuNzkyODl6JTIyJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUtLWhpZ2hsaWdodCwgLnNlbGVjdC1tZW51X19pdGVtOmhvdmVyLCAuc2VsZWN0LW1lbnVfX2l0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlci1sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlNCk7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2RpdmlkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUyKTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW46IDhweCAwIDdweCAwO1xcbn1cXG5cXG4uc3dpdGNoIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKlxcbiAgICAmX190b2dnbGU6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcbiAgICB9XFxuICAgICovXFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQ6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIGNhbGModmFyKC0tc2l6ZS14bGFyZ2UpIC0gMnB4KTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAgMC4ycztcXG4gIHdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbDphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG5cXG4udGV4dGFyZWEge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogNjJweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi50ZXh0YXJlYTpob3ZlciwgLnRleHRhcmVhOnBsYWNlaG9sZGVyLXNob3duOmhvdmVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi50ZXh0YXJlYTphY3RpdmUsIC50ZXh0YXJlYTpmb2N1cyB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkLCAudGV4dGFyZWE6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4udHlwZSB7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIC8qIHNpemVzICovXFxuICAvKiB3ZWlnaHRzICovXFxuICAvKiBsZXR0ZXIgc3BhY2luZyBhZGp1c3RtZW50cyBiYXNlZCBwb3MvbmVnIGFwcGxpY2F0aW9uICovXFxufVxcblxcbi50eXBlLS1zbWFsbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4udHlwZS0tbGFyZ2Uge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLXhsYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZSk7XFxufVxcblxcbi50eXBlLS1tZWRpdW0ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxufVxcblxcbi50eXBlLS1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXNtYWxsIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLWxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZSk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXhsYXJnZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLXRhYmxlLWNyZWF0b3Iuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGFibGUtY3JlYXRvci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRlc2lnbi1saW50ZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzVfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstZGVzaWduLWxpbnRlci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tbW9yZS5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfN19fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24taGVscC5zdmdcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF81X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiYm9keSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSxcXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiO1xcbn1cXG5cXG4uZmlnbWEtbGlnaHQge1xcbiAgY29sb3Itc2NoZW1lOiBsaWdodDtcXG59XFxuXFxuLmZpZ21hLWRhcmsge1xcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xcbn1cXG5cXG4uYXBwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogQ2hyb21lL09wZXJhL1NhZmFyaSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOSsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBJRSAxMCsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOC0gKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuaDQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuaDYge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBtYXJnaW46IDAgMCAxMHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XFxufVxcblxcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgcGFkZGluZzogMCAzMnB4IDAgOHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOGEwZmI7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzE4YTBmYjtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmhyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxudGFibGUgdHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxudGFibGUgdGQge1xcbiAgcGFkZGluZzogdW5zZXQ7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDZweDtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuLnJlc2l6ZXIge1xcbiAgei1pbmRleDogOTk7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2U7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbiB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB6LWluZGV4OiAxMDA7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGdhcDogMHB4O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb246aG92ZXIgLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAzNXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjc1IGVhc2Utb3V0O1xcbn1cXG5cXG4uYmFjay10YWIge1xcbiAgb3BhY2l0eTogMC41NTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmJhY2stdGFiIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uYmFjay10YWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYjpub3QoLmFjdGl2ZSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiLmFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1zZWxlY3Rpb24tY29udGFpbmVyLFxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDIzcHg7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5pbnB1dF9fcmFkaW8gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2NkZDNkNTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjMxNSk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0MDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjN2I4MzhhO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWVkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEwMzE1NjtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtYXJnaW46IDFweCAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uaW5wdXQtY29udGFpbmVyIC5sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgZm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMCAwIDAgN3B4O1xcbiAgcGFkZGluZy1sZWZ0OiA3cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaDUubGFiZWwge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogY2FsYygxMDAlICsgOHB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICByaWdodDogOHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzLFxcbi5udW1iZXItb2Ytcm93cyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29sczpmb2N1cyxcXG4ubnVtYmVyLW9mLXJvd3M6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmN0YS1jb250YWluZXIge1xcbiAgd2lkdGg6IDg0JTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciBoNiB7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiA4MHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg1cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiBjYWxjKDhweCArIDhweCk7XFxuICB0b3A6IDEycHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF06aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLyotLSBUb2dnbGUgc3R5bGVzIC0tKi9cXG4vKiBUaGUgc3dpdGNoIC0gdGhlIGJveCBhcm91bmQgdGhlIHNsaWRlciAqL1xcbi51aS1zd2l0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDEycHg7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2QxZDRkNDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlcjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1kaXNhYmxlZCk7XFxufVxcblxcbi8qIEhpZGUgZGVmYXVsdCBIVE1MIGNoZWNrYm94ICovXFxuLnVpLXN3aXRjaCBpbnB1dCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcblxcbi8qIFRoZSBzbGlkZXIgKi9cXG4uc2xpZGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tdGVydGlhcnkpO1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuXFxuLnNsaWRlcjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGxlZnQ6IDFweDtcXG4gIGJvdHRvbTogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kKTtcXG59XFxuXFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXI6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLyogUm91bmRlZCBzbGlkZXJzICovXFxuLnNsaWRlci5yb3VuZCB7XFxuICBib3JkZXItcmFkaXVzOiAzNHB4O1xcbn1cXG5cXG4uc2xpZGVyLnJvdW5kOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi8qLS0gTGFuZ3VhZ2UgbGludGVyIC0tKi9cXG5cXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLnNlbGVjdGlvbi1oYXMtY2hhbmdlZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNzBweDtcXG59XFxuXFxuLnN1Z2dlc3Rpb25zLWVtcHR5LXN0YXRlLFxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGV4dC1sYXllci1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDdweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZzogMTBweCA2cHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLW9uYnJhbmQpO1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMDVzIG9wYWNpdHkgZWFzZS1vdXQ7XFxufVxcblxcbi5sYW5ndWFnZS1iZXRhLXRhYi5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLyotLSBIb21lIC0tKi9cXG5cXG4uaG9tZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDE0cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ0ZDQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDc1cyBlYXNlLW91dDtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyAyNSUpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwIDAgMCAvIDMwJSk7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gNDUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgd2lkdGg6IDM0cHg7XFxuICBoZWlnaHQ6IDM0cHg7XFxufVxcblxcbi50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAudGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyArIFwiKTtcXG59XFxuXFxuLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyArIFwiKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvcHkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDNweDtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNDhweCk7XFxufVxcblxcbi5ob21lLXN1cHBvcnQgYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi8qLS0gQ29sb3IgbGludGVyIC0tKi9cXG5cXG4uY29sb3ItbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMjRweDtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEwNXB4KTtcXG59XFxuXFxuLnN1bW1hcnktaXMtbG9hZGluZyxcXG4ubm8tc2VsZWN0aW9uLW1hZGUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCA4cHg7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDUlO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTUwIDE1MCAxNTAgLyA0NSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDk1cyBlYXNlLW91dDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiKDAgMTI1IDUwIC8gOCUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQsXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiKDE1MCAxNTAgMTUwIC8gNjAlKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDAgcmdiKDAgMCAwIC8gMyUpLCAwIDFweCAzcHggcmdiYSgwIDAgMCAvIDElKSxcXG4gICAgMCA4cHggN3B4IHJnYmEoMCAwIDAgLyAyJSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWQuY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiKDAgMCAwIC8gNSUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxMHB4IDE2cHggMTJweDtcXG4gIGdhcDogN3B4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS10aXRsZS1zZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY3VzdG9tLWxheWVyLWljb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tcmlnaHQ6IDdweDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gaW1nLFxcbi5maWdtYS1kYXJrIC5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIC5pY29uIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uaWNvbi5sYXllci1pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgaGVpZ2h0OiAxN3B4O1xcbiAgd2lkdGg6IDE3cHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XFxuICBvcGFjaXR5OiAwLjY1O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtaGVhZGluZyB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0IHtcXG4gIHBhZGRpbmc6IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTRweDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3Mtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxuICBtYXJnaW4tbGVmdDogMTRweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MtdGVydGlhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWNvbG9yIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29sb3Itc2FtcGxlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDEwMCUpO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMjNweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzZfX18gKyBcIik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuXFxuICB0ZXh0LWluZGVudDogMjAwJTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubWVudS1hY3RpdmUgLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctdGVydGlhcnkpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDEycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBwYWRkaW5nOiAxMnB4IDE2cHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7XFxuICBib3JkZXItdG9wOiAxcHggZG90dGVkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lcjpob3ZlciB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5leHBhbmRlZCAuc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWxwIHtcXG4gIHdpZHRoOiAxOHB4O1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyArIFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG9wYWNpdHk6IDAuOTtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHA6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA5cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweCAxMnB4IDhweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctaG92ZXIpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXByaW1hcnktY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiAycHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcGFkZGluZzogMCAxNnB4IDAgMjRweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcXG4gICAgdG8gcmlnaHQsXFxuICAgIHRyYW5zcGFyZW50LFxcbiAgICB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpIDIwJVxcbiAgKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNzVzIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpob3ZlciAuYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGEge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgcGFkZGluZzogMTZweCAyNHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIG1pbi13aWR0aDogMTI1cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IC03cHg7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyMzIzO1xcbiAgY29sb3I6ICNmZmY7XFxuICBnYXA6IDhweDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nOiA1cHggMTRweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtIGEge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThhMGZiO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IGhyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQ2NDY7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogOTAlO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZyB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciAuYnRuIHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcblxcbi5jb2xvci1sb2FkZXIsXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tc2Vjb25kYXJ5KTtcXG4gIGFuaW1hdGlvbjogc3BpbiAxcyBpbmZpbml0ZSBsaW5lYXI7XFxuXFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxdHVybik7XFxuICB9XFxufVxcblxcbi8qLS0gVGhlbWUgc3dpdGNoZXIgc3R5bGVzIC0tKi9cXG4udGhlbWUtc3dpdGNoZXItY29udGFpbmVyIHtcXG4gIGdhcDogMTJweDtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDNweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gMzUlKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIC50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIGFjY2VudC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogOXB4O1xcbiAgcmlnaHQ6IDhweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2Uge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tbGFiZWwtdGV4dCB7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcblxcbltjbGFzcyo9XFxcIm1vZGFsLS1mcmFtZVxcXCJdIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogLTJweDtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYW5pbWF0aW9uOiBzcGluIDAuNXMgaW5maW5pdGUgbGluZWFyO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvYXBwL3N0eWxlcy91aS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxZQUFZO0VBQ1osU0FBUztFQUNUOytFQUM2RTtBQUMvRTs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHdCQUF3QjtFQUN4Qix1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLGdCQUFnQjtFQUNoQix1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLFdBQVc7RUFDWCx1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLGdCQUFnQjtFQUNoQix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLHdDQUF3QztFQUN4QyxnQkFBZ0I7RUFDaEIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw2QkFBNkI7RUFDN0IsWUFBWTtFQUNaLHFCQUFxQjtFQUNyQixzQkFBc0I7RUFDdEIs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Zjs7QUFFQTtFQUNFLGVBQWU7RUFDZixlQUFlO0VBQ2YsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0UsU0FBUztFQUNULGVBQWU7RUFDZix3Q0FBd0M7QUFDMUM7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFNBQVM7RUFDVCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLHdDQUF3QztFQUN4QywrQkFBK0I7QUFDakM7O0FBRUE7RUFDRSx3Q0FBd0M7RUFDeEMsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLCtDQUErQztFQUMvQyxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsMkNBQTJDO0FBQzdDOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qiw4QkFBOEI7QUFDaEM7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxVQUFVO0FBQ1o7O0FBRUE7RUFDRSwrQ0FBK0M7QUFDakQ7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsZUFBZTtFQUNmLDhCQUE4QjtFQUM5QixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osV0FBVztFQUNYLHVDQUF1QztFQUN2QyxvQ0FBb0M7QUFDdENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSxcXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiO1xcbn1cXG5cXG4uZmlnbWEtbGlnaHQge1xcbiAgY29sb3Itc2NoZW1lOiBsaWdodDtcXG59XFxuXFxuLmZpZ21hLWRhcmsge1xcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xcbn1cXG5cXG4uYXBwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogQ2hyb21lL09wZXJhL1NhZmFyaSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOSsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBJRSAxMCsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOC0gKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuaDQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuaDYge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBtYXJnaW46IDAgMCAxMHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XFxufVxcblxcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgcGFkZGluZzogMCAzMnB4IDAgOHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOGEwZmI7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzE4YTBmYjtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmhyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxudGFibGUgdHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxudGFibGUgdGQge1xcbiAgcGFkZGluZzogdW5zZXQ7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDZweDtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuLnJlc2l6ZXIge1xcbiAgei1pbmRleDogOTk7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2U7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbiB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB6LWluZGV4OiAxMDA7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGdhcDogMHB4O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb246aG92ZXIgLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAzNXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjc1IGVhc2Utb3V0O1xcbn1cXG5cXG4uYmFjay10YWIge1xcbiAgb3BhY2l0eTogMC41NTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmJhY2stdGFiIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uYmFjay10YWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYjpub3QoLmFjdGl2ZSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiLmFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1zZWxlY3Rpb24tY29udGFpbmVyLFxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDIzcHg7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5pbnB1dF9fcmFkaW8gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2NkZDNkNTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjMxNSk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0MDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjN2I4MzhhO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWVkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEwMzE1NjtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtYXJnaW46IDFweCAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uaW5wdXQtY29udGFpbmVyIC5sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgZm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMCAwIDAgN3B4O1xcbiAgcGFkZGluZy1sZWZ0OiA3cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaDUubGFiZWwge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogY2FsYygxMDAlICsgOHB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICByaWdodDogOHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzLFxcbi5udW1iZXItb2Ytcm93cyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29sczpmb2N1cyxcXG4ubnVtYmVyLW9mLXJvd3M6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmN0YS1jb250YWluZXIge1xcbiAgd2lkdGg6IDg0JTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciBoNiB7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiA4MHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg1cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiBjYWxjKDhweCArIDhweCk7XFxuICB0b3A6IDEycHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF06aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLyotLSBUb2dnbGUgc3R5bGVzIC0tKi9cXG4vKiBUaGUgc3dpdGNoIC0gdGhlIGJveCBhcm91bmQgdGhlIHNsaWRlciAqL1xcbi51aS1zd2l0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDEycHg7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2QxZDRkNDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlcjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1kaXNhYmxlZCk7XFxufVxcblxcbi8qIEhpZGUgZGVmYXVsdCBIVE1MIGNoZWNrYm94ICovXFxuLnVpLXN3aXRjaCBpbnB1dCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcblxcbi8qIFRoZSBzbGlkZXIgKi9cXG4uc2xpZGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tdGVydGlhcnkpO1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuXFxuLnNsaWRlcjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGxlZnQ6IDFweDtcXG4gIGJvdHRvbTogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kKTtcXG59XFxuXFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXI6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLyogUm91bmRlZCBzbGlkZXJzICovXFxuLnNsaWRlci5yb3VuZCB7XFxuICBib3JkZXItcmFkaXVzOiAzNHB4O1xcbn1cXG5cXG4uc2xpZGVyLnJvdW5kOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi8qLS0gTGFuZ3VhZ2UgbGludGVyIC0tKi9cXG5cXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLnNlbGVjdGlvbi1oYXMtY2hhbmdlZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNzBweDtcXG59XFxuXFxuLnN1Z2dlc3Rpb25zLWVtcHR5LXN0YXRlLFxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGV4dC1sYXllci1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDdweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZzogMTBweCA2cHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLW9uYnJhbmQpO1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMDVzIG9wYWNpdHkgZWFzZS1vdXQ7XFxufVxcblxcbi5sYW5ndWFnZS1iZXRhLXRhYi5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLyotLSBIb21lIC0tKi9cXG5cXG4uaG9tZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDE0cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ0ZDQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDc1cyBlYXNlLW91dDtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyAyNSUpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwIDAgMCAvIDMwJSk7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gNDUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgd2lkdGg6IDM0cHg7XFxuICBoZWlnaHQ6IDM0cHg7XFxufVxcblxcbi50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tdGFibGUtY3JlYXRvci5zdmdcXFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRhYmxlLWNyZWF0b3IgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRhYmxlLWNyZWF0b3Iuc3ZnXFxcIik7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLXRoZW1lLXN3aXRjaGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAudGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRoZW1lLXN3aXRjaGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWRlc2lnbi1saW50ZXIuc3ZnXFxcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC5kZXNpZ24tbGludGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay1kZXNpZ24tbGludGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29weSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogM3B4O1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaGVhZGluZyB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaG9tZS1zdXBwb3J0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMjRweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0OHB4KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCBhIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuLyotLSBDb2xvciBsaW50ZXIgLS0qL1xcblxcbi5jb2xvci1saW50ZXItY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAyNHB4O1xcbiAgZmxleC1ncm93OiAxO1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gMTA1cHgpO1xcbn1cXG5cXG4uc3VtbWFyeS1pcy1sb2FkaW5nLFxcbi5uby1zZWxlY3Rpb24tbWFkZSB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctc3VtbWFyeS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDhweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDE0NSU7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNTAgMTUwIDE1MCAvIDQ1JSk7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wOTVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZC5leHBhbmRlZCxcXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYigwIDEyNSA1MCAvIDglKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMTUwIDE1MCAxNTAgLyA2MCUpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogMCAycHggMCByZ2IoMCAwIDAgLyAzJSksIDAgMXB4IDNweCByZ2JhKDAgMCAwIC8gMSUpLFxcbiAgICAwIDhweCA3cHggcmdiYSgwIDAgMCAvIDIlKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1ob3Zlci1zdGF0ZS1kaXNhYmxlZC5jb2xvci10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCByZ2IoMCAwIDAgLyA1JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDEwcHggMTZweCAxMnB4O1xcbiAgZ2FwOiA3cHg7XFxufVxcblxcbi5jb2xvci10aWxlLXRpdGxlLXNlY3Rpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5jdXN0b20tbGF5ZXItaWNvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSBpbWcsXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gLmljb24ge1xcbiAgZmlsdGVyOiBpbnZlcnQoMSk7XFxufVxcblxcbi5pY29uLmxheWVyLWljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiA3cHg7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDE3cHg7XFxuICB3aWR0aDogMTdweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC43NSk7XFxuICBtYXJnaW4tbGVmdDogLTJweDtcXG4gIG9wYWNpdHk6IDAuNjU7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDZweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3Qge1xcbiAgcGFkZGluZzogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNHB4O1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIvXFxcIjtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy10ZXJ0aWFyeSk7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtY29sb3Ige1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb2xvci1zYW1wbGUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMTAwJSk7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2IoMTUwIDE1MCAxNTAgLyAyNSUpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAyM3B4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGVmdDogNnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1tb3JlLnN2Z1xcXCIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcblxcbiAgdGV4dC1pbmRlbnQ6IDIwMCU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5idG4tY29sb3ItdGlsZS1tZW51IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXNlY29uZGFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idG4tY29sb3ItdGlsZS1tZW51OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXRlcnRpYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgcGFkZGluZzogMTJweCAxNnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4O1xcbiAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXI6aG92ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4uZXhwYW5kZWQgLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogNHB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVscCB7XFxuICB3aWR0aDogMThweDtcXG4gIGhlaWdodDogMThweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24taGVscC5zdmdcXFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG9wYWNpdHk6IDAuOTtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHA6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA5cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweCAxMnB4IDhweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctaG92ZXIpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXByaW1hcnktY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiAycHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcGFkZGluZzogMCAxNnB4IDAgMjRweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcXG4gICAgdG8gcmlnaHQsXFxuICAgIHRyYW5zcGFyZW50LFxcbiAgICB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpIDIwJVxcbiAgKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNzVzIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpob3ZlciAuYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGEge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgcGFkZGluZzogMTZweCAyNHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIG1pbi13aWR0aDogMTI1cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IC03cHg7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyMzIzO1xcbiAgY29sb3I6ICNmZmY7XFxuICBnYXA6IDhweDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nOiA1cHggMTRweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtIGEge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThhMGZiO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IGhyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQ2NDY7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogOTAlO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZyB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciAuYnRuIHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcblxcbi5jb2xvci1sb2FkZXIsXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tc2Vjb25kYXJ5KTtcXG4gIGFuaW1hdGlvbjogc3BpbiAxcyBpbmZpbml0ZSBsaW5lYXI7XFxuXFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxdHVybik7XFxuICB9XFxufVxcblxcbi8qLS0gVGhlbWUgc3dpdGNoZXIgc3R5bGVzIC0tKi9cXG4udGhlbWUtc3dpdGNoZXItY29udGFpbmVyIHtcXG4gIGdhcDogMTJweDtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDNweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gMzUlKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIC50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIGFjY2VudC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogOXB4O1xcbiAgcmlnaHQ6IDhweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2Uge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tbGFiZWwtdGV4dCB7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcblxcbltjbGFzcyo9XFxcIm1vZGFsLS1mcmFtZVxcXCJdIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogLTJweDtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYW5pbWF0aW9uOiBzcGluIDAuNXMgaW5maW5pdGUgbGluZWFyO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyICYmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl0pOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSkge1xuICB2YXIgX2l0ZW0gPSBfc2xpY2VkVG9BcnJheShpdGVtLCA0KSxcbiAgICAgIGNvbnRlbnQgPSBfaXRlbVsxXSxcbiAgICAgIGNzc01hcHBpbmcgPSBfaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfSAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfSAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cblxuICBpZiAoL1tcIicoKSBcXHRcXG5dLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb250YWlucyhvdGhlcikge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBvdGhlciAhPT0gJ29iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxICjigJ1vdGhlcuKAnCkgdG8gTm9kZS5jb250YWlucyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIE5vZGUnKTtcblx0fVxuXG5cdHZhciBub2RlID0gb3RoZXI7XG5cdGRvIHtcblx0XHRpZiAodGhpcyA9PT0gbm9kZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChub2RlKSB7XG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblx0fSB3aGlsZSAobm9kZSk7XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgYm91bmRDb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKG5vZGUsIG90aGVyKSB7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShub2RlLCBbb3RoZXJdKTtcbn07XG5cbmRlZmluZShib3VuZENvbnRhaW5zLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZENvbnRhaW5zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0aWYgKGRvY3VtZW50LmNvbnRhaW5zKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuY29udGFpbnM7XG5cdFx0fVxuXHRcdGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQuYm9keS5jb250YWlucy5jYWxsKGRvY3VtZW50LCAnJykgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdHJldHVybiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7IC8qKi8gfVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltQ29udGFpbnMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0ZG9jdW1lbnQsXG5cdFx0XHR7IGNvbnRhaW5zOiBwb2x5ZmlsbCB9LFxuXHRcdFx0eyBjb250YWluczogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQuY29udGFpbnMgIT09IHBvbHlmaWxsOyB9IH1cblx0XHQpO1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGRlZmluZShcblx0XHRcdFx0RWxlbWVudC5wcm90b3R5cGUsXG5cdFx0XHRcdHsgY29udGFpbnM6IHBvbHlmaWxsIH0sXG5cdFx0XHRcdHsgY29udGFpbnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLmNvbnRhaW5zICE9PSBwb2x5ZmlsbDsgfSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vNS9DaGVja09iamVjdENvZXJjaWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVM1VG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vNS9Ub0ludGVnZXInKTtcblxudmFyIFRvTnVtYmVyID0gcmVxdWlyZSgnLi9Ub051bWJlcicpO1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzExLjAvI3NlYy10b2ludGVnZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKG51bWJlciAhPT0gMCkge1xuXHRcdG51bWJlciA9IEVTNVRvSW50ZWdlcihudW1iZXIpO1xuXHR9XG5cdHJldHVybiBudW1iZXIgPT09IDAgPyAwIDogbnVtYmVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcblxudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvb2JqZWN0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZSh2YWx1ZSk7XG5cdHJldHVybiAkT2JqZWN0KHZhbHVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczIwMTUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvcHJpbWl0aXZlXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHRvUHJpbWl0aXZlKGlucHV0LCBhcmd1bWVudHNbMV0pO1xuXHR9XG5cdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTBcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRpZiAodmFsdWUgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKG9wdE1lc3NhZ2UgfHwgKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKSk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL1RvUHJpbWl0aXZlJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb051bWJlcih2YWx1ZSkge1xuXHR2YXIgcHJpbSA9IFRvUHJpbWl0aXZlKHZhbHVlLCBOdW1iZXIpO1xuXHRpZiAodHlwZW9mIHByaW0gIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuICtwcmltOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuXHR2YXIgdHJpbW1lZCA9IHByaW0ucmVwbGFjZSgvXlsgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUwMDg1XSt8WyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdKyQvZywgJycpO1xuXHRpZiAoKC9eMFtvYl18XlsrLV0weC8pLnRlc3QodHJpbW1lZCkpIHtcblx0XHRyZXR1cm4gTmFOO1xuXHR9XG5cblx0cmV0dXJuICt0cmltbWVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXMtdG8tcHJpbWl0aXZlL2VzNScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgIT09IGE7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgISRpc05hTih4KSAmJiB4ICE9PSBJbmZpbml0eSAmJiB4ICE9PSAtSW5maW5pdHk7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRNYXRoID0gR2V0SW50cmluc2ljKCclTWF0aCUnKTtcbnZhciAkTnVtYmVyID0gR2V0SW50cmluc2ljKCclTnVtYmVyJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICROdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCAkTWF0aC5wb3coMiwgNTMpIC0gMTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICR0ZXN0ID0gR2V0SW50cmluc2ljKCdSZWdFeHAucHJvdG90eXBlLnRlc3QnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVnZXhUZXN0ZXIocmVnZXgpIHtcblx0cmV0dXJuIGNhbGxCaW5kKCR0ZXN0LCByZWdleCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNpZ24obnVtYmVyKSB7XG5cdHJldHVybiBudW1iZXIgPj0gMCA/IDEgOiAtMTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIHx8IGltcGxlbWVudGF0aW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgSXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZScpO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IHJlcXVpcmUoJ2Z1bmN0aW9ucy1oYXZlLW5hbWVzJykoKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgJGZ1bmN0aW9uVG9TdHJpbmcgPSBjYWxsQm91bmQoJ0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyICRzdHJpbmdNYXRjaCA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5tYXRjaCcpO1xuXG52YXIgY2xhc3NSZWdleCA9IC9eY2xhc3MgLztcblxudmFyIGlzQ2xhc3MgPSBmdW5jdGlvbiBpc0NsYXNzQ29uc3RydWN0b3IoZm4pIHtcblx0aWYgKElzQ2FsbGFibGUoZm4pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0dHJ5IHtcblx0XHR2YXIgbWF0Y2ggPSAkc3RyaW5nTWF0Y2goJGZ1bmN0aW9uVG9TdHJpbmcoZm4pLCBjbGFzc1JlZ2V4KTtcblx0XHRyZXR1cm4gISFtYXRjaDtcblx0fSBjYXRjaCAoZSkge31cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHJlZ2V4ID0gL1xccypmdW5jdGlvblxccysoW14oXFxzXSopXFxzKi87XG5cbnZhciBmdW5jdGlvblByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE5hbWUoKSB7XG5cdGlmICghaXNDbGFzcyh0aGlzKSAmJiAhSXNDYWxsYWJsZSh0aGlzKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lIHNoYW0gZ2V0dGVyIGNhbGxlZCBvbiBub24tZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxuXHRpZiAodGhpcyA9PT0gZnVuY3Rpb25Qcm90bykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHR2YXIgc3RyID0gJGZ1bmN0aW9uVG9TdHJpbmcodGhpcyk7XG5cdHZhciBtYXRjaCA9ICRzdHJpbmdNYXRjaChzdHIsIHJlZ2V4KTtcblx0dmFyIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcblx0cmV0dXJuIG5hbWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgYm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpLnN1cHBvcnRzRGVzY3JpcHRvcnM7XG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gcmVxdWlyZSgnZnVuY3Rpb25zLWhhdmUtbmFtZXMnKSgpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU5hbWUoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcblx0XHRyZXR1cm4gcG9seWZpbGw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1NoaW1taW5nIEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lIHN1cHBvcnQgcmVxdWlyZXMgRVM1IHByb3BlcnR5IGRlc2NyaXB0b3Igc3VwcG9ydC4nKTtcblx0fVxuXHR2YXIgZnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblx0ZGVmaW5lUHJvcGVydHkoZnVuY3Rpb25Qcm90bywgJ25hbWUnLCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIG5hbWUgPSBwb2x5ZmlsbC5jYWxsKHRoaXMpO1xuXHRcdFx0aWYgKHRoaXMgIT09IGZ1bmN0aW9uUHJvdG8pIHtcblx0XHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdHZhbHVlOiBuYW1lLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSBmdW5jdGlvbiBmdW5jdGlvbnNIYXZlTmFtZXMoKSB7XG5cdHJldHVybiB0eXBlb2YgZnVuY3Rpb24gZigpIHt9Lm5hbWUgPT09ICdzdHJpbmcnO1xufTtcblxudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKGdPUEQpIHtcblx0dHJ5IHtcblx0XHRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0Z09QRCA9IG51bGw7XG5cdH1cbn1cblxuZnVuY3Rpb25zSGF2ZU5hbWVzLmZ1bmN0aW9uc0hhdmVDb25maWd1cmFibGVOYW1lcyA9IGZ1bmN0aW9uIGZ1bmN0aW9uc0hhdmVDb25maWd1cmFibGVOYW1lcygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uc0hhdmVOYW1lcygpICYmIGdPUEQgJiYgISFnT1BEKGZ1bmN0aW9uICgpIHt9LCAnbmFtZScpLmNvbmZpZ3VyYWJsZTtcbn07XG5cbnZhciAkYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuXG5mdW5jdGlvbnNIYXZlTmFtZXMuYm91bmRGdW5jdGlvbnNIYXZlTmFtZXMgPSBmdW5jdGlvbiBib3VuZEZ1bmN0aW9uc0hhdmVOYW1lcygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uc0hhdmVOYW1lcygpICYmIHR5cGVvZiAkYmluZCA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbiBmKCkge30uYmluZCgpLm5hbWUgIT09ICcnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbnNIYXZlTmFtZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkU3ludGF4RXJyb3IgPSBTeW50YXhFcnJvcjtcbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiBFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiBFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xuXG4vKiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjE3LjE1L2Rpc3QvbG9kYXNoLmpzI0w2NzM1LUw2NzQ0ICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXiUuW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JSQpKS9nO1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nOyAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBmdW5jdGlvbiBzdHJpbmdUb1BhdGgoc3RyaW5nKSB7XG5cdHZhciBmaXJzdCA9ICRzdHJTbGljZShzdHJpbmcsIDAsIDEpO1xuXHR2YXIgbGFzdCA9ICRzdHJTbGljZShzdHJpbmcsIC0xKTtcblx0aWYgKGZpcnN0ID09PSAnJScgJiYgbGFzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCcpO1xuXHR9IGVsc2UgaWYgKGxhc3QgPT09ICclJyAmJiBmaXJzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSBbXTtcblx0JHJlcGxhY2Uoc3RyaW5nLCByZVByb3BOYW1lLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuXHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHF1b3RlID8gJHJlcGxhY2Uoc3ViU3RyaW5nLCByZUVzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKiBlbmQgYWRhcHRhdGlvbiAqL1xuXG52YXIgZ2V0QmFzZUludHJpbnNpYyA9IGZ1bmN0aW9uIGdldEJhc2VJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWNOYW1lID0gbmFtZTtcblx0dmFyIGFsaWFzO1xuXHRpZiAoaGFzT3duKExFR0FDWV9BTElBU0VTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdGFsaWFzID0gTEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV07XG5cdFx0aW50cmluc2ljTmFtZSA9ICclJyArIGFsaWFzWzBdICsgJyUnO1xuXHR9XG5cblx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdHZhciB2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljTmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBuZWVkc0V2YWwpIHtcblx0XHRcdHZhbHVlID0gZG9FdmFsKGludHJpbnNpY05hbWUpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWZsZWN0QXBwbHkgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdCAhPT0gbnVsbCAmJiBSZWZsZWN0LmFwcGx5O1xudmFyIGJhZEFycmF5TGlrZTtcbnZhciBpc0NhbGxhYmxlTWFya2VyO1xuaWYgKHR5cGVvZiByZWZsZWN0QXBwbHkgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHR0cnkge1xuXHRcdGJhZEFycmF5TGlrZSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2xlbmd0aCcsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBpc0NhbGxhYmxlTWFya2VyO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlzQ2FsbGFibGVNYXJrZXIgPSB7fTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuXHRcdHJlZmxlY3RBcHBseShmdW5jdGlvbiAoKSB7IHRocm93IDQyOyB9LCBudWxsLCBiYWRBcnJheUxpa2UpO1xuXHR9IGNhdGNoIChfKSB7XG5cdFx0aWYgKF8gIT09IGlzQ2FsbGFibGVNYXJrZXIpIHtcblx0XHRcdHJlZmxlY3RBcHBseSA9IG51bGw7XG5cdFx0fVxuXHR9XG59IGVsc2Uge1xuXHRyZWZsZWN0QXBwbHkgPSBudWxsO1xufVxuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZzsgLy8gYmV0dGVyOiB1c2UgYGhhcy10b3N0cmluZ3RhZ2Bcbi8qIGdsb2JhbHMgZG9jdW1lbnQ6IGZhbHNlICovXG52YXIgZG9jdW1lbnREb3RBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkb2N1bWVudC5hbGwgPT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmFsbCAhPT0gdW5kZWZpbmVkID8gZG9jdW1lbnQuYWxsIDoge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVmbGVjdEFwcGx5XG5cdD8gZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHR0cnkge1xuXHRcdFx0cmVmbGVjdEFwcGx5KHZhbHVlLCBudWxsLCBiYWRBcnJheUxpa2UpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChlICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdH1cblx0XHRyZXR1cm4gIWlzRVM2Q2xhc3NGbih2YWx1ZSk7XG5cdH1cblx0OiBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSBkb2N1bWVudERvdEFsbCkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgIXZhbHVlLnByb3RvdHlwZSkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0dmFyIHN0ckNsYXNzID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcblx0fTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldERheSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZUdldERheUNhbGwodmFsdWUpIHtcblx0dHJ5IHtcblx0XHRnZXREYXkuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGF0ZUNsYXNzID0gJ1tvYmplY3QgRGF0ZV0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0RhdGVPYmplY3QodmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGhhc1RvU3RyaW5nVGFnID8gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkgOiB0b1N0ci5jYWxsKHZhbHVlKSA9PT0gZGF0ZUNsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG52YXIgaGFzO1xudmFyICRleGVjO1xudmFyIGlzUmVnZXhNYXJrZXI7XG52YXIgYmFkU3RyaW5naWZpZXI7XG5cbmlmIChoYXNUb1N0cmluZ1RhZykge1xuXHRoYXMgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHknKTtcblx0JGV4ZWMgPSBjYWxsQm91bmQoJ1JlZ0V4cC5wcm90b3R5cGUuZXhlYycpO1xuXHRpc1JlZ2V4TWFya2VyID0ge307XG5cblx0dmFyIHRocm93UmVnZXhNYXJrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhyb3cgaXNSZWdleE1hcmtlcjtcblx0fTtcblx0YmFkU3RyaW5naWZpZXIgPSB7XG5cdFx0dG9TdHJpbmc6IHRocm93UmVnZXhNYXJrZXIsXG5cdFx0dmFsdWVPZjogdGhyb3dSZWdleE1hcmtlclxuXHR9O1xuXG5cdGlmICh0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlID09PSAnc3ltYm9sJykge1xuXHRcdGJhZFN0cmluZ2lmaWVyW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSB0aHJvd1JlZ2V4TWFya2VyO1xuXHR9XG59XG5cbnZhciAkdG9TdHJpbmcgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciByZWdleENsYXNzID0gJ1tvYmplY3QgUmVnRXhwXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVG9TdHJpbmdUYWdcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdD8gZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRCh2YWx1ZSwgJ2xhc3RJbmRleCcpO1xuXHRcdHZhciBoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGhhcyhkZXNjcmlwdG9yLCAndmFsdWUnKTtcblx0XHRpZiAoIWhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHQkZXhlYyh2YWx1ZSwgYmFkU3RyaW5naWZpZXIpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBlID09PSBpc1JlZ2V4TWFya2VyO1xuXHRcdH1cblx0fVxuXHQ6IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHQvLyBJbiBvbGRlciBicm93c2VycywgdHlwZW9mIHJlZ2V4IGluY29ycmVjdGx5IHJldHVybnMgJ2Z1bmN0aW9uJ1xuXHRcdGlmICghdmFsdWUgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiAkdG9TdHJpbmcodmFsdWUpID09PSByZWdleENsYXNzO1xuXHR9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbmlmIChoYXNTeW1ib2xzKSB7XG5cdHZhciBzeW1Ub1N0ciA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBzeW1TdHJpbmdSZWdleCA9IC9eU3ltYm9sXFwoLipcXCkkLztcblx0dmFyIGlzU3ltYm9sT2JqZWN0ID0gZnVuY3Rpb24gaXNSZWFsU3ltYm9sT2JqZWN0KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgIT09ICdzeW1ib2wnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBzeW1TdHJpbmdSZWdleC50ZXN0KHN5bVRvU3RyLmNhbGwodmFsdWUpKTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAodG9TdHIuY2FsbCh2YWx1ZSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gaXNTeW1ib2xPYmplY3QodmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH07XG59IGVsc2Uge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHQvLyB0aGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgU3ltYm9scy5cblx0XHRyZXR1cm4gZmFsc2UgJiYgdmFsdWU7XG5cdH07XG59XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBMYW5ndWFnZUxpbnRlci5qcy5MSUNFTlNFLnR4dCAqL1xuKCgpPT57dmFyIG49ezExNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSxpKXt2YXIgcix0PS0xO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkl0ZXJhdGUgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIFwiK24pO2lmKCFlLmNhbGwobixcImxlbmd0aFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJJdGVyYXRlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGhhcyBhIGBsZW5ndGhgXCIpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKFwiYGNhbGxiYWNrYCBtdXN0IGJlIGEgZnVuY3Rpb25cIik7Zm9yKDsrK3Q8bi5sZW5ndGg7KXQgaW4gbiYmXCJudW1iZXJcIj09dHlwZW9mKHI9YS5jYWxsKGksblt0XSx0LG4pKSYmKHI8MCYmKHQ9MCksdD1yLTEpfTt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eX0sNzgwOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjthLmQoZSx7WjooKT0+TX0pO3ZhciBpPWEoODEpLHI9YS5uKGkpLHQ9YSg2NDUpLG89YS5uKHQpKCkocigpKTtvLnB1c2goW24uaWQsJyoge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAwNjRjOTtcXG59XFxuXFxuLyoubG9hZGluZy1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XFxufSovXFxuXFxuLnN1Z2dlc3Rpb24tbGlzdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWxlZnQ6ICAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogMTBweDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gIGJveC1zaGFkb3c6IDBweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICB0cmFuc2l0aW9uOiAwLjA4NXMgYWxsIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcblxcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbik6aG92ZXIge1xcbiAgdHJhbnNmb3JtOiAgdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJveC1zaGFkb3c6IFxcbiAgICAwcHggMi41cHggMnB4IHJnYmEoMCAwIDAgLyAuMDMpLFxcbiAgICAwcHggNnB4IDhweCByZ2JhKDAgMCAwIC8gLjAyKTtcXG5cXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCAwIDAgLyAyMCUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbik6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogIHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDBweCAycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5hY3RpdmUtc3VnZ2VzdGlvbiB7XFxuICBwYWRkaW5nOiAxNnB4IDE2cHggMTBweDtcXG4gIGN1cnNvcjogIGRlZmF1bHQ7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5hY3RpdmUtc3VnZ2VzdGlvbjpob3ZlcixcXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb246YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogIG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lcjpub3QoLmFjdGl2ZS1zdWdnZXN0aW9uKSA+ICo6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5KSB7XFxuICBkaXNwbGF5OiAgbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyIC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5zdWdnZXN0aW9uLXJ1bGUtYWN0dWFsIHtcXG4gIGZvbnQtc2l6ZTogIDEzcHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIG1hcmdpbjogIDA7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb24gLmFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnkge1xcbiAgZGlzcGxheTogIG5vbmU7XFxufVxcblxcbi5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IC5zdWdnZXN0aW9uLXJ1bGUtbGFiZWwge1xcbiAgY29sb3I6ICByZ2JhKDAgMCAwIC8gNTAlKTtcXG59XFxuXFxuLmFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnkgLnN1Z2dlc3Rpb24tcnVsZS1sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogXCLigKJcIjtcXG4gIG1hcmdpbi1yaWdodDogIDhweDtcXG4gIGNvbG9yOiAgcmdiYSgwIDAgMCAvIDQwJSk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5zdWdnZXN0aW9uLWRpc21pc3NlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuc3VnZ2VzdGlvbi1hY2NlcHRlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiA4cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiA2cHg7XFxuICBoZWlnaHQ6IDZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MTk3OTc7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5LnNldmVyZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYyZDI0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5Lm1vZGVyYXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzc0ZGY7XFxufVxcblxcbi5zdWdnZXN0aW9uLXJ1bGUtbGFiZWwge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNzVweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBjb2xvcjogIzZlNzU3NTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogMTJweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5zdW1tYXJ5LWJhc2ljIHtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGNvbG9yOiAjMjgzNjM2O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGdhcDogNnB4O1xcbn1cXG5cXG4uYmFzaWMtc3VtbWFyeS1leGFtcGxlIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudCB7XFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG4gIGNvbG9yOiAjZGYyZDI0O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudC10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGNvbG9yOiAjMjgzNjM2O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWFycm93IHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcXG59XFxuXFxuLnN1bW1hcnktcmVtb3ZhbCAuc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQge1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZjJkMjQ7XFxuICB0ZXh0LXNoYWRvdzogMCAxcHggcmdiKDAgMCAwIC8gMTAlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA2NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50OmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzUxNDg7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50OmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG59XFxuXFxuLnN1bW1hcnktcmVtb3ZhbCAuc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dCB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudCB7XFxuICBwYWRkaW5nOiA1cHggN3B4IDZweDtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzg3ZGQ7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA2NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRjOWJlYjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudDphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA2cHg7XFxuICBwYWRkaW5nOiAxcHggMCAxOHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogIC0xOXB4O1xcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3R0b206IDFweDtcXG59XFxuXFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIGRpc3BsYXk6ICBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy5uby1yZXBsYWNlbWVudCB7XFxuICBtYXJnaW4tYm90dG9tOiAgMDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy1jb250YWluZXIge1xcbiAgd2lkdGg6ICAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiAgcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAxcHggMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyOmFmdGVyIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbnRlbnQ6IFwiXCI7XFxuICBoZWlnaHQ6IDExMCU7XFxuICB3aWR0aDogMzBweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUgMjU1IDI1NSAvIDApLCAgI2ZmZiApO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IC0xcHg7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4wNzVzIGVhc2Utb3V0O1xcbiAgei1pbmRleDogIDEwO1xcbn1cXG5cXG4uc2Nyb2xsLXBvc2l0aW9uLXN0YXJ0OmFmdGVyLFxcbi5zY3JvbGwtcG9zaXRpb24tbWlkZGxlOmFmdGVyIHtcXG4gIG9wYWNpdHk6ICAxO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy1jb250YWluZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbnRlbnQ6IFwiXCI7XFxuICBoZWlnaHQ6IDExMCU7XFxuICB3aWR0aDogMzBweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI1NSAyNTUgMjU1IC8gMCksICAjZmZmICk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAtMXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMXMgZWFzZS1vdXQ7XFxuICB6LWluZGV4OiAgMTA7XFxufVxcblxcbi5zY3JvbGwtcG9zaXRpb24tZW5kOmJlZm9yZSxcXG4uc2Nyb2xsLXBvc2l0aW9uLW1pZGRsZTpiZWZvcmUge1xcbiAgb3BhY2l0eTogIDE7XFxufVxcblxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXIge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXI6YmVmb3JlLFxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXI6YWZ0ZXIge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMubm8tcmVwbGFjZW1lbnQge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgwIDAgMCAvIDE1JSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1kZXNjcmlwdGlvbi10ZXh0IHtcXG4gIG1hcmdpbjogMnB4IDAgNHB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1jdGFzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBtYXJnaW46IC00cHggLThweCAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiA2cHggMTBweDtcXG4gIGdhcDogNnB4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICM2ZTc1NzU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5LmRlbGV0ZS1pcy1ob3ZlcmVkOmJlZm9yZSB7XFxuICBjb250ZW50OiBcIkRpc21pc3NcIjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTMwcHg7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAgMCAwIC8gODAlKTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeS5kZWxldGUtaXMtaG92ZXJlZDphZnRlciB7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC04cHg7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICBib3JkZXItdG9wOiAzcHggc29saWQgcmdiYSgwIDAgMCAvIDgwJSk7XFxuICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzYpO1xcbiAgYm9yZGVyOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmVtcHR5LXN0YXRlLWhlYWRpbmcge1xcbiAgY29sb3I6IHJnYmEoMCAwIDAgLyA3MCUpO1xcbiAgbWFyZ2luOiAwIDAgNnB4O1xcbiAgbWF4LXdpZHRoOiAgODAlO1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbn1cXG5cXG4uZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgY29sb3I6IHJnYmEoMCAwIDAgLyA2MCUpO1xcbiAgbWFyZ2luOiAwO1xcbiAgbWF4LXdpZHRoOiAgODAlO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6ICAxNDAlO1xcbn1cXG4nLFwiXCJdKTtjb25zdCBNPW99LDY0NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihlKXt2YXIgYT1cIlwiLGk9dm9pZCAwIT09ZVs1XTtyZXR1cm4gZVs0XSYmKGErPVwiQHN1cHBvcnRzIChcIi5jb25jYXQoZVs0XSxcIikge1wiKSksZVsyXSYmKGErPVwiQG1lZGlhIFwiLmNvbmNhdChlWzJdLFwiIHtcIikpLGkmJihhKz1cIkBsYXllclwiLmNvbmNhdChlWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChlWzVdKTpcIlwiLFwiIHtcIikpLGErPW4oZSksaSYmKGErPVwifVwiKSxlWzJdJiYoYSs9XCJ9XCIpLGVbNF0mJihhKz1cIn1cIiksYX0pKS5qb2luKFwiXCIpfSxlLmk9ZnVuY3Rpb24obixhLGkscix0KXtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49W1tudWxsLG4sdm9pZCAwXV0pO3ZhciBvPXt9O2lmKGkpZm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspe3ZhciBzPXRoaXNbTV1bMF07bnVsbCE9cyYmKG9bc109ITApfWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1bXS5jb25jYXQobltsXSk7aSYmb1tjWzBdXXx8KHZvaWQgMCE9PXQmJih2b2lkIDA9PT1jWzVdfHwoY1sxXT1cIkBsYXllclwiLmNvbmNhdChjWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChjWzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpKSxjWzVdPXQpLGEmJihjWzJdPyhjWzFdPVwiQG1lZGlhIFwiLmNvbmNhdChjWzJdLFwiIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpLGNbMl09YSk6Y1syXT1hKSxyJiYoY1s0XT8oY1sxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGNbNF0sXCIpIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpLGNbNF09cik6Y1s0XT1cIlwiLmNvbmNhdChyKSksZS5wdXNoKGMpKX19LGV9fSw4MTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfX0sNDcwOm49PntcInVzZSBzdHJpY3RcIjt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1mdW5jdGlvbihuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkobik6XCJbb2JqZWN0IEFycmF5XVwiPT09YS5jYWxsKG4pfSxvPWZ1bmN0aW9uKG4pe2lmKCFufHxcIltvYmplY3QgT2JqZWN0XVwiIT09YS5jYWxsKG4pKXJldHVybiExO3ZhciBpLHI9ZS5jYWxsKG4sXCJjb25zdHJ1Y3RvclwiKSx0PW4uY29uc3RydWN0b3ImJm4uY29uc3RydWN0b3IucHJvdG90eXBlJiZlLmNhbGwobi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpO2lmKG4uY29uc3RydWN0b3ImJiFyJiYhdClyZXR1cm4hMTtmb3IoaSBpbiBuKTtyZXR1cm4gdm9pZCAwPT09aXx8ZS5jYWxsKG4saSl9LE09ZnVuY3Rpb24obixlKXtpJiZcIl9fcHJvdG9fX1wiPT09ZS5uYW1lP2kobixlLm5hbWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOmUubmV3VmFsdWUsd3JpdGFibGU6ITB9KTpuW2UubmFtZV09ZS5uZXdWYWx1ZX0scz1mdW5jdGlvbihuLGEpe2lmKFwiX19wcm90b19fXCI9PT1hKXtpZighZS5jYWxsKG4sYSkpcmV0dXJuO2lmKHIpcmV0dXJuIHIobixhKS52YWx1ZX1yZXR1cm4gblthXX07bi5leHBvcnRzPWZ1bmN0aW9uIG4oKXt2YXIgZSxhLGkscixsLGMsUz1hcmd1bWVudHNbMF0sdT0xLGQ9YXJndW1lbnRzLmxlbmd0aCxtPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIFMmJihtPVMsUz1hcmd1bWVudHNbMV18fHt9LHU9MiksKG51bGw9PVN8fFwib2JqZWN0XCIhPXR5cGVvZiBTJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBTKSYmKFM9e30pO3U8ZDsrK3UpaWYobnVsbCE9KGU9YXJndW1lbnRzW3VdKSlmb3IoYSBpbiBlKWk9cyhTLGEpLFMhPT0ocj1zKGUsYSkpJiYobSYmciYmKG8ocil8fChsPXQocikpKT8obD8obD0hMSxjPWkmJnQoaSk/aTpbXSk6Yz1pJiZvKGkpP2k6e30sTShTLHtuYW1lOmEsbmV3VmFsdWU6bihtLGMscil9KSk6dm9pZCAwIT09ciYmTShTLHtuYW1lOmEsbmV3VmFsdWU6cn0pKTtyZXR1cm4gU319LDI5MTpuPT57IWZ1bmN0aW9uKCl7dmFyIGU7ZnVuY3Rpb24gYShuKXtmb3IodmFyIGUsYSxpLHIsdD0xLG89W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLE09MCxzPW4ubGVuZ3RoLGw9XCJcIixjPSExLFM9ITEsdT1mdW5jdGlvbigpe3JldHVybiBvW3QrK119LGQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9XCJcIjsvXFxkLy50ZXN0KG5bTV0pOylhKz1uW00rK10sZT1uW01dO3JldHVybiBhLmxlbmd0aD4wP3BhcnNlSW50KGEpOm51bGx9O008czsrK00paWYoZT1uW01dLGMpc3dpdGNoKGM9ITEsXCIuXCI9PWU/KFM9ITEsZT1uWysrTV0pOlwiMFwiPT1lJiZcIi5cIj09bltNKzFdPyhTPSEwLGU9bltNKz0yXSk6Uz0hMCxyPWQoKSxlKXtjYXNlXCJiXCI6bCs9cGFyc2VJbnQodSgpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlXCJjXCI6bCs9XCJzdHJpbmdcIj09dHlwZW9mKGE9dSgpKXx8YSBpbnN0YW5jZW9mIFN0cmluZz9hOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYSwxMCkpO2JyZWFrO2Nhc2VcImRcIjpsKz1wYXJzZUludCh1KCksMTApO2JyZWFrO2Nhc2VcImZcIjppPVN0cmluZyhwYXJzZUZsb2F0KHUoKSkudG9GaXhlZChyfHw2KSksbCs9Uz9pOmkucmVwbGFjZSgvXjAvLFwiXCIpO2JyZWFrO2Nhc2VcImpcIjpsKz1KU09OLnN0cmluZ2lmeSh1KCkpO2JyZWFrO2Nhc2VcIm9cIjpsKz1cIjBcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2VcInNcIjpsKz11KCk7YnJlYWs7Y2FzZVwieFwiOmwrPVwiMHhcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlXCJYXCI6bCs9XCIweFwiK3BhcnNlSW50KHUoKSwxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7YnJlYWs7ZGVmYXVsdDpsKz1lfWVsc2VcIiVcIj09PWU/Yz0hMDpsKz1lO3JldHVybiBsfShlPW4uZXhwb3J0cz1hKS5mb3JtYXQ9YSxlLnZzcHJpbnRmPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGEuYXBwbHkobnVsbCxbbl0uY29uY2F0KGUpKX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUubG9nJiYoZS5wcmludGY9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhhLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9KX0oKX0sNzM4Om49PntuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm51bGwhPW4uY29uc3RydWN0b3ImJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY29uc3RydWN0b3IuaXNCdWZmZXImJm4uY29uc3RydWN0b3IuaXNCdWZmZXIobil9fSw1OmZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyO3I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyx2b2lkIDA9PT0oaT1mdW5jdGlvbigpe3JldHVybiByLmRvY3VtZW50LGk9YSg3NjEpLHQ9bnVsbCxmdW5jdGlvbihhLHIpe3JldHVybiBlPW4sbj1yfHxpLHQ9dCYmZT09PW4/dDpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFJlZ0V4cChcIltcIitPYmplY3Qua2V5cyhuKS5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSkpLmpvaW4oXCIgXCIpK1wiXVwiLFwiZ1wiKX0obiksYS5yZXBsYWNlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBuW2UuY2hhckNvZGVBdCgwKV18fGV9KSl9O3ZhciBuLGUsaSx0fS5jYWxsKGUsYSxlLG4pKXx8KG4uZXhwb3J0cz1pKX0sNDk1OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDUzNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7dmFyIGE9dGhpcztyZXR1cm4gaShhLmRhdGEsbixhLmRhdGFbZV18fHIsYSksYX07dmFyIHI9W119LDU5NjoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSgxMCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKGkodGhpcyxuKSl9fSw3Njk6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTEwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxyLHQsbz10aGlzLE09LTE7Zm9yKGkobixvLG8uZGF0YSk7KytNPG8uY29tcG91bmRSdWxlcy5sZW5ndGg7KXtmb3IoZT1vLmNvbXBvdW5kUnVsZXNbTV0sYT1cIlwiLHQ9LTE7Kyt0PGUubGVuZ3RoOylyPWUuY2hhckF0KHQpLGErPW8uY29tcG91bmRSdWxlQ29kZXNbcl0ubGVuZ3RoP1wiKD86XCIrby5jb21wb3VuZFJ1bGVDb2Rlc1tyXS5qb2luKFwifFwiKStcIilcIjpyO28uY29tcG91bmRSdWxlc1tNXT1uZXcgUmVnRXhwKGEsXCJpXCIpfXJldHVybiBvfX0sNDI3OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDczOCkscj1hKDkxNik7bi5leHBvcnRzPW87dmFyIHQ9by5wcm90b3R5cGU7ZnVuY3Rpb24gbyhuLGUpe3ZhciBhLHQ9LTE7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKG4sZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG58fGkobik/KFwic3RyaW5nXCI9PXR5cGVvZiBlfHxpKGUpKSYmKGE9W3tkaWM6ZX1dKTpuJiYoXCJsZW5ndGhcImluIG4/KGE9bixuPW5bMF0mJm5bMF0uYWZmKToobi5kaWMmJihhPVtuXSksbj1uLmFmZikpLCFuKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYGFmZmAgaW4gZGljdGlvbmFyeVwiKTtpZihuPXIobiksdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21wb3VuZFJ1bGVDb2Rlcz1uLmNvbXBvdW5kUnVsZUNvZGVzLHRoaXMucmVwbGFjZW1lbnRUYWJsZT1uLnJlcGxhY2VtZW50VGFibGUsdGhpcy5jb252ZXJzaW9uPW4uY29udmVyc2lvbix0aGlzLmNvbXBvdW5kUnVsZXM9bi5jb21wb3VuZFJ1bGVzLHRoaXMucnVsZXM9bi5ydWxlcyx0aGlzLmZsYWdzPW4uZmxhZ3MsYSlmb3IoOysrdDxhLmxlbmd0aDspYVt0XS5kaWMmJnRoaXMuZGljdGlvbmFyeShhW3RdLmRpYyl9dC5jb3JyZWN0PWEoNTk2KSx0LnN1Z2dlc3Q9YSgxMzIpLHQuc3BlbGw9YSg1MDEpLHQuYWRkPWEoNDk1KSx0LnJlbW92ZT1hKDQ3NSksdC53b3JkQ2hhcmFjdGVycz1hKDQ5MiksdC5kaWN0aW9uYXJ5PWEoNzY5KSx0LnBlcnNvbmFsPWEoMjE5KX0sMjE5Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxpLHIsdD10aGlzLG89bi50b1N0cmluZyhcInV0ZjhcIikuc3BsaXQoXCJcXG5cIiksTT0tMTtmb3Iodm9pZCAwPT09dC5mbGFncy5GT1JCSURERU5XT1JEJiYodC5mbGFncy5GT1JCSURERU5XT1JEPSExKSxyPXQuZmxhZ3MuRk9SQklEREVOV09SRDsrK008by5sZW5ndGg7KShlPW9bTV0udHJpbSgpKSYmKChhPVwiKlwiPT09KGk9KGU9ZS5zcGxpdChcIi9cIikpWzBdKS5jaGFyQXQoMCkpJiYoaT1pLnNsaWNlKDEpKSx0LmFkZChpLGVbMV0pLGEmJnQuZGF0YVtpXS5wdXNoKHIpKTtyZXR1cm4gdH19LDQ3NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBkZWxldGUgdGhpcy5kYXRhW25dLHRoaXN9fSw1MDE6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTApLHI9YSgzNjApO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT10aGlzLGE9aShlLG4sITApO3JldHVybntjb3JyZWN0OmUuY29ycmVjdChuKSxmb3JiaWRkZW46Qm9vbGVhbihhJiZyKGUuZmxhZ3MsXCJGT1JCSURERU5XT1JEXCIsZS5kYXRhW2FdKSksd2FybjpCb29sZWFuKGEmJnIoZS5mbGFncyxcIldBUk5cIixlLmRhdGFbYV0pKX19fSwxMzI6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoODMyKSxyPWEoNTc3KSx0PWEoMzYwKSxvPWEoMTApO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZSxhLHQsbyxsLGMsUyx1LGQsbSxwLGgsZyx5LGIsRCxmLEcsdyx2LGssUixZLEEsUCxDPXRoaXMsVD17fSx4PVtdLHo9e30sRT1bXTtpZighKG49cihuLnRyaW0oKSxDLmNvbnZlcnNpb24uaW4pKXx8Qy5jb3JyZWN0KG4pKXJldHVybltdO2ZvcihQPWkobiksbz0tMTsrK288Qy5yZXBsYWNlbWVudFRhYmxlLmxlbmd0aDspZm9yKGE9Qy5yZXBsYWNlbWVudFRhYmxlW29dLGw9bi5pbmRleE9mKGFbMF0pO2w+LTE7KUUucHVzaChuLnJlcGxhY2UoYVswXSxhWzFdKSksbD1uLmluZGV4T2YoYVswXSxsKzEpO2ZvcihvPS0xOysrbzxuLmxlbmd0aDspZm9yKG09bi5jaGFyQXQobyksaD1uLnNsaWNlKDAsbyksZz1uLnNsaWNlKG8rMSkseT0oYj1tLnRvTG93ZXJDYXNlKCkpIT09bSxUPXt9LGw9LTE7KytsPEMuZmxhZ3MuS0VZLmxlbmd0aDspaWYoISgoYz0ocD1DLmZsYWdzLktFWVtsXSkuaW5kZXhPZihiKSk8MCkpZm9yKHU9LTE7Kyt1PHAubGVuZ3RoOylpZih1IT09Yyl7aWYoVFtkPXAuY2hhckF0KHUpXSljb250aW51ZTtUW2RdPSEwLHkmJihkPWQudG9VcHBlckNhc2UoKSksRS5wdXNoKGgrZCtnKX1mb3Iobz0tMSx3PW4uY2hhckF0KDApLHQ9W1wiXCJdLHY9MSxrPTA7KytvPG4ubGVuZ3RoOyl7Zm9yKG09dyx3PW4uY2hhckF0KG8rMSksaD1uLnNsaWNlKDAsbyksYT1tPT09dz9cIlwiOm0rbSxsPS0xLFM9dC5sZW5ndGg7KytsPFM7KWw8PXYmJnQucHVzaCh0W2xdK2EpLHRbbF0rPW07KytrPDMmJih2PXQubGVuZ3RoKX1mb3IoTS5hcHBseShFLHQpLHQ9W25dLGE9bi50b0xvd2VyQ2FzZSgpLChuPT09YXx8bnVsbD09PVApJiZ0LnB1c2gobi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnNsaWNlKDEpKSxhPW4udG9VcHBlckNhc2UoKSxuIT09YSYmdC5wdXNoKGEpLEQ9cyhDLGU9e3N0YXRlOnt9LHdlaWdodGVkOnosc3VnZ2VzdGlvbnM6eH0sdCxFKSxmPTAsdj1NYXRoLm1pbihELmxlbmd0aCxNYXRoLnBvdyhNYXRoLm1heCgxNS1uLmxlbmd0aCwzKSwzKSksUj1NYXRoLm1heChNYXRoLnBvdygxMC1uLmxlbmd0aCwzKSwxKTsheC5sZW5ndGgmJmY8djspRz1mK1IscyhDLGUsRC5zbGljZShmLEcpKSxmPUc7Zm9yKHguc29ydCgoZnVuY3Rpb24obixlKXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4geltuXT09PXpbZV0/MDp6W25dPnpbZV0/LTE6MX0obixlKXx8ZnVuY3Rpb24obixlKXt2YXIgYT1pKG4pLHI9aShlKTtyZXR1cm4gYT09PXI/MDphPT09UD8tMTpyPT09UD8xOnZvaWQgMH0obixlKXx8ZnVuY3Rpb24obixlKXtyZXR1cm4gbi5sb2NhbGVDb21wYXJlKGUpfShuLGUpfSkpLHQ9W10sWT1bXSxvPS0xOysrbzx4Lmxlbmd0aDspYT0oQT1yKHhbb10sQy5jb252ZXJzaW9uLm91dCkpLnRvTG93ZXJDYXNlKCksWS5pbmRleE9mKGEpPDAmJih0LnB1c2goQSksWS5wdXNoKGEpKTtyZXR1cm4gdH07dmFyIE09W10ucHVzaDtmdW5jdGlvbiBzKG4sZSxhLHIpe3ZhciBNLHMsbCxjLFMsdSxkLG0scCxoLGcseSxiLEQ9bi5mbGFncy5UUlksZj1uLmRhdGEsRz1uLmZsYWdzLHc9W10sdj0tMTtpZihyKWZvcig7Kyt2PHIubGVuZ3RoOylrKHJbdl0sITApO2Zvcih2PS0xOysrdjxhLmxlbmd0aDspZm9yKHM9XCJcIixsPVwiXCIsYz0oTT1hW3ZdKS5jaGFyQXQoMCksUz1NLHU9TS5zbGljZSgxKSxkPWMudG9Mb3dlckNhc2UoKSE9PWMsbT1pKE0pLHA9LTE7KytwPD1NLmxlbmd0aDspZm9yKHMrPWwsaD1TLHU9KFM9dSkuc2xpY2UoMSksbD1jLGc9ZCwoYz1NLmNoYXJBdChwKzEpKSYmKGQ9Yy50b0xvd2VyQ2FzZSgpIT09YyksUyYmZyE9PWQmJihrKHMrUihTKSksayhzK1IoYykrUihsKSt1KSksayhzK1MpLFMmJmsocytjK2wrdSksYj0tMTsrK2I8RC5sZW5ndGg7KXk9RFtiXSxnJiZ5IT09eS50b1VwcGVyQ2FzZSgpPyhcInNcIiE9PW0mJihrKHMreStoKSxrKHMreStTKSksayhzKyh5PXkudG9VcHBlckNhc2UoKSkraCksayhzK3krUykpOihrKHMreStoKSxrKHMreStTKSk7cmV0dXJuIHc7ZnVuY3Rpb24gayhhLGkpe3ZhciByLE09ZS5zdGF0ZVthXTtNIT09Qm9vbGVhbihNKSYmKHcucHVzaChhKSxNPShyPW8obixhKSkmJiF0KEcsXCJOT1NVR0dFU1RcIixmW3JdKSxlLnN0YXRlW2FdPU0sTSYmKGUud2VpZ2h0ZWRbYV09aT8xMDowLGUuc3VnZ2VzdGlvbnMucHVzaChhKSkpLE0mJmUud2VpZ2h0ZWRbYV0rK31mdW5jdGlvbiBSKG4pe3ZhciBlPW4uY2hhckF0KDApO3JldHVybihlLnRvTG93ZXJDYXNlKCk9PT1lP2UudG9VcHBlckNhc2UoKTplLnRvTG93ZXJDYXNlKCkpK24uc2xpY2UoMSl9fX0sNTM0OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDkxNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhLG8pe3ZhciBNLHMsbCxjLFMsdSxkLG09LTE7KCEoXCJORUVEQUZGSVhcImluIG8uZmxhZ3MpfHxhLmluZGV4T2Yoby5mbGFncy5ORUVEQUZGSVgpPDApJiZmdW5jdGlvbihuLGUsYSl7dmFyIGk9bltlXTtlIGluIG4/aT09PXQ/bltlXT1hLmNvbmNhdCgpOnIuYXBwbHkoaSxhKTpuW2VdPWEuY29uY2F0KCl9KG4sZSxhKTtmb3IoOysrbTxhLmxlbmd0aDspaWYoTT1vLnJ1bGVzW2FbbV1dLGFbbV1pbiBvLmNvbXBvdW5kUnVsZUNvZGVzJiZvLmNvbXBvdW5kUnVsZUNvZGVzW2FbbV1dLnB1c2goZSksTSlmb3IodT1pKGUsTSxvLnJ1bGVzLFtdKSxzPS0xOysrczx1Lmxlbmd0aDspaWYodVtzXWluIG58fChuW3Vbc11dPXQpLE0uY29tYmluZWFibGUpZm9yKGw9bTsrK2w8YS5sZW5ndGg7KWlmKChTPW8ucnVsZXNbYVtsXV0pJiZTLmNvbWJpbmVhYmxlJiZNLnR5cGUhPT1TLnR5cGUpZm9yKGQ9aSh1W3NdLFMsby5ydWxlcyxbXSksYz0tMTsrK2M8ZC5sZW5ndGg7KWRbY11pbiBufHwobltkW2NdXT10KX07dmFyIHI9W10ucHVzaCx0PVtdfSw5MTY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTI5KTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxjLFMsdSxkLG0scCxoLGcseSxiLEQ9T2JqZWN0LmNyZWF0ZShudWxsKSxmPU9iamVjdC5jcmVhdGUobnVsbCksRz1PYmplY3QuY3JlYXRlKG51bGwpLHc9W10sdj17aW46W10sb3V0OltdfSxrPVtdLFI9bi50b1N0cmluZyhcInV0ZjhcIiksWT1bXSxBPTAsUD1SLmluZGV4T2YoXCJcXG5cIik7Zm9yKEcuS0VZPVtdO1A+LTE7KUMoUi5zbGljZShBLFApKSxBPVArMSxQPVIuaW5kZXhPZihcIlxcblwiLEEpO2ZvcihDKFIuc2xpY2UoQSkpLFA9LTE7KytQPFkubGVuZ3RoOylpZihcIlJFUFwiPT09KGE9KGU9WVtQXS5zcGxpdChvKSlbMF0pKXtmb3IoYz1QK3BhcnNlSW50KGVbMV0sMTApOysrUDw9YzspZT1ZW1BdLnNwbGl0KG8pLHcucHVzaChbZVsxXSxlWzJdXSk7UC0tfWVsc2UgaWYoXCJJQ09OVlwiPT09YXx8XCJPQ09OVlwiPT09YSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKSxtPXZbXCJJQ09OVlwiPT09YT9cImluXCI6XCJvdXRcIl07KytQPD1jOyllPVlbUF0uc3BsaXQobyksbS5wdXNoKFtuZXcgUmVnRXhwKGVbMV0sXCJnXCIpLGVbMl1dKTtQLS19ZWxzZSBpZihcIkNPTVBPVU5EUlVMRVwiPT09YSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKTsrK1A8PWM7KWZvcihoPVlbUF0uc3BsaXQobylbMV0scD0tMSxrLnB1c2goaCk7KytwPGgubGVuZ3RoOylmW2guY2hhckF0KHApXT1bXTtQLS19ZWxzZSBpZihcIlBGWFwiPT09YXx8XCJTRlhcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVszXSwxMCksaD17dHlwZTphLGNvbWJpbmVhYmxlOlwiWVwiPT09ZVsyXSxlbnRyaWVzOltdfSxEW2VbMV1dPWg7KytQPD1jOyl7Uz0oZT1ZW1BdLnNwbGl0KG8pKVsyXSx1PWVbM10uc3BsaXQoXCIvXCIpLGQ9ZVs0XSxtPXthZGQ6XCJcIixyZW1vdmU6XCJcIixtYXRjaDpcIlwiLGNvbnRpbnVhdGlvbjppKEcsdVsxXSl9LHUmJlwiMFwiIT09dVswXSYmKG0uYWRkPXVbMF0pO3RyeXtcIjBcIiE9PVMmJihtLnJlbW92ZT1cIlNGWFwiPT09YT9zKFMpOlMpLGQmJlwiLlwiIT09ZCYmKG0ubWF0Y2g9XCJTRlhcIj09PWE/cyhkKTpsKGQpKX1jYXRjaChuKXttPW51bGx9bSYmaC5lbnRyaWVzLnB1c2gobSl9UC0tfWVsc2UgaWYoXCJUUllcIj09PWEpe2ZvcihkPWVbMV0seT0tMSxnPVtdOysreTxkLmxlbmd0aDspKGI9ZC5jaGFyQXQoeSkpLnRvTG93ZXJDYXNlKCk9PT1iJiZnLnB1c2goYik7Zm9yKHk9LTE7Kyt5PHQubGVuZ3RoOylkLmluZGV4T2YodFt5XSk8MCYmZy5wdXNoKHRbeV0pO0dbYV09Z31lbHNlXCJLRVlcIj09PWE/ci5hcHBseShHW2FdLGVbMV0uc3BsaXQoXCJ8XCIpKTpcIkNPTVBPVU5ETUlOXCI9PT1hP0dbYV09TnVtYmVyKGVbMV0pOlwiT05MWUlOQ09NUE9VTkRcIj09PWE/KEdbYV09ZVsxXSxmW2VbMV1dPVtdKTpHW2FdPWVbMV07cmV0dXJuIGlzTmFOKEcuQ09NUE9VTkRNSU4pJiYoRy5DT01QT1VORE1JTj0zKSxHLktFWS5sZW5ndGh8fChHLktFWT1NKSxHLlRSWXx8KEcuVFJZPXQuY29uY2F0KCkpLEcuS0VFUENBU0V8fChHLktFRVBDQVNFPSExKSx7Y29tcG91bmRSdWxlQ29kZXM6ZixyZXBsYWNlbWVudFRhYmxlOncsY29udmVyc2lvbjp2LGNvbXBvdW5kUnVsZXM6ayxydWxlczpELGZsYWdzOkd9O2Z1bmN0aW9uIEMobil7KG49bi50cmltKCkpJiYzNSE9PW4uY2hhckNvZGVBdCgwKSYmWS5wdXNoKG4pfX07dmFyIHI9W10ucHVzaCx0PVwiZXRhb2luc2hyZGxjdW13Zmd5cGJ2a2p4cXpcIi5zcGxpdChcIlwiKSxvPS9cXHMrLyxNPVtcInF3ZXJ0enVvcFwiLFwieXhjdmJubVwiLFwicWF3XCIsXCJzYXlcIixcIndzZVwiLFwiZHN4XCIsXCJzeVwiLFwiZWRyXCIsXCJmZGNcIixcImR4XCIsXCJyZnRcIixcImdmdlwiLFwiZmNcIixcInRnelwiLFwiaGdiXCIsXCJndlwiLFwiemh1XCIsXCJqaG5cIixcImhiXCIsXCJ1amlcIixcImtqbVwiLFwiam5cIixcImlrb1wiLFwibGttXCJdO2Z1bmN0aW9uIHMobil7cmV0dXJuIG5ldyBSZWdFeHAobitcIiRcIil9ZnVuY3Rpb24gbChuKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl5cIituKX19LDkxNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uIG4oZSxhLGkscil7Zm9yKHZhciB0LG8sTSxzLGwsYz0tMTsrK2M8YS5lbnRyaWVzLmxlbmd0aDspaWYocz0odD1hLmVudHJpZXNbY10pLmNvbnRpbnVhdGlvbixsPS0xLCghdC5tYXRjaHx8dC5tYXRjaC50ZXN0KGUpKSYmKG89dC5yZW1vdmU/ZS5yZXBsYWNlKHQucmVtb3ZlLFwiXCIpOmUsbz1cIlNGWFwiPT09YS50eXBlP28rdC5hZGQ6dC5hZGQrbyxyLnB1c2gobykscyYmcy5sZW5ndGgpKWZvcig7KytsPHMubGVuZ3RoOykoTT1pW3NbbF1dKSYmbihvLE0saSxyKTtyZXR1cm4gcn19LDgzMjpuPT57XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj09PW4udG9Mb3dlckNhc2UoKT9cImxcIjpuPT09bi50b1VwcGVyQ2FzZSgpP1widVwiOm51bGx9bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBhPWUobi5jaGFyQXQoMCkpLGk9bi5zbGljZSgxKTtyZXR1cm4gaT9hPT09KGk9ZShpKSk/YTpcInVcIj09PWEmJlwibFwiPT09aT9cInNcIjpudWxsOmF9fSwxMTA6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTI5KSxyPWEoNTM0KTtuLmV4cG9ydHM9ZnVuY3Rpb24obixlLGEpe2Zvcih2YXIgaT1uLnRvU3RyaW5nKFwidXRmOFwiKSxyPWkuaW5kZXhPZihcIlxcblwiKSsxLHQ9aS5pbmRleE9mKFwiXFxuXCIscik7dD4tMTspOSE9PWkuY2hhckNvZGVBdChyKSYmbyhpLnNsaWNlKHIsdCksZSxhKSxyPXQrMSx0PWkuaW5kZXhPZihcIlxcblwiLHIpO28oaS5zbGljZShyKSxlLGEpfTt2YXIgdD0vXFxzL2c7ZnVuY3Rpb24gbyhuLGUsYSl7Zm9yKHZhciBvLE0scz1uLmluZGV4T2YoXCIvXCIpLGw9bi5pbmRleE9mKFwiI1wiKSxjPVwiXCI7cz4tMSYmOTI9PT1uLmNoYXJDb2RlQXQocy0xKTspcz0obj1uLnNsaWNlKDAscy0xKStuLnNsaWNlKHMpKS5pbmRleE9mKFwiL1wiLHMpO2w+LTE/cz4tMSYmczxsPyhvPW4uc2xpY2UoMCxzKSx0Lmxhc3RJbmRleD1zKzEsTT10LmV4ZWMobiksYz1uLnNsaWNlKHMrMSxNP00uaW5kZXg6dm9pZCAwKSk6bz1uLnNsaWNlKDAsbCk6cz4tMT8obz1uLnNsaWNlKDAscyksYz1uLnNsaWNlKHMrMSkpOm89biwobz1vLnRyaW0oKSkmJnIoYSxvLGkoZS5mbGFncyxjLnRyaW0oKSksZSl9fSwyMzY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMzYwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obixlKXt2YXIgYT0tMTtpZihuLmRhdGFbZV0pcmV0dXJuIWkobi5mbGFncyxcIk9OTFlJTkNPTVBPVU5EXCIsbi5kYXRhW2VdKTtpZihlLmxlbmd0aD49bi5mbGFncy5DT01QT1VORE1JTilmb3IoOysrYTxuLmNvbXBvdW5kUnVsZXMubGVuZ3RoOylpZihuLmNvbXBvdW5kUnVsZXNbYV0udGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX19LDM2MDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXtyZXR1cm4gYSYmZSBpbiBuJiZhLmluZGV4T2YobltlXSk+LTF9fSwxMDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg1NzcpLHI9YSgyMzYpLHQ9YSgzNjApO2Z1bmN0aW9uIG8obixlLGEpe3JldHVybiB0KG4sXCJLRUVQQ0FTRVwiLGUpfHxhfHx0KG4sXCJGT1JCSURERU5XT1JEXCIsZSl9bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXt2YXIgTSxzPWUudHJpbSgpO2lmKCFzKXJldHVybiBudWxsO2lmKHM9aShzLG4uY29udmVyc2lvbi5pbikscihuLHMpKXJldHVybiFhJiZ0KG4uZmxhZ3MsXCJGT1JCSURERU5XT1JEXCIsbi5kYXRhW3NdKT9udWxsOnM7aWYocy50b1VwcGVyQ2FzZSgpPT09cyl7aWYoTT1zLmNoYXJBdCgwKStzLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCksbyhuLmZsYWdzLG4uZGF0YVtNXSxhKSlyZXR1cm4gbnVsbDtpZihyKG4sTSkpcmV0dXJuIE19aWYoKE09cy50b0xvd2VyQ2FzZSgpKSE9PXMpe2lmKG8obi5mbGFncyxuLmRhdGFbTV0sYSkpcmV0dXJuIG51bGw7aWYocihuLE0pKXJldHVybiBNfXJldHVybiBudWxsfX0sNTc3Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obixlKXtmb3IodmFyIGE9LTE7KythPGUubGVuZ3RoOyluPW4ucmVwbGFjZShlW2FdWzBdLGVbYV1bMV0pO3JldHVybiBufX0sMTI5Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obixhKXt2YXIgaSxyPTA7aWYoIWEpcmV0dXJuIGU7aWYoXCJsb25nXCI9PT1uLkZMQUcpe2ZvcihpPW5ldyBBcnJheShNYXRoLmNlaWwoYS5sZW5ndGgvMikpO3I8YS5sZW5ndGg7KWlbci8yXT1hLnNsaWNlKHIscisyKSxyKz0yO3JldHVybiBpfXJldHVybiBhLnNwbGl0KFwibnVtXCI9PT1uLkZMQUc/XCIsXCI6XCJcIil9O3ZhciBlPVtdfSw0OTI6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYWdzLldPUkRDSEFSU3x8bnVsbH19LDQzMjoobixlLGEpPT57IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShuKXtyZXR1cm4hKFwibnVtYmVyXCIhPXR5cGVvZiBufHxuIT1ufHxuPT09MS8wfHxuPT09LTEvMCl9ZnVuY3Rpb24gcihuKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgbiYmTWF0aC5hYnMobik8PTkwMDcxOTkyNTQ3NDA5OTF9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGYmJnNlbGZ8fFwib2JqZWN0XCI9PXR5cGVvZiBhLmcmJmEuZy5nbG9iYWw9PT1hLmcmJmEuZzt2YXIgdD0vKGh1bmRyZWR8dGhvdXNhbmR8KG18Ynx0cnxxdWFkcilpbGxpb24pJC8sbz0vdGVlbiQvLE09L3kkLyxzPS8oemVyb3xvbmV8dHdvfHRocmVlfGZvdXJ8Zml2ZXxzaXh8c2V2ZW58ZWlnaHR8bmluZXx0ZW58ZWxldmVufHR3ZWx2ZSkkLyxsPXt6ZXJvOlwiemVyb3RoXCIsb25lOlwiZmlyc3RcIix0d286XCJzZWNvbmRcIix0aHJlZTpcInRoaXJkXCIsZm91cjpcImZvdXJ0aFwiLGZpdmU6XCJmaWZ0aFwiLHNpeDpcInNpeHRoXCIsc2V2ZW46XCJzZXZlbnRoXCIsZWlnaHQ6XCJlaWdodGhcIixuaW5lOlwibmludGhcIix0ZW46XCJ0ZW50aFwiLGVsZXZlbjpcImVsZXZlbnRoXCIsdHdlbHZlOlwidHdlbGZ0aFwifTtmdW5jdGlvbiBjKG4pe3JldHVybiB0LnRlc3Qobil8fG8udGVzdChuKT9uK1widGhcIjpNLnRlc3Qobik/bi5yZXBsYWNlKE0sXCJpZXRoXCIpOnMudGVzdChuKT9uLnJlcGxhY2UocyxTKTpufWZ1bmN0aW9uIFMobixlKXtyZXR1cm4gbFtlXX12YXIgdT0xMDAsZD0xZTMsbT0xZTYscD0xZTksaD0xZTEyLGc9MWUxNSx5PTkwMDcxOTkyNTQ3NDA5OTIsYj1bXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJ0ZW5cIixcImVsZXZlblwiLFwidHdlbHZlXCIsXCJ0aGlydGVlblwiLFwiZm91cnRlZW5cIixcImZpZnRlZW5cIixcInNpeHRlZW5cIixcInNldmVudGVlblwiLFwiZWlnaHRlZW5cIixcIm5pbmV0ZWVuXCJdLEQ9W1wiemVyb1wiLFwidGVuXCIsXCJ0d2VudHlcIixcInRoaXJ0eVwiLFwiZm9ydHlcIixcImZpZnR5XCIsXCJzaXh0eVwiLFwic2V2ZW50eVwiLFwiZWlnaHR5XCIsXCJuaW5ldHlcIl07ZnVuY3Rpb24gZihuLGUpe3ZhciBhLHQ9cGFyc2VJbnQobiwxMCk7aWYoIWkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBhIGZpbml0ZSBudW1iZXI6IFwiK24rXCIgKFwiK3R5cGVvZiBuK1wiKVwiKTtpZighcih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklucHV0IGlzIG5vdCBhIHNhZmUgbnVtYmVyLCBpdOKAmXMgZWl0aGVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwuXCIpO3JldHVybiBhPWZ1bmN0aW9uIG4oZSl7dmFyIGEsaSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gMD09PWU/cj9yLmpvaW4oXCIgXCIpLnJlcGxhY2UoLywkLyxcIlwiKTpcInplcm9cIjoocnx8KHI9W10pLGU8MCYmKHIucHVzaChcIm1pbnVzXCIpLGU9TWF0aC5hYnMoZSkpLGU8MjA/KGE9MCxpPWJbZV0pOmU8dT8oYT1lJTEwLGk9RFtNYXRoLmZsb29yKGUvMTApXSxhJiYoaSs9XCItXCIrYlthXSxhPTApKTplPGQ/KGE9ZSV1LGk9bihNYXRoLmZsb29yKGUvdSkpK1wiIGh1bmRyZWRcIik6ZTxtPyhhPWUlZCxpPW4oTWF0aC5mbG9vcihlL2QpKStcIiB0aG91c2FuZCxcIik6ZTxwPyhhPWUlbSxpPW4oTWF0aC5mbG9vcihlL20pKStcIiBtaWxsaW9uLFwiKTplPGg/KGE9ZSVwLGk9bihNYXRoLmZsb29yKGUvcCkpK1wiIGJpbGxpb24sXCIpOmU8Zz8oYT1lJWgsaT1uKE1hdGguZmxvb3IoZS9oKSkrXCIgdHJpbGxpb24sXCIpOmU8PXkmJihhPWUlZyxpPW4oTWF0aC5mbG9vcihlL2cpKStcIiBxdWFkcmlsbGlvbixcIiksci5wdXNoKGkpLG4oYSxyKSl9KHQpLGU/YyhhKTphfXZhciBHPXt0b09yZGluYWw6ZnVuY3Rpb24obil7dmFyIGU9cGFyc2VJbnQobiwxMCk7aWYoIWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBhIGZpbml0ZSBudW1iZXI6IFwiK24rXCIgKFwiK3R5cGVvZiBuK1wiKVwiKTtpZighcihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklucHV0IGlzIG5vdCBhIHNhZmUgbnVtYmVyLCBpdOKAmXMgZWl0aGVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwuXCIpO3ZhciBhPVN0cmluZyhlKSx0PU1hdGguYWJzKGUlMTAwKSxvPTExPD10JiZ0PD0xMyxNPWEuY2hhckF0KGEubGVuZ3RoLTEpO3JldHVybiBhKyhvP1widGhcIjpcIjFcIj09PU0/XCJzdFwiOlwiMlwiPT09TT9cIm5kXCI6XCIzXCI9PT1NP1wicmRcIjpcInRoXCIpfSx0b1dvcmRzOmYsdG9Xb3Jkc09yZGluYWw6ZnVuY3Rpb24obil7cmV0dXJuIGMoZihuKSl9fTtuLmV4cG9ydHMmJihlPW4uZXhwb3J0cz1HKSxlLm51bWJlclRvV29yZHM9R30oKX0sODAyOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24gbihlLGEpe3ZhciBpLHIsdCxvPWF8fFwiXCI7aWYoIWV8fCEoXCJsZW5ndGhcImluIGUpJiYhZS50eXBlKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUsIG5vdCBgXCIrZStcImBcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUudmFsdWUpcmV0dXJuIGUudmFsdWU7aWYoMT09PShyPSh0PVwibGVuZ3RoXCJpbiBlP2U6ZS5jaGlsZHJlbikubGVuZ3RoKSYmXCJ2YWx1ZVwiaW4gdFswXSlyZXR1cm4gdFswXS52YWx1ZTtmb3IoaT1bXTtyLS07KWlbcl09bih0W3JdLG8pO3JldHVybiBpLmpvaW4obyl9fSw0NTA6ZnVuY3Rpb24obil7bi5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIG49W10sZT1bXSxhPXt9LGk9e30scj17fTtmdW5jdGlvbiB0KG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP25ldyBSZWdFeHAoXCJeXCIrbitcIiRcIixcImlcIik6bn1mdW5jdGlvbiBvKG4sZSl7cmV0dXJuIG49PT1lP2U6bj09PW4udG9Mb3dlckNhc2UoKT9lLnRvTG93ZXJDYXNlKCk6bj09PW4udG9VcHBlckNhc2UoKT9lLnRvVXBwZXJDYXNlKCk6blswXT09PW5bMF0udG9VcHBlckNhc2UoKT9lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIE0obixlKXtyZXR1cm4gbi5yZXBsYWNlKC9cXCQoXFxkezEsMn0pL2csKGZ1bmN0aW9uKG4sYSl7cmV0dXJuIGVbYV18fFwiXCJ9KSl9ZnVuY3Rpb24gcyhuLGUpe3JldHVybiBuLnJlcGxhY2UoZVswXSwoZnVuY3Rpb24oYSxpKXt2YXIgcj1NKGVbMV0sYXJndW1lbnRzKTtyZXR1cm4gbyhcIlwiPT09YT9uW2ktMV06YSxyKX0pKX1mdW5jdGlvbiBsKG4sZSxpKXtpZighbi5sZW5ndGh8fGEuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIGU7Zm9yKHZhciByPWkubGVuZ3RoO3ItLTspe3ZhciB0PWlbcl07aWYodFswXS50ZXN0KGUpKXJldHVybiBzKGUsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gYyhuLGUsYSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPWkudG9Mb3dlckNhc2UoKTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKT9vKGkscik6bi5oYXNPd25Qcm9wZXJ0eShyKT9vKGksbltyXSk6bChyLGksYSl9fWZ1bmN0aW9uIFMobixlLGEsaSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPWkudG9Mb3dlckNhc2UoKTtyZXR1cm4hIWUuaGFzT3duUHJvcGVydHkocil8fCFuLmhhc093blByb3BlcnR5KHIpJiZsKHIscixhKT09PXJ9fWZ1bmN0aW9uIHUobixlLGEpe3JldHVybihhP2UrXCIgXCI6XCJcIikrKDE9PT1lP3Uuc2luZ3VsYXIobik6dS5wbHVyYWwobikpfXJldHVybiB1LnBsdXJhbD1jKHIsaSxuKSx1LmlzUGx1cmFsPVMocixpLG4pLHUuc2luZ3VsYXI9YyhpLHIsZSksdS5pc1Npbmd1bGFyPVMoaSxyLGUpLHUuYWRkUGx1cmFsUnVsZT1mdW5jdGlvbihlLGEpe24ucHVzaChbdChlKSxhXSl9LHUuYWRkU2luZ3VsYXJSdWxlPWZ1bmN0aW9uKG4sYSl7ZS5wdXNoKFt0KG4pLGFdKX0sdS5hZGRVbmNvdW50YWJsZVJ1bGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIiE9dHlwZW9mIG4/KHUuYWRkUGx1cmFsUnVsZShuLFwiJDBcIiksdS5hZGRTaW5ndWxhclJ1bGUobixcIiQwXCIpKTphW24udG9Mb3dlckNhc2UoKV09ITB9LHUuYWRkSXJyZWd1bGFyUnVsZT1mdW5jdGlvbihuLGUpe2U9ZS50b0xvd2VyQ2FzZSgpLG49bi50b0xvd2VyQ2FzZSgpLHJbbl09ZSxpW2VdPW59LFtbXCJJXCIsXCJ3ZVwiXSxbXCJtZVwiLFwidXNcIl0sW1wiaGVcIixcInRoZXlcIl0sW1wic2hlXCIsXCJ0aGV5XCJdLFtcInRoZW1cIixcInRoZW1cIl0sW1wibXlzZWxmXCIsXCJvdXJzZWx2ZXNcIl0sW1wieW91cnNlbGZcIixcInlvdXJzZWx2ZXNcIl0sW1wiaXRzZWxmXCIsXCJ0aGVtc2VsdmVzXCJdLFtcImhlcnNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1wiaGltc2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJ0aGVtc2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJpc1wiLFwiYXJlXCJdLFtcIndhc1wiLFwid2VyZVwiXSxbXCJoYXNcIixcImhhdmVcIl0sW1widGhpc1wiLFwidGhlc2VcIl0sW1widGhhdFwiLFwidGhvc2VcIl0sW1wiZWNob1wiLFwiZWNob2VzXCJdLFtcImRpbmdvXCIsXCJkaW5nb2VzXCJdLFtcInZvbGNhbm9cIixcInZvbGNhbm9lc1wiXSxbXCJ0b3JuYWRvXCIsXCJ0b3JuYWRvZXNcIl0sW1widG9ycGVkb1wiLFwidG9ycGVkb2VzXCJdLFtcImdlbnVzXCIsXCJnZW5lcmFcIl0sW1widmlzY3VzXCIsXCJ2aXNjZXJhXCJdLFtcInN0aWdtYVwiLFwic3RpZ21hdGFcIl0sW1wic3RvbWFcIixcInN0b21hdGFcIl0sW1wiZG9nbWFcIixcImRvZ21hdGFcIl0sW1wibGVtbWFcIixcImxlbW1hdGFcIl0sW1wic2NoZW1hXCIsXCJzY2hlbWF0YVwiXSxbXCJhbmF0aGVtYVwiLFwiYW5hdGhlbWF0YVwiXSxbXCJveFwiLFwib3hlblwiXSxbXCJheGVcIixcImF4ZXNcIl0sW1wiZGllXCIsXCJkaWNlXCJdLFtcInllc1wiLFwieWVzZXNcIl0sW1wiZm9vdFwiLFwiZmVldFwiXSxbXCJlYXZlXCIsXCJlYXZlc1wiXSxbXCJnb29zZVwiLFwiZ2Vlc2VcIl0sW1widG9vdGhcIixcInRlZXRoXCJdLFtcInF1aXpcIixcInF1aXp6ZXNcIl0sW1wiaHVtYW5cIixcImh1bWFuc1wiXSxbXCJwcm9vZlwiLFwicHJvb2ZzXCJdLFtcImNhcnZlXCIsXCJjYXJ2ZXNcIl0sW1widmFsdmVcIixcInZhbHZlc1wiXSxbXCJsb29leVwiLFwibG9vaWVzXCJdLFtcInRoaWVmXCIsXCJ0aGlldmVzXCJdLFtcImdyb292ZVwiLFwiZ3Jvb3Zlc1wiXSxbXCJwaWNrYXhlXCIsXCJwaWNrYXhlc1wiXSxbXCJwYXNzZXJieVwiLFwicGFzc2Vyc2J5XCJdXS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdS5hZGRJcnJlZ3VsYXJSdWxlKG5bMF0sblsxXSl9KSksW1svcz8kL2ksXCJzXCJdLFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLFwiJDBcIl0sWy8oW15hZWlvdV1lc2UpJC9pLFwiJDFcIl0sWy8oYXh8dGVzdClpcyQvaSxcIiQxZXNcIl0sWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSxcIiQxZXNcIl0sWy8oZVttbl11KXM/JC9pLFwiJDFzXCJdLFsvKFtebF1pYXN8W2FlaW91XWxhc3xbZWp6cl1hc3xbaXVdYW0pJC9pLFwiJDFcIl0sWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksXCIkMWlcIl0sWy8oYWx1bW58YWxnfHZlcnRlYnIpKD86YXxhZSkkL2ksXCIkMWFlXCJdLFsvKHNlcmFwaHxjaGVydWIpKD86aW0pPyQvaSxcIiQxaW1cIl0sWy8oaGVyfGF0fGdyKW8kL2ksXCIkMW9lc1wiXSxbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxhdXRvbWF0fHF1b3IpKD86YXx1bSkkL2ksXCIkMWFcIl0sWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpKD86YXxvbikkL2ksXCIkMWFcIl0sWy9zaXMkL2ksXCJzZXNcIl0sWy8oPzooa25pfHdpfGxpKWZlfChhcnxsfGVhfGVvfG9hfGhvbylmKSQvaSxcIiQxJDJ2ZXNcIl0sWy8oW15hZWlvdXldfHF1KXkkL2ksXCIkMWllc1wiXSxbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSxcIiQxaWVzXCJdLFsvKHh8Y2h8c3N8c2h8enopJC9pLFwiJDFlc1wiXSxbLyhtYXRyfGNvZHxtdXJ8c2lsfHZlcnR8aW5kfGFwcGVuZCkoPzppeHxleCkkL2ksXCIkMWljZXNcIl0sWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLFwiJDFpY2VcIl0sWy8ocGUpKD86cnNvbnxvcGxlKSQvaSxcIiQxb3BsZVwiXSxbLyhjaGlsZCkoPzpyZW4pPyQvaSxcIiQxcmVuXCJdLFsvZWF1eCQvaSxcIiQwXCJdLFsvbVthZV1uJC9pLFwibWVuXCJdLFtcInRob3VcIixcInlvdVwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkUGx1cmFsUnVsZShuWzBdLG5bMV0pfSkpLFtbL3MkL2ksXCJcIl0sWy8oc3MpJC9pLFwiJDFcIl0sWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksXCIkMWZlXCJdLFsvKGFyfCg/OndvfFthZV0pbHxbZW9dW2FvXSl2ZXMkL2ksXCIkMWZcIl0sWy9pZXMkL2ksXCJ5XCJdLFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksXCIkMWllXCJdLFsvXFxiKG1vbnxzbWlsKWllcyQvaSxcIiQxZXlcIl0sWy9cXGIoKD86dGl0KT9tfGwpaWNlJC9pLFwiJDFvdXNlXCJdLFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksXCIkMVwiXSxbLyh4fGNofHNzfHNofHp6fHR0b3xnb3xjaG98YWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8KD86aGVyfGF0fGdyKW98W2FlaW91XXJpcykoPzplcyk/JC9pLFwiJDFcIl0sWy8oYW5hbHl8ZGlhZ25vfHBhcmVudGhlfHByb2dub3xzeW5vcHx0aGV8ZW1waGF8Y3JpfG5lKSg/OnNpc3xzZXMpJC9pLFwiJDFzaXNcIl0sWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLFwiJDFcIl0sWy8odGVzdCkoPzppc3xlcykkL2ksXCIkMWlzXCJdLFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLFwiJDF1c1wiXSxbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksXCIkMXVtXCJdLFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KWEkL2ksXCIkMW9uXCJdLFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKWFlJC9pLFwiJDFhXCJdLFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksXCIkMWV4XCJdLFsvKG1hdHJ8YXBwZW5kKWljZXMkL2ksXCIkMWl4XCJdLFsvKHBlKShyc29ufG9wbGUpJC9pLFwiJDFyc29uXCJdLFsvKGNoaWxkKXJlbiQvaSxcIiQxXCJdLFsvKGVhdSl4PyQvaSxcIiQxXCJdLFsvbWVuJC9pLFwibWFuXCJdXS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdS5hZGRTaW5ndWxhclJ1bGUoblswXSxuWzFdKX0pKSxbXCJhZHVsdGhvb2RcIixcImFkdmljZVwiLFwiYWdlbmRhXCIsXCJhaWRcIixcImFpcmNyYWZ0XCIsXCJhbGNvaG9sXCIsXCJhbW1vXCIsXCJhbmFseXRpY3NcIixcImFuaW1lXCIsXCJhdGhsZXRpY3NcIixcImF1ZGlvXCIsXCJiaXNvblwiLFwiYmxvb2RcIixcImJyZWFtXCIsXCJidWZmYWxvXCIsXCJidXR0ZXJcIixcImNhcnBcIixcImNhc2hcIixcImNoYXNzaXNcIixcImNoZXNzXCIsXCJjbG90aGluZ1wiLFwiY29kXCIsXCJjb21tZXJjZVwiLFwiY29vcGVyYXRpb25cIixcImNvcnBzXCIsXCJkZWJyaXNcIixcImRpYWJldGVzXCIsXCJkaWdlc3Rpb25cIixcImVsa1wiLFwiZW5lcmd5XCIsXCJlcXVpcG1lbnRcIixcImV4Y3JldGlvblwiLFwiZXhwZXJ0aXNlXCIsXCJmaXJtd2FyZVwiLFwiZmxvdW5kZXJcIixcImZ1blwiLFwiZ2FsbG93c1wiLFwiZ2FyYmFnZVwiLFwiZ3JhZmZpdGlcIixcImhhcmR3YXJlXCIsXCJoZWFkcXVhcnRlcnNcIixcImhlYWx0aFwiLFwiaGVycGVzXCIsXCJoaWdoamlua3NcIixcImhvbWV3b3JrXCIsXCJob3VzZXdvcmtcIixcImluZm9ybWF0aW9uXCIsXCJqZWFuc1wiLFwianVzdGljZVwiLFwia3Vkb3NcIixcImxhYm91clwiLFwibGl0ZXJhdHVyZVwiLFwibWFjaGluZXJ5XCIsXCJtYWNrZXJlbFwiLFwibWFpbFwiLFwibWVkaWFcIixcIm1ld3NcIixcIm1vb3NlXCIsXCJtdXNpY1wiLFwibXVkXCIsXCJtYW5nYVwiLFwibmV3c1wiLFwib25seVwiLFwicGVyc29ubmVsXCIsXCJwaWtlXCIsXCJwbGFua3RvblwiLFwicGxpZXJzXCIsXCJwb2xpY2VcIixcInBvbGx1dGlvblwiLFwicHJlbWlzZXNcIixcInJhaW5cIixcInJlc2VhcmNoXCIsXCJyaWNlXCIsXCJzYWxtb25cIixcInNjaXNzb3JzXCIsXCJzZXJpZXNcIixcInNld2FnZVwiLFwic2hhbWJsZXNcIixcInNocmltcFwiLFwic29mdHdhcmVcIixcInNwZWNpZXNcIixcInN0YWZmXCIsXCJzd2luZVwiLFwidGVubmlzXCIsXCJ0cmFmZmljXCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwidHJvdXRcIixcInR1bmFcIixcIndlYWx0aFwiLFwid2VsZmFyZVwiLFwid2hpdGluZ1wiLFwid2lsZGViZWVzdFwiLFwid2lsZGxpZmVcIixcInlvdVwiLC9wb2tbZcOpXW1vbiQvaSwvW15hZWlvdV1lc2UkL2ksL2RlZXIkL2ksL2Zpc2gkL2ksL21lYXNsZXMkL2ksL29baXVdcyQvaSwvcG94JC9pLC9zaGVlcCQvaV0uZm9yRWFjaCh1LmFkZFVuY291bnRhYmxlUnVsZSksdX0oKX0sNzAzOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDQxNCk7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiB0KCl7fXQucmVzZXRXYXJuaW5nQ2FjaGU9cixuLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sZSxhLHIsdCxvKXtpZihvIT09aSl7dmFyIE09bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBNLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsTX19ZnVuY3Rpb24gZSgpe3JldHVybiBufW4uaXNSZXF1aXJlZD1uO3ZhciBhPXthcnJheTpuLGJpZ2ludDpuLGJvb2w6bixmdW5jOm4sbnVtYmVyOm4sb2JqZWN0Om4sc3RyaW5nOm4sc3ltYm9sOm4sYW55Om4sYXJyYXlPZjplLGVsZW1lbnQ6bixlbGVtZW50VHlwZTpuLGluc3RhbmNlT2Y6ZSxub2RlOm4sb2JqZWN0T2Y6ZSxvbmVPZjplLG9uZU9mVHlwZTplLHNoYXBlOmUsZXhhY3Q6ZSxjaGVja1Byb3BUeXBlczp0LHJlc2V0V2FybmluZ0NhY2hlOnJ9O3JldHVybiBhLlByb3BUeXBlcz1hLGF9fSw2OTc6KG4sZSxhKT0+e24uZXhwb3J0cz1hKDcwMykoKX0sNDE0Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSwzNzk6bj0+e1widXNlIHN0cmljdFwiO3ZhciBlPVtdO2Z1bmN0aW9uIGEobil7Zm9yKHZhciBhPS0xLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlkZW50aWZpZXI9PT1uKXthPWk7YnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gaShuLGkpe2Zvcih2YXIgdD17fSxvPVtdLE09MDtNPG4ubGVuZ3RoO00rKyl7dmFyIHM9bltNXSxsPWkuYmFzZT9zWzBdK2kuYmFzZTpzWzBdLGM9dFtsXXx8MCxTPVwiXCIuY29uY2F0KGwsXCIgXCIpLmNvbmNhdChjKTt0W2xdPWMrMTt2YXIgdT1hKFMpLGQ9e2NzczpzWzFdLG1lZGlhOnNbMl0sc291cmNlTWFwOnNbM10sc3VwcG9ydHM6c1s0XSxsYXllcjpzWzVdfTtpZigtMSE9PXUpZVt1XS5yZWZlcmVuY2VzKyssZVt1XS51cGRhdGVyKGQpO2Vsc2V7dmFyIG09cihkLGkpO2kuYnlJbmRleD1NLGUuc3BsaWNlKE0sMCx7aWRlbnRpZmllcjpTLHVwZGF0ZXI6bSxyZWZlcmVuY2VzOjF9KX1vLnB1c2goUyl9cmV0dXJuIG99ZnVuY3Rpb24gcihuLGUpe3ZhciBhPWUuZG9tQVBJKGUpO3JldHVybiBhLnVwZGF0ZShuKSxmdW5jdGlvbihlKXtpZihlKXtpZihlLmNzcz09PW4uY3NzJiZlLm1lZGlhPT09bi5tZWRpYSYmZS5zb3VyY2VNYXA9PT1uLnNvdXJjZU1hcCYmZS5zdXBwb3J0cz09PW4uc3VwcG9ydHMmJmUubGF5ZXI9PT1uLmxheWVyKXJldHVybjthLnVwZGF0ZShuPWUpfWVsc2UgYS5yZW1vdmUoKX19bi5leHBvcnRzPWZ1bmN0aW9uKG4scil7dmFyIHQ9aShuPW58fFtdLHI9cnx8e30pO3JldHVybiBmdW5jdGlvbihuKXtuPW58fFtdO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgTT1hKHRbb10pO2VbTV0ucmVmZXJlbmNlcy0tfWZvcih2YXIgcz1pKG4sciksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz1hKHRbbF0pOzA9PT1lW2NdLnJlZmVyZW5jZXMmJihlW2NdLnVwZGF0ZXIoKSxlLnNwbGljZShjLDEpKX10PXN9fX0sNTY5Om49PntcInVzZSBzdHJpY3RcIjt2YXIgZT17fTtuLmV4cG9ydHM9ZnVuY3Rpb24obixhKXt2YXIgaT1mdW5jdGlvbihuKXtpZih2b2lkIDA9PT1lW25dKXt2YXIgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmYSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7YT1hLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKG4pe2E9bnVsbH1lW25dPWF9cmV0dXJuIGVbbl19KG4pO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7aS5hcHBlbmRDaGlsZChhKX19LDIxNjpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVzKGUsbi5hdHRyaWJ1dGVzKSxuLmluc2VydChlLG4ub3B0aW9ucyksZX19LDU2NToobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPWEubmM7ZSYmbi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGUpfX0sNzk1Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGU9bi5pbnNlcnRTdHlsZUVsZW1lbnQobik7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihhKXshZnVuY3Rpb24obixlLGEpe3ZhciBpPVwiXCI7YS5zdXBwb3J0cyYmKGkrPVwiQHN1cHBvcnRzIChcIi5jb25jYXQoYS5zdXBwb3J0cyxcIikge1wiKSksYS5tZWRpYSYmKGkrPVwiQG1lZGlhIFwiLmNvbmNhdChhLm1lZGlhLFwiIHtcIikpO3ZhciByPXZvaWQgMCE9PWEubGF5ZXI7ciYmKGkrPVwiQGxheWVyXCIuY29uY2F0KGEubGF5ZXIubGVuZ3RoPjA/XCIgXCIuY29uY2F0KGEubGF5ZXIpOlwiXCIsXCIge1wiKSksaSs9YS5jc3MsciYmKGkrPVwifVwiKSxhLm1lZGlhJiYoaSs9XCJ9XCIpLGEuc3VwcG9ydHMmJihpKz1cIn1cIik7dmFyIHQ9YS5zb3VyY2VNYXA7dCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGJ0b2EmJihpKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHQpKSkpLFwiICovXCIpKSxlLnN0eWxlVGFnVHJhbnNmb3JtKGksbixlLm9wdGlvbnMpfShlLG4sYSl9LHJlbW92ZTpmdW5jdGlvbigpeyFmdW5jdGlvbihuKXtpZihudWxsPT09bi5wYXJlbnROb2RlKXJldHVybiExO24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0oZSl9fX19LDU4OTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX19LDc2NjoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSgxMTQpO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPWUmJmUuY2hpbGRyZW47aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBjaGlsZHJlbiBpbiBgcGFyZW50YCBmb3IgYG1vZGlmaWVyYFwiKTtpKGEsbixlKX19KGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlLGEpe3JldHVybiBuKGUsYSx0aGlzKX19KG4pKX19LDIwOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPS0xLGk9ZSYmZS5jaGlsZHJlbjtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNoaWxkcmVuIGluIGBwYXJlbnRgIGZvciBgdmlzaXRvcmBcIik7Zm9yKDsrK2EgaW4gaTspbihpW2FdLGEsZSl9fX0sNzYxOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9SlNPTi5wYXJzZSgne1wiMTA1XCI6XCJpXCIsXCIxOTJcIjpcIkFcIixcIjE5M1wiOlwiQVwiLFwiMTk0XCI6XCJBXCIsXCIxOTVcIjpcIkFcIixcIjE5NlwiOlwiQVwiLFwiMTk3XCI6XCJBXCIsXCIxOTlcIjpcIkNcIixcIjIwMFwiOlwiRVwiLFwiMjAxXCI6XCJFXCIsXCIyMDJcIjpcIkVcIixcIjIwM1wiOlwiRVwiLFwiMjA0XCI6XCJJXCIsXCIyMDVcIjpcIklcIixcIjIwNlwiOlwiSVwiLFwiMjA3XCI6XCJJXCIsXCIyMDlcIjpcIk5cIixcIjIxMFwiOlwiT1wiLFwiMjExXCI6XCJPXCIsXCIyMTJcIjpcIk9cIixcIjIxM1wiOlwiT1wiLFwiMjE0XCI6XCJPXCIsXCIyMTZcIjpcIk9cIixcIjIxN1wiOlwiVVwiLFwiMjE4XCI6XCJVXCIsXCIyMTlcIjpcIlVcIixcIjIyMFwiOlwiVVwiLFwiMjIxXCI6XCJZXCIsXCIyMjRcIjpcImFcIixcIjIyNVwiOlwiYVwiLFwiMjI2XCI6XCJhXCIsXCIyMjdcIjpcImFcIixcIjIyOFwiOlwiYVwiLFwiMjI5XCI6XCJhXCIsXCIyMzFcIjpcImNcIixcIjIzMlwiOlwiZVwiLFwiMjMzXCI6XCJlXCIsXCIyMzRcIjpcImVcIixcIjIzNVwiOlwiZVwiLFwiMjM2XCI6XCJpXCIsXCIyMzdcIjpcImlcIixcIjIzOFwiOlwiaVwiLFwiMjM5XCI6XCJpXCIsXCIyNDFcIjpcIm5cIixcIjI0MlwiOlwib1wiLFwiMjQzXCI6XCJvXCIsXCIyNDRcIjpcIm9cIixcIjI0NVwiOlwib1wiLFwiMjQ2XCI6XCJvXCIsXCIyNDhcIjpcIm9cIixcIjI0OVwiOlwidVwiLFwiMjUwXCI6XCJ1XCIsXCIyNTFcIjpcInVcIixcIjI1MlwiOlwidVwiLFwiMjUzXCI6XCJ5XCIsXCIyNTVcIjpcInlcIixcIjI1NlwiOlwiQVwiLFwiMjU3XCI6XCJhXCIsXCIyNThcIjpcIkFcIixcIjI1OVwiOlwiYVwiLFwiMjYwXCI6XCJBXCIsXCIyNjFcIjpcImFcIixcIjI2MlwiOlwiQ1wiLFwiMjYzXCI6XCJjXCIsXCIyNjRcIjpcIkNcIixcIjI2NVwiOlwiY1wiLFwiMjY2XCI6XCJDXCIsXCIyNjdcIjpcImNcIixcIjI2OFwiOlwiQ1wiLFwiMjY5XCI6XCJjXCIsXCIyNzBcIjpcIkRcIixcIjI3MVwiOlwiZFwiLFwiMjcyXCI6XCJEXCIsXCIyNzNcIjpcImRcIixcIjI3NFwiOlwiRVwiLFwiMjc1XCI6XCJlXCIsXCIyNzZcIjpcIkVcIixcIjI3N1wiOlwiZVwiLFwiMjc4XCI6XCJFXCIsXCIyNzlcIjpcImVcIixcIjI4MFwiOlwiRVwiLFwiMjgxXCI6XCJlXCIsXCIyODJcIjpcIkVcIixcIjI4M1wiOlwiZVwiLFwiMjg0XCI6XCJHXCIsXCIyODVcIjpcImdcIixcIjI4NlwiOlwiR1wiLFwiMjg3XCI6XCJnXCIsXCIyODhcIjpcIkdcIixcIjI4OVwiOlwiZ1wiLFwiMjkwXCI6XCJHXCIsXCIyOTFcIjpcImdcIixcIjI5MlwiOlwiSFwiLFwiMjkzXCI6XCJoXCIsXCIyOTRcIjpcIkhcIixcIjI5NVwiOlwiaFwiLFwiMjk2XCI6XCJJXCIsXCIyOTdcIjpcImlcIixcIjI5OFwiOlwiSVwiLFwiMjk5XCI6XCJpXCIsXCIzMDBcIjpcIklcIixcIjMwMVwiOlwiaVwiLFwiMzAyXCI6XCJJXCIsXCIzMDNcIjpcImlcIixcIjMwNFwiOlwiSVwiLFwiMzA4XCI6XCJKXCIsXCIzMDlcIjpcImpcIixcIjMxMFwiOlwiS1wiLFwiMzExXCI6XCJrXCIsXCIzMTNcIjpcIkxcIixcIjMxNFwiOlwibFwiLFwiMzE1XCI6XCJMXCIsXCIzMTZcIjpcImxcIixcIjMxN1wiOlwiTFwiLFwiMzE4XCI6XCJsXCIsXCIzMTlcIjpcIkxcIixcIjMyMFwiOlwibFwiLFwiMzIxXCI6XCJMXCIsXCIzMjJcIjpcImxcIixcIjMyM1wiOlwiTlwiLFwiMzI0XCI6XCJuXCIsXCIzMjVcIjpcIk5cIixcIjMyNlwiOlwiblwiLFwiMzI3XCI6XCJOXCIsXCIzMjhcIjpcIm5cIixcIjMzMlwiOlwiT1wiLFwiMzMzXCI6XCJvXCIsXCIzMzRcIjpcIk9cIixcIjMzNVwiOlwib1wiLFwiMzM2XCI6XCJPXCIsXCIzMzdcIjpcIm9cIixcIjMzOFwiOlwiT1wiLFwiMzM5XCI6XCJvXCIsXCIzNDBcIjpcIlJcIixcIjM0MVwiOlwiclwiLFwiMzQyXCI6XCJSXCIsXCIzNDNcIjpcInJcIixcIjM0NFwiOlwiUlwiLFwiMzQ1XCI6XCJyXCIsXCIzNDZcIjpcIlNcIixcIjM0N1wiOlwic1wiLFwiMzQ4XCI6XCJTXCIsXCIzNDlcIjpcInNcIixcIjM1MFwiOlwiU1wiLFwiMzUxXCI6XCJzXCIsXCIzNTJcIjpcIlNcIixcIjM1M1wiOlwic1wiLFwiMzU0XCI6XCJUXCIsXCIzNTVcIjpcInRcIixcIjM1NlwiOlwiVFwiLFwiMzU3XCI6XCJ0XCIsXCIzNThcIjpcIlRcIixcIjM1OVwiOlwidFwiLFwiMzYwXCI6XCJVXCIsXCIzNjFcIjpcInVcIixcIjM2MlwiOlwiVVwiLFwiMzYzXCI6XCJ1XCIsXCIzNjRcIjpcIlVcIixcIjM2NVwiOlwidVwiLFwiMzY2XCI6XCJVXCIsXCIzNjdcIjpcInVcIixcIjM2OFwiOlwiVVwiLFwiMzY5XCI6XCJ1XCIsXCIzNzBcIjpcIlVcIixcIjM3MVwiOlwidVwiLFwiMzcyXCI6XCJXXCIsXCIzNzNcIjpcIndcIixcIjM3NFwiOlwiWVwiLFwiMzc1XCI6XCJ5XCIsXCIzNzZcIjpcIllcIixcIjM3N1wiOlwiWlwiLFwiMzc4XCI6XCJ6XCIsXCIzNzlcIjpcIlpcIixcIjM4MFwiOlwielwiLFwiMzgxXCI6XCJaXCIsXCIzODJcIjpcInpcIixcIjM4NFwiOlwiYlwiLFwiMzg1XCI6XCJCXCIsXCIzODZcIjpcIkJcIixcIjM4N1wiOlwiYlwiLFwiMzkwXCI6XCJPXCIsXCIzOTFcIjpcIkNcIixcIjM5MlwiOlwiY1wiLFwiMzkzXCI6XCJEXCIsXCIzOTRcIjpcIkRcIixcIjM5NVwiOlwiRFwiLFwiMzk2XCI6XCJkXCIsXCIzOThcIjpcIkVcIixcIjQwMFwiOlwiRVwiLFwiNDAxXCI6XCJGXCIsXCI0MDJcIjpcImZcIixcIjQwM1wiOlwiR1wiLFwiNDA3XCI6XCJJXCIsXCI0MDhcIjpcIktcIixcIjQwOVwiOlwia1wiLFwiNDEwXCI6XCJsXCIsXCI0MTJcIjpcIk1cIixcIjQxM1wiOlwiTlwiLFwiNDE0XCI6XCJuXCIsXCI0MTVcIjpcIk9cIixcIjQxNlwiOlwiT1wiLFwiNDE3XCI6XCJvXCIsXCI0MjBcIjpcIlBcIixcIjQyMVwiOlwicFwiLFwiNDIyXCI6XCJSXCIsXCI0MjdcIjpcInRcIixcIjQyOFwiOlwiVFwiLFwiNDI5XCI6XCJ0XCIsXCI0MzBcIjpcIlRcIixcIjQzMVwiOlwiVVwiLFwiNDMyXCI6XCJ1XCIsXCI0MzRcIjpcIlZcIixcIjQzNVwiOlwiWVwiLFwiNDM2XCI6XCJ5XCIsXCI0MzdcIjpcIlpcIixcIjQzOFwiOlwielwiLFwiNDYxXCI6XCJBXCIsXCI0NjJcIjpcImFcIixcIjQ2M1wiOlwiSVwiLFwiNDY0XCI6XCJpXCIsXCI0NjVcIjpcIk9cIixcIjQ2NlwiOlwib1wiLFwiNDY3XCI6XCJVXCIsXCI0NjhcIjpcInVcIixcIjQ3N1wiOlwiZVwiLFwiNDg0XCI6XCJHXCIsXCI0ODVcIjpcImdcIixcIjQ4NlwiOlwiR1wiLFwiNDg3XCI6XCJnXCIsXCI0ODhcIjpcIktcIixcIjQ4OVwiOlwia1wiLFwiNDkwXCI6XCJPXCIsXCI0OTFcIjpcIm9cIixcIjUwMFwiOlwiR1wiLFwiNTAxXCI6XCJnXCIsXCI1MDRcIjpcIk5cIixcIjUwNVwiOlwiblwiLFwiNTEyXCI6XCJBXCIsXCI1MTNcIjpcImFcIixcIjUxNFwiOlwiQVwiLFwiNTE1XCI6XCJhXCIsXCI1MTZcIjpcIkVcIixcIjUxN1wiOlwiZVwiLFwiNTE4XCI6XCJFXCIsXCI1MTlcIjpcImVcIixcIjUyMFwiOlwiSVwiLFwiNTIxXCI6XCJpXCIsXCI1MjJcIjpcIklcIixcIjUyM1wiOlwiaVwiLFwiNTI0XCI6XCJPXCIsXCI1MjVcIjpcIm9cIixcIjUyNlwiOlwiT1wiLFwiNTI3XCI6XCJvXCIsXCI1MjhcIjpcIlJcIixcIjUyOVwiOlwiclwiLFwiNTMwXCI6XCJSXCIsXCI1MzFcIjpcInJcIixcIjUzMlwiOlwiVVwiLFwiNTMzXCI6XCJ1XCIsXCI1MzRcIjpcIlVcIixcIjUzNVwiOlwidVwiLFwiNTM2XCI6XCJTXCIsXCI1MzdcIjpcInNcIixcIjUzOFwiOlwiVFwiLFwiNTM5XCI6XCJ0XCIsXCI1NDJcIjpcIkhcIixcIjU0M1wiOlwiaFwiLFwiNTQ0XCI6XCJOXCIsXCI1NDVcIjpcImRcIixcIjU0OFwiOlwiWlwiLFwiNTQ5XCI6XCJ6XCIsXCI1NTBcIjpcIkFcIixcIjU1MVwiOlwiYVwiLFwiNTUyXCI6XCJFXCIsXCI1NTNcIjpcImVcIixcIjU1OFwiOlwiT1wiLFwiNTU5XCI6XCJvXCIsXCI1NjJcIjpcIllcIixcIjU2M1wiOlwieVwiLFwiNTY0XCI6XCJsXCIsXCI1NjVcIjpcIm5cIixcIjU2NlwiOlwidFwiLFwiNTY3XCI6XCJqXCIsXCI1NzBcIjpcIkFcIixcIjU3MVwiOlwiQ1wiLFwiNTcyXCI6XCJjXCIsXCI1NzNcIjpcIkxcIixcIjU3NFwiOlwiVFwiLFwiNTc1XCI6XCJzXCIsXCI1NzZcIjpcInpcIixcIjU3OVwiOlwiQlwiLFwiNTgwXCI6XCJVXCIsXCI1ODFcIjpcIlZcIixcIjU4MlwiOlwiRVwiLFwiNTgzXCI6XCJlXCIsXCI1ODRcIjpcIkpcIixcIjU4NVwiOlwialwiLFwiNTg2XCI6XCJRXCIsXCI1ODdcIjpcInFcIixcIjU4OFwiOlwiUlwiLFwiNTg5XCI6XCJyXCIsXCI1OTBcIjpcIllcIixcIjU5MVwiOlwieVwiLFwiNTkyXCI6XCJhXCIsXCI1OTNcIjpcImFcIixcIjU5NVwiOlwiYlwiLFwiNTk2XCI6XCJvXCIsXCI1OTdcIjpcImNcIixcIjU5OFwiOlwiZFwiLFwiNTk5XCI6XCJkXCIsXCI2MDBcIjpcImVcIixcIjYwM1wiOlwiZVwiLFwiNjA0XCI6XCJlXCIsXCI2MDVcIjpcImVcIixcIjYwNlwiOlwiZVwiLFwiNjA3XCI6XCJqXCIsXCI2MDhcIjpcImdcIixcIjYwOVwiOlwiZ1wiLFwiNjEwXCI6XCJnXCIsXCI2MTNcIjpcImhcIixcIjYxNFwiOlwiaFwiLFwiNjE2XCI6XCJpXCIsXCI2MThcIjpcImlcIixcIjYxOVwiOlwibFwiLFwiNjIwXCI6XCJsXCIsXCI2MjFcIjpcImxcIixcIjYyM1wiOlwibVwiLFwiNjI0XCI6XCJtXCIsXCI2MjVcIjpcIm1cIixcIjYyNlwiOlwiblwiLFwiNjI3XCI6XCJuXCIsXCI2MjhcIjpcIm5cIixcIjYyOVwiOlwib1wiLFwiNjMzXCI6XCJyXCIsXCI2MzRcIjpcInJcIixcIjYzNVwiOlwiclwiLFwiNjM2XCI6XCJyXCIsXCI2MzdcIjpcInJcIixcIjYzOFwiOlwiclwiLFwiNjM5XCI6XCJyXCIsXCI2NDBcIjpcInJcIixcIjY0MVwiOlwiclwiLFwiNjQyXCI6XCJzXCIsXCI2NDdcIjpcInRcIixcIjY0OFwiOlwidFwiLFwiNjQ5XCI6XCJ1XCIsXCI2NTFcIjpcInZcIixcIjY1MlwiOlwidlwiLFwiNjUzXCI6XCJ3XCIsXCI2NTRcIjpcInlcIixcIjY1NVwiOlwieVwiLFwiNjU2XCI6XCJ6XCIsXCI2NTdcIjpcInpcIixcIjY2M1wiOlwiY1wiLFwiNjY1XCI6XCJiXCIsXCI2NjZcIjpcImVcIixcIjY2N1wiOlwiZ1wiLFwiNjY4XCI6XCJoXCIsXCI2NjlcIjpcImpcIixcIjY3MFwiOlwia1wiLFwiNjcxXCI6XCJsXCIsXCI2NzJcIjpcInFcIixcIjY4NlwiOlwiaFwiLFwiNjg4XCI6XCJoXCIsXCI2OTBcIjpcImpcIixcIjY5MVwiOlwiclwiLFwiNjkyXCI6XCJyXCIsXCI2OTRcIjpcInJcIixcIjY5NVwiOlwid1wiLFwiNjk2XCI6XCJ5XCIsXCI3MzdcIjpcImxcIixcIjczOFwiOlwic1wiLFwiNzM5XCI6XCJ4XCIsXCI3ODBcIjpcInZcIixcIjgyOVwiOlwieFwiLFwiODUxXCI6XCJ4XCIsXCI4NjdcIjpcImFcIixcIjg2OFwiOlwiZVwiLFwiODY5XCI6XCJpXCIsXCI4NzBcIjpcIm9cIixcIjg3MVwiOlwidVwiLFwiODcyXCI6XCJjXCIsXCI4NzNcIjpcImRcIixcIjg3NFwiOlwiaFwiLFwiODc1XCI6XCJtXCIsXCI4NzZcIjpcInJcIixcIjg3N1wiOlwidFwiLFwiODc4XCI6XCJ2XCIsXCI4NzlcIjpcInhcIixcIjc0MjRcIjpcImFcIixcIjc0MjdcIjpcImJcIixcIjc0MjhcIjpcImNcIixcIjc0MjlcIjpcImRcIixcIjc0MzFcIjpcImVcIixcIjc0MzJcIjpcImVcIixcIjc0MzNcIjpcImlcIixcIjc0MzRcIjpcImpcIixcIjc0MzVcIjpcImtcIixcIjc0MzZcIjpcImxcIixcIjc0MzdcIjpcIm1cIixcIjc0MzhcIjpcIm5cIixcIjc0MzlcIjpcIm9cIixcIjc0NDBcIjpcIm9cIixcIjc0NDFcIjpcIm9cIixcIjc0NDJcIjpcIm9cIixcIjc0NDNcIjpcIm9cIixcIjc0NDZcIjpcIm9cIixcIjc0NDdcIjpcIm9cIixcIjc0NDhcIjpcInBcIixcIjc0NDlcIjpcInJcIixcIjc0NTBcIjpcInJcIixcIjc0NTFcIjpcInRcIixcIjc0NTJcIjpcInVcIixcIjc0NTNcIjpcInVcIixcIjc0NTRcIjpcInVcIixcIjc0NTVcIjpcIm1cIixcIjc0NTZcIjpcInZcIixcIjc0NTdcIjpcIndcIixcIjc0NThcIjpcInpcIixcIjc1MjJcIjpcImlcIixcIjc1MjNcIjpcInJcIixcIjc1MjRcIjpcInVcIixcIjc1MjVcIjpcInZcIixcIjc2ODBcIjpcIkFcIixcIjc2ODFcIjpcImFcIixcIjc2ODJcIjpcIkJcIixcIjc2ODNcIjpcImJcIixcIjc2ODRcIjpcIkJcIixcIjc2ODVcIjpcImJcIixcIjc2ODZcIjpcIkJcIixcIjc2ODdcIjpcImJcIixcIjc2OTBcIjpcIkRcIixcIjc2OTFcIjpcImRcIixcIjc2OTJcIjpcIkRcIixcIjc2OTNcIjpcImRcIixcIjc2OTRcIjpcIkRcIixcIjc2OTVcIjpcImRcIixcIjc2OTZcIjpcIkRcIixcIjc2OTdcIjpcImRcIixcIjc2OThcIjpcIkRcIixcIjc2OTlcIjpcImRcIixcIjc3MDRcIjpcIkVcIixcIjc3MDVcIjpcImVcIixcIjc3MDZcIjpcIkVcIixcIjc3MDdcIjpcImVcIixcIjc3MTBcIjpcIkZcIixcIjc3MTFcIjpcImZcIixcIjc3MTJcIjpcIkdcIixcIjc3MTNcIjpcImdcIixcIjc3MTRcIjpcIkhcIixcIjc3MTVcIjpcImhcIixcIjc3MTZcIjpcIkhcIixcIjc3MTdcIjpcImhcIixcIjc3MThcIjpcIkhcIixcIjc3MTlcIjpcImhcIixcIjc3MjBcIjpcIkhcIixcIjc3MjFcIjpcImhcIixcIjc3MjJcIjpcIkhcIixcIjc3MjNcIjpcImhcIixcIjc3MjRcIjpcIklcIixcIjc3MjVcIjpcImlcIixcIjc3MjhcIjpcIktcIixcIjc3MjlcIjpcImtcIixcIjc3MzBcIjpcIktcIixcIjc3MzFcIjpcImtcIixcIjc3MzJcIjpcIktcIixcIjc3MzNcIjpcImtcIixcIjc3MzRcIjpcIkxcIixcIjc3MzVcIjpcImxcIixcIjc3MzhcIjpcIkxcIixcIjc3MzlcIjpcImxcIixcIjc3NDBcIjpcIkxcIixcIjc3NDFcIjpcImxcIixcIjc3NDJcIjpcIk1cIixcIjc3NDNcIjpcIm1cIixcIjc3NDRcIjpcIk1cIixcIjc3NDVcIjpcIm1cIixcIjc3NDZcIjpcIk1cIixcIjc3NDdcIjpcIm1cIixcIjc3NDhcIjpcIk5cIixcIjc3NDlcIjpcIm5cIixcIjc3NTBcIjpcIk5cIixcIjc3NTFcIjpcIm5cIixcIjc3NTJcIjpcIk5cIixcIjc3NTNcIjpcIm5cIixcIjc3NTRcIjpcIk5cIixcIjc3NTVcIjpcIm5cIixcIjc3NjRcIjpcIlBcIixcIjc3NjVcIjpcInBcIixcIjc3NjZcIjpcIlBcIixcIjc3NjdcIjpcInBcIixcIjc3NjhcIjpcIlJcIixcIjc3NjlcIjpcInJcIixcIjc3NzBcIjpcIlJcIixcIjc3NzFcIjpcInJcIixcIjc3NzRcIjpcIlJcIixcIjc3NzVcIjpcInJcIixcIjc3NzZcIjpcIlNcIixcIjc3NzdcIjpcInNcIixcIjc3NzhcIjpcIlNcIixcIjc3NzlcIjpcInNcIixcIjc3ODZcIjpcIlRcIixcIjc3ODdcIjpcInRcIixcIjc3ODhcIjpcIlRcIixcIjc3ODlcIjpcInRcIixcIjc3OTBcIjpcIlRcIixcIjc3OTFcIjpcInRcIixcIjc3OTJcIjpcIlRcIixcIjc3OTNcIjpcInRcIixcIjc3OTRcIjpcIlVcIixcIjc3OTVcIjpcInVcIixcIjc3OTZcIjpcIlVcIixcIjc3OTdcIjpcInVcIixcIjc3OThcIjpcIlVcIixcIjc3OTlcIjpcInVcIixcIjc4MDRcIjpcIlZcIixcIjc4MDVcIjpcInZcIixcIjc4MDZcIjpcIlZcIixcIjc4MDdcIjpcInZcIixcIjc4MDhcIjpcIldcIixcIjc4MDlcIjpcIndcIixcIjc4MTBcIjpcIldcIixcIjc4MTFcIjpcIndcIixcIjc4MTJcIjpcIldcIixcIjc4MTNcIjpcIndcIixcIjc4MTRcIjpcIldcIixcIjc4MTVcIjpcIndcIixcIjc4MTZcIjpcIldcIixcIjc4MTdcIjpcIndcIixcIjc4MThcIjpcIlhcIixcIjc4MTlcIjpcInhcIixcIjc4MjBcIjpcIlhcIixcIjc4MjFcIjpcInhcIixcIjc4MjJcIjpcIllcIixcIjc4MjNcIjpcInlcIixcIjc4MjRcIjpcIlpcIixcIjc4MjVcIjpcInpcIixcIjc4MjZcIjpcIlpcIixcIjc4MjdcIjpcInpcIixcIjc4MjhcIjpcIlpcIixcIjc4MjlcIjpcInpcIixcIjc4MzVcIjpcInNcIixcIjc4NDBcIjpcIkFcIixcIjc4NDFcIjpcImFcIixcIjc4NDJcIjpcIkFcIixcIjc4NDNcIjpcImFcIixcIjc4NjRcIjpcIkVcIixcIjc4NjVcIjpcImVcIixcIjc4NjZcIjpcIkVcIixcIjc4NjdcIjpcImVcIixcIjc4NjhcIjpcIkVcIixcIjc4NjlcIjpcImVcIixcIjc4ODBcIjpcIklcIixcIjc4ODFcIjpcImlcIixcIjc4ODJcIjpcIklcIixcIjc4ODNcIjpcImlcIixcIjc4ODRcIjpcIk9cIixcIjc4ODVcIjpcIm9cIixcIjc4ODZcIjpcIk9cIixcIjc4ODdcIjpcIm9cIixcIjc5MDhcIjpcIlVcIixcIjc5MDlcIjpcInVcIixcIjc5MTBcIjpcIlVcIixcIjc5MTFcIjpcInVcIixcIjc5MjJcIjpcIllcIixcIjc5MjNcIjpcInlcIixcIjc5MjRcIjpcIllcIixcIjc5MjVcIjpcInlcIixcIjc5MjZcIjpcIllcIixcIjc5MjdcIjpcInlcIixcIjc5MjhcIjpcIllcIixcIjc5MjlcIjpcInlcIixcIjgzMDVcIjpcImlcIixcIjgzNDFcIjpcImhcIixcIjgzNDJcIjpcImtcIixcIjgzNDNcIjpcImxcIixcIjgzNDRcIjpcIm1cIixcIjgzNDVcIjpcIm5cIixcIjgzNDZcIjpcInBcIixcIjgzNDdcIjpcInNcIixcIjgzNDhcIjpcInRcIixcIjg0NTBcIjpcImNcIixcIjg0NThcIjpcImdcIixcIjg0NTlcIjpcImhcIixcIjg0NjBcIjpcImhcIixcIjg0NjFcIjpcImhcIixcIjg0NjRcIjpcImlcIixcIjg0NjVcIjpcImlcIixcIjg0NjZcIjpcImxcIixcIjg0NjdcIjpcImxcIixcIjg0NjhcIjpcImxcIixcIjg0NjlcIjpcIm5cIixcIjg0NzJcIjpcInBcIixcIjg0NzNcIjpcInBcIixcIjg0NzRcIjpcInFcIixcIjg0NzVcIjpcInJcIixcIjg0NzZcIjpcInJcIixcIjg0NzdcIjpcInJcIixcIjg0ODRcIjpcInpcIixcIjg0ODhcIjpcInpcIixcIjg0OTJcIjpcImJcIixcIjg0OTNcIjpcImNcIixcIjg0OTVcIjpcImVcIixcIjg0OTZcIjpcImVcIixcIjg0OTdcIjpcImZcIixcIjg0OThcIjpcIkZcIixcIjg0OTlcIjpcIm1cIixcIjg1MDBcIjpcIm9cIixcIjg1MDZcIjpcInFcIixcIjg1MTNcIjpcImdcIixcIjg1MTRcIjpcImxcIixcIjg1MTVcIjpcImxcIixcIjg1MTZcIjpcInlcIixcIjg1MTdcIjpcImRcIixcIjg1MThcIjpcImRcIixcIjg1MTlcIjpcImVcIixcIjg1MjBcIjpcImlcIixcIjg1MjFcIjpcImpcIixcIjg1MjZcIjpcImZcIixcIjg1NzlcIjpcIkNcIixcIjg1ODBcIjpcImNcIixcIjg3NjVcIjpcInNcIixcIjg3NjZcIjpcInNcIixcIjg5NTlcIjpcInpcIixcIjg5OTlcIjpcInhcIixcIjk3NDZcIjpcInhcIixcIjk3NzZcIjpcImlcIixcIjk4NjZcIjpcImlcIixcIjEwMDA1XCI6XCJ4XCIsXCIxMDAwNlwiOlwieFwiLFwiMTAwMDdcIjpcInhcIixcIjEwMDA4XCI6XCJ4XCIsXCIxMDYyNVwiOlwielwiLFwiMTA2MjZcIjpcInpcIixcIjExMzYyXCI6XCJMXCIsXCIxMTM2NFwiOlwiUlwiLFwiMTEzNjVcIjpcImFcIixcIjExMzY2XCI6XCJ0XCIsXCIxMTM3M1wiOlwiQVwiLFwiMTEzNzRcIjpcIk1cIixcIjExMzc1XCI6XCJBXCIsXCIxMTM5MFwiOlwiU1wiLFwiMTEzOTFcIjpcIlpcIixcIjE5OTA0XCI6XCJpXCIsXCI0Mjg5M1wiOlwiSFwiLFwiNDI5MjJcIjpcIkhcIixcIjQyOTIzXCI6XCJFXCIsXCI0MjkyNFwiOlwiR1wiLFwiNDI5MjVcIjpcIkxcIixcIjQyOTI4XCI6XCJLXCIsXCI0MjkyOVwiOlwiVFwiLFwiNjI5MzdcIjpcInhcIn0nKX19LGU9e307ZnVuY3Rpb24gYShpKXt2YXIgcj1lW2ldO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdD1lW2ldPXtpZDppLGV4cG9ydHM6e319O3JldHVybiBuW2ldLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGEpLHQuZXhwb3J0c31hLm49bj0+e3ZhciBlPW4mJm4uX19lc01vZHVsZT8oKT0+bi5kZWZhdWx0OigpPT5uO3JldHVybiBhLmQoZSx7YTplfSksZX0sYS5kPShuLGUpPT57Zm9yKHZhciBpIGluIGUpYS5vKGUsaSkmJiFhLm8obixpKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7ZW51bWVyYWJsZTohMCxnZXQ6ZVtpXX0pfSxhLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2gobil7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxhLm89KG4sZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpLGEucj1uPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX07dmFyIGk9e307KCgpPT57XCJ1c2Ugc3RyaWN0XCI7YS5yKGkpLGEuZChpLHtkZWZhdWx0OigpPT5xYSxsaW50TXlUZXh0OigpPT5qYX0pO2NvbnN0IG49cmVxdWlyZShcInJlYWN0XCIpO3ZhciBlPWEoNjk3KSxyPWEubihlKSx0PWEoMzc5KSxvPWEubih0KSxNPWEoNzk1KSxzPWEubihNKSxsPWEoNTY5KSxjPWEubihsKSxTPWEoNTY1KSx1PWEubihTKSxkPWEoMjE2KSxtPWEubihkKSxwPWEoNTg5KSxoPWEubihwKSxnPWEoNzgwKSx5PXt9O2Z1bmN0aW9uIGIobixlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbn0obil8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9bnVsbD09bj9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXXx8bltcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9YSl7dmFyIGkscix0PVtdLG89ITAsTT0hMTt0cnl7Zm9yKGE9YS5jYWxsKG4pOyEobz0oaT1hLm5leHQoKSkuZG9uZSkmJih0LnB1c2goaS52YWx1ZSksIWV8fHQubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKG4pe009ITAscj1ufWZpbmFsbHl7dHJ5e298fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoTSl0aHJvdyByfX1yZXR1cm4gdH19KG4sZSl8fGZ1bmN0aW9uKG4sZSl7aWYobil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIEQobixlKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PWEmJm4uY29uc3RydWN0b3ImJihhPW4uY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PWF8fFwiU2V0XCI9PT1hP0FycmF5LmZyb20obik6XCJBcmd1bWVudHNcIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP0QobixlKTp2b2lkIDB9fShuLGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gRChuLGUpeyhudWxsPT1lfHxlPm4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgpO2Zvcih2YXIgYT0wLGk9bmV3IEFycmF5KGUpO2E8ZTthKyspaVthXT1uW2FdO3JldHVybiBpfXkuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLHkuc2V0QXR0cmlidXRlcz11KCkseS5pbnNlcnQ9YygpLmJpbmQobnVsbCxcImhlYWRcIikseS5kb21BUEk9cygpLHkuaW5zZXJ0U3R5bGVFbGVtZW50PW0oKSxvKCkoZy5aLHkpLGcuWiYmZy5aLmxvY2FscyYmZy5aLmxvY2Fscztjb25zdCBmPWZ1bmN0aW9uKGUpe3ZhciBhLGkscj1lLnN1Z2dlc3Rpb24sdD1lLnNvdXJjZVRleHQsbz1lLnNhbXBsZVRleHQsTT1lLnNldFNhbXBsZVRleHQscz1lLnJlbW92ZVN1Z2dlc3Rpb24sbD1lLmRpc21pc3NlZFN1Z2dlc3Rpb25zLGM9ZS5vbkNsaWNrLFM9ZS5pc0FjdGl2ZSx1PWUuYWRkVG9EaWN0aW9uYXJ5LGQ9ZS5vcGVuTGlua3NJbk5ld1RhYixtPWIoKDAsbi51c2VTdGF0ZSkoITEpLDIpLHA9bVswXSxoPW1bMV0sZz1iKCgwLG4udXNlU3RhdGUpKCksMikseT1nWzBdLEQ9Z1sxXSxmPWIoKDAsbi51c2VTdGF0ZSkoXCJzY3JvbGwtcG9zaXRpb24tc3RhcnRcIiksMiksRz1mWzBdLHc9ZlsxXSx2PSgwLG4udXNlUmVmKSgpLGs9IShudWxsPT1yfHwhci5leHBlY3RlZCksUj1mdW5jdGlvbigpe3ZhciBuPVwicmVwbGFjZW1lbnRcIjtyZXR1cm5cInJldGV4dC1zcGVsbFwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiPT09ci5zb3VyY2V8fFwicmV0ZXh0LWVxdWFsaXR5XCI9PT1yLnNvdXJjZSYmaz9uOlwicmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmdcIj09PXIuc291cmNlfHxcInJldGV4dC1wYXNzaXZlXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVhZGFiaWxpdHlcIj09PXIuc291cmNlP1wiYmFzaWNcIjooKFwicmV0ZXh0LWVxdWFsaXR5XCI9PT1yLnNvdXJjZSYmIWt8fFwicmV0ZXh0LW5vLWVtb2ppc1wiPT09ci5zb3VyY2UpJiYobj1cInJlbW92YWxcIiksbil9LFk9ZnVuY3Rpb24oKXt2YXIgbj1cInNldmVyZVwiO3JldHVyblwicmV0ZXh0LXNwZWxsXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIj09PXIuc291cmNlfHxcInJldGV4dC1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC1pbmRlZmluaXRlLWFydGljbGVcIj09PXIuc291cmNlfHxcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtZXF1YWxpdHlcIiE9PXIuc291cmNlJiZcInJldGV4dC1yZWFkYWJpbGl0eVwiIT09ci5zb3VyY2UmJlwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIiE9PXIuc291cmNlJiZcInJldGV4dC1uby1lbW9qaXNcIiE9PXIuc291cmNlJiZcInJldGV4dC1wYXNzaXZlXCIhPT1yLnNvdXJjZXx8KG49XCJtb2RlcmF0ZVwiKSxufSxBPWZ1bmN0aW9uKCl7dmFyIG49XCJTdWdnZXN0aW9uXCI7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjpuPVwiU3BlbGxpbmdcIjticmVhaztjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6Y2FzZVwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIjpuPVwiQ29udHJhY3Rpb25zXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCI6bj1cIlJlcGVhdGVkIHdvcmRzXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmdcIjpjYXNlXCJyZXRleHQtbm8tZW1vamlzXCI6bj1cIkNvbnNpc3RlbnQgc3R5bGVcIjticmVhaztjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6bj1cIkdyYW1tYXJcIjticmVhaztjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjpuPVwiSW5zZW5zaXRpdmUgbGFuZ3VhZ2VcIjticmVhaztjYXNlXCJyZXRleHQtcmVhZGFiaWxpdHlcIjpjYXNlXCJyZXRleHQtcGFzc2l2ZVwiOm49XCJDbGFyaXR5XCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI6bj1cIkNhcGl0YWxpemF0aW9uXCI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbn1yZXR1cm4gbn07cmV0dXJuIG4uY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY29udGFpbmVyIFwiLmNvbmNhdChsLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiBuPT09ci5uYW1lfSkpP1wic3VnZ2VzdGlvbi1kaXNtaXNzZWRcIjpcIlwiLFwiIFwiKS5jb25jYXQoUz9cImFjdGl2ZS1zdWdnZXN0aW9uXCI6XCJcIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBjKCl9fSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeVwifSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eSBcIi5jb25jYXQoWSgpKX0pLG4uY3JlYXRlRWxlbWVudChcImg1XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1hY3R1YWxcIn0sci5hY3R1YWwubGVuZ3RoPjMwP3IuYWN0dWFsLnN1YnN0cmluZygwLDMwKStcIi4uLlwiOnIuYWN0dWFsKSxuLmNyZWF0ZUVsZW1lbnQoXCJoNlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtbGFiZWxcIn0sQSgpKSksbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1jb250YWluZXJcIn0sbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtc2V2ZXJpdHkgXCIuY29uY2F0KFkoKSl9KSxuLmNyZWF0ZUVsZW1lbnQoXCJoNlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtbGFiZWxcIn0sQSgpKSksKGk9ZnVuY3Rpb24oKXt2YXIgZT1cInJlbW92YWxcIj09PVIoKT9mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LGU9ci5wb3NpdGlvbi5lbmQub2Zmc2V0LGE9by5zdWJzdHJpbmcoMCxuKSxpPW8uc3Vic3RyaW5nKGUpLHQ9YS5zdWJzdHJpbmcoYS5sZW5ndGgtMSxhLmxlbmd0aCk7XCIgXCI9PT1pLnN1YnN0cmluZygwLDEpP2k9aS5zdWJzdHJpbmcoMSk6XCIgXCI9PT10JiYoYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLTEpKTt2YXIgcz1bYSxpXTtzPXMuam9pbihcIlwiKSxNKHMpfSgpfTpudWxsO3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnRcIixvbkNsaWNrOmV9LG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dFwifSxyLmFjdHVhbCkpfSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXFxuICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktY29udGFpbmVyIFxcbiAgICAgICAgc3VtbWFyeS1cIi5jb25jYXQoUigpLFwiXFxuICAgICAgXCIpfSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJmkoKSxcInJlbW92YWxcIj09PVIoKSYmaSgpLFwicmVwbGFjZW1lbnRcIj09PVIoKSYmbi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse3NyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UVWlJR2hsYVdkb2REMGlNVE1pSUhacFpYZENiM2c5SWpBZ01DQXhOU0F4TXlJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1pEMGlUVEVnTlM0M05VTXdMalU0TlRjNE5pQTFMamMxSURBdU1qVWdOaTR3T0RVM09TQXdMakkxSURZdU5VTXdMakkxSURZdU9URTBNakVnTUM0MU9EVTNPRFlnTnk0eU5TQXhJRGN1TWpWV05TNDNOVnBOTVRRdU5UTXdNeUEzTGpBek1ETXpRekUwTGpneU16SWdOaTQzTXpjME5DQXhOQzQ0TWpNeUlEWXVNall5TlRZZ01UUXVOVE13TXlBMUxqazJPVFkzVERrdU56VTNNellnTVM0eE9UWTNRemt1TkRZME5EY2dNQzQ1TURNNE1EWWdPQzQ1T0RrMU9TQXdMamt3TXpnd05pQTRMalk1TmpjZ01TNHhPVFkzUXpndU5EQXpPREVnTVM0ME9EazFPU0E0TGpRd016Z3hJREV1T1RZME5EY2dPQzQyT1RZM0lESXVNalUzTXpaTU1USXVPVE01TXlBMkxqVk1PQzQyT1RZM0lERXdMamMwTWpaRE9DNDBNRE00TVNBeE1TNHdNelUxSURndU5EQXpPREVnTVRFdU5URXdOQ0E0TGpZNU5qY2dNVEV1T0RBek0wTTRMams0T1RVNUlERXlMakE1TmpJZ09TNDBOalEwTnlBeE1pNHdPVFl5SURrdU56VTNNellnTVRFdU9EQXpNMHd4TkM0MU16QXpJRGN1TURNd016TmFUVEVnTnk0eU5VZ3hORlkxTGpjMVNERldOeTR5TlZvaUlHWnBiR3c5SWlNNVJrRTFRVFVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcImFycm93IGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktYXJyb3dcIn0pLFwicmVwbGFjZW1lbnRcIj09PVIoKSYmbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyXFxuICAgICAgICAgICAgXCIuY29uY2F0KEcsXCJcXG4gICAgICAgICAgICBcIikuY29uY2F0KDA9PT1yLmV4cGVjdGVkLmxlbmd0aD9cIm5vLXJlcGxhY2VtZW50LWNvbnRhaW5lclwiOlwiXCIsXCJcXG4gICAgICAgICAgXCIpfSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMgXFxuICAgICAgICAgICAgICAgIFwiLmNvbmNhdCgwPT09ci5leHBlY3RlZC5sZW5ndGg/XCJuby1yZXBsYWNlbWVudFwiOlwiXCIsXCJcXG4gICAgICAgICAgICAgIFwiKSxvblNjcm9sbDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe2lmKHYuY3VycmVudCl7dmFyIG49di5jdXJyZW50LGU9bi5zY3JvbGxMZWZ0LGE9bi5zY3JvbGxXaWR0aCxpPW4uY2xpZW50V2lkdGg7dygwPT09ZT9cInNjcm9sbC1wb3NpdGlvbi1zdGFydFwiOmUraT49YT9cInNjcm9sbC1wb3NpdGlvbi1lbmRcIjpcInNjcm9sbC1wb3NpdGlvbi1taWRkbGVcIil9fSgpfSxyZWY6dn0sKHIuYWN0dWFsLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCksbnVsbD09cnx8bnVsbD09PShhPXIuZXhwZWN0ZWQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm1hcCgoZnVuY3Rpb24oZSxhKXt2YXIgaT1cInJldGV4dC1jYXBpdGFsaXphdGlvblwiPT09ci5zb3VyY2U/ci5leHBlY3RlZFthXTpmdW5jdGlvbihuLGUpe2xldCBhPS0xLGk9ITE7aWYoZS50b1VwcGVyQ2FzZSgpPT09ZSlyZXR1cm4gbi50b1VwcGVyQ2FzZSgpO2lmKGUudG9Mb3dlckNhc2UoKT09PWUpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtmb3IoOysrYTxlLmxlbmd0aDspe2NvbnN0IG49ZS5jaGFyQXQoYSk7aWYobi50b1VwcGVyQ2FzZSgpIT09bi50b0xvd2VyQ2FzZSgpKXtjb25zdCByPWUuc2xpY2UoYSsxKTtpPW49PT1uLnRvVXBwZXJDYXNlKCkmJnI9PT1yLnRvTG93ZXJDYXNlKCk7YnJlYWt9fWlmKGkpZm9yKGE9LTE7KythPG4ubGVuZ3RoOyl7Y29uc3QgZT1uLmNoYXJBdChhKS50b1VwcGVyQ2FzZSgpO2lmKGUhPT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG4uc2xpY2UoMCxhKStlK24uc2xpY2UoYSsxKS50b0xvd2VyQ2FzZSgpfXJldHVybiBufShlLHIuYWN0dWFsKTtyZXR1cm4gYTw1P24uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50XCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuPWUsYT1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxpPXIucG9zaXRpb24uZW5kLm9mZnNldCx0PSh0PVtvLnN1YnN0cmluZygwLGEpLG4sby5zdWJzdHJpbmcoaSldKS5qb2luKFwiXCIpLHZvaWQgTSh0KTt2YXIgbixhLGksdH0sa2V5OmF9LGkpOlwiXCJ9KSkpLDA9PT1yLmV4cGVjdGVkLmxlbmd0aCYmXCI/XCIpKSxcImJhc2ljXCI9PT1SKCkmJmZ1bmN0aW9uKCl7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtcGFzc2l2ZVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIHBhc3NpdmUgdm9pY2U6IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiYmFzaWMtc3VtbWFyeS1leGFtcGxlXCJ9LCdcIi4uLicsKGU9ci5wb3NpdGlvbi5zdGFydC5vZmZzZXQsYT1yLnBvc2l0aW9uLmVuZC5vZmZzZXQsdC5zdWJzdHJpbmcoZS0xMCxhKSksJ1wiJykpO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6cmV0dXJuXCJTZW50ZW5jZSBzcGFjaW5nXCI7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6cmV0dXJuXCJEaWZmaWN1bHQgc2VudGVuY2UgdG8gcmVhZFwiO2RlZmF1bHQ6cmV0dXJuXCJTdWdnZXN0aW9uXCJ9dmFyIGUsYX0oKSkpLG4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWRlc2NyaXB0aW9uXCJ9LG4uY3JlYXRlRWxlbWVudChcInBcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1kZXNjcmlwdGlvbi10ZXh0XCJ9LGZ1bmN0aW9uKCl7dmFyIGUsYT1mdW5jdGlvbihlKXtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsbnVsbCxuLmNyZWF0ZUVsZW1lbnQoXCJlbVwiLG51bGwsZSkpfTtzd2l0Y2goci5zb3VyY2Upe2Nhc2VcInJldGV4dC1zcGVsbFwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIHdvcmQgXCIsYShyLmFjdHVhbCksXCIgaXMgbm90IGluIG91ciBkaWN0aW9uYXJ5LiBJZiB5b3XigJlyZSBzdXJlIHRoaXMgc3BlbGxpbmcgaXMgY29ycmVjdCwgeW91IGNhbiBzdWdnZXN0IHdlIGFkZCBpdCB0byB0aGUgZGljaXRvbmFyeSB0byBwcmV2ZW50IGZ1dHVyZSBhbGVydHMuXCIpO2Nhc2VcInJldGV4dC1jb250cmFjdGlvbnNcIjpyZXR1cm5cIm1pc3Npbmctc21hcnQtYXBvc3Ryb3BoZVwiPT09ci5ydWxlSWQ/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkl0IGFwcGVhcnMgeW91ciBtaXNzaW5nIGFuIGFwb3N0cm9waGUgaW5cIixcIiBcIixhKHIuYWN0dWFsKSxcIi5cIik6XCJzbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJZD9uLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgYXBwZWFycyB5b3VyIHVzaW5nIHRoZSB3cm9uZyBraW5kIG9mIGFwb3N0cm9waGUgaW4gXCIsXCIgXCIsYShyLmFjdHVhbCksXCIuIENvbnNpZGVyIGNoYW5naW5nIGl0IHRvIGEgc21hcnQgYXBvc3Ryb3BoZSBsaWtlIHRoaXM6IFwiLGEoci5leHBlY3RlZCksXCIuXCIpOnIucmVhc29uO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiT29wcyEgSXQgYXBwZWFycyB0aGF0IHlvdSB0eXBlZCBcIixcIiBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIHR3aWNlIGluIGEgcm93LiBDb25zaWRlciBkZWxldGVpbmcgb25lIG9mIHRoZW0uXCIpO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBhcHBlYXJzIHRoYXQgeW91IHVzZWQgXCIsYShyLmFjdHVhbC5sZW5ndGgpLFwiIFwiLFwiIHNwYWNlcyBiZWZvcmUgeW91ciBzZW50ZW5jZS4gQXQgTmV3IFJlbGljLCB3ZSB1c2UgMSBzcGFjZS5cIik7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoaXMgc2VudGVuY2UgYXBwZWFycyB0byBiZSB3cml0dGVuIGluIHRoZSBwYXNzaXZlIHZvaWNlLiBDb25zaWRlciByZXdyaXRpbmcgdGhpcyBpbiB0aGUgYWN0aXZlIHZvaWNlLlwiKTtjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJUaGUgYXJ0aWNsZSBcIixhKHIuYWN0dWFsKSxcIiBcIixcIiBcIixcIiBtYXkgYmUgaW5jb3JyZWN0LiBDb25zaWRlciBjaGFuZ2luZyBpdCB0byBcIixcIiBcIixhKHIuZXhwZWN0ZWQpLFwiIHNvIHRoYXQgaXQgYWdyZWVzIHdpdGggdGhlIGJlZ2lubmluZyBzb3VuZCBvZiB0aGUgZm9sbG93aW5nIHdvcmQuXCIpO2Nhc2VcInJldGV4dC1lcXVhbGl0eVwiOnZhciBpPWs/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkNvbnNpZGVyIHVzaW5nIFwiLGEoci5leHBlY3RlZFswXSksXCIgaW5zdGVhZC5cIik6XCJUcnkgbm90IHRvIHVzZSBpdC5cIjtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxhKHIuYWN0dWFsKSxcIiBcIixcIiBcIixcIiBtYXkgYmUgaW5zZW5zaXRpdmUuXCIsXCIgXCIsaSk7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJXZSdyZSBcIixNYXRoLnJvdW5kKDEwMCpyLmNvbmZpZGVuY2UpLFwiJSBzdXJlIHRoZSBzZW50ZW5jZSBiZWdpbm5pbmcgd2l0aCBcIixhKChlPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LHQuc3Vic3RyaW5nKGUsZSsyMCkpKSxcIi4uLiBpcyBkaWZmaWN1bHQgdG8gcmVhZC4gQ29uc2lkZXIgcmV3cml0aW5nIGl0IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYWQuXCIpO2Nhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJDb25zaWRlciBjaGFuZ2luZyBcIixhKHIuYWN0dWFsKSxcIiB0byBcIixcIiBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIHRvIGdpdmUgeW91ciB3cml0aW5nIGEgbW9yZSBjb252ZXJzYXRpb25hbCBhbmQgcGVyc29uYWwgZmVlbC5cIik7Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiQXZvaWQgdXNpbmcgZW1vamlzIGluIFVJIHRleHQuIElmIHlvdSBoYXZlIHRoZSB1cmdlIHRvIHVzZSBhbiBlbW9qaSAsIGNvbnN1bHQgXCIsXCIgXCIsbi5jcmVhdGVFbGVtZW50KFwiYVwiLHtocmVmOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL1wiLHRhcmdldDpkP1wiX2JsYW5rXCI6XCJfc2VsZlwifSxcIm91ciBkb2NzIGZvciB2b2ljZSBhbmQgdG9uZVwiKSxcIiBcIixcInRvIHJld3JpdGUgeW91ciBtZXNzYWdlIHVudGlsIGl0IGFjaGlldmVzIHlvdXIgZ29hbC5cIik7Y2FzZVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBsb29rcyBsaWtlIFwiLGEoci5hY3R1YWwpLFwiIGlzbid0IHByb3Blcmx5IGNhcGl0YWxpemVkLiBUcnkgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiBpbnN0ZWFkLlwiKTtkZWZhdWx0OnJldHVyblwiVWggb2hcIn19KCkpKSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbnMtY3Rhc1wifSxmdW5jdGlvbigpe3ZhciBlPVwiXCI7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjplPVwiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW1lcmljYW5fRW5nbGlzaFwiO2JyZWFrO2Nhc2VcInJldGV4dC1jb250cmFjdGlvbnNcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1jb250cmFjdGlvbnMjdXNlXCIsXCJtaXNzaW5nLXNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlEP2U9XCJodHRwczovL3d3dy5ncmFtbWFyYm9vay5jb20vcHVuY3R1YXRpb24vYXBvc3Ryby5hc3BcIjpcInNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlEJiYoZT1cImh0dHBzOi8vcHJhY3RpY2FsdHlwb2dyYXBoeS5jb20vc3RyYWlnaHQtYW5kLWN1cmx5LXF1b3Rlcy5odG1sXCIpO2JyZWFrO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOmU9XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXJlcGVhdGVkLXdvcmRzI3JlYWRtZVwiO2JyZWFrO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6ZT1cImh0dHBzOi8vcHJhY3RpY2FsdHlwb2dyYXBoeS5jb20vb25lLXNwYWNlLWJldHdlZW4tc2VudGVuY2VzLmh0bWxcIjticmVhaztjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6ZT1cImh0dHBzOi8vd3d3LmVmLmVkdS9lbmdsaXNoLXJlc291cmNlcy9lbmdsaXNoLWdyYW1tYXIvaW5kZWZpbml0ZS1hcnRpY2xlcy9cIjticmVhaztjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1lcXVhbGl0eS9ibG9iL21haW4vcnVsZXMubWRcIjticmVhaztjYXNlXCJyZXRleHQtcmVhZGFiaWxpdHlcIjplPVwiaHR0cHM6Ly93d3cuZG9yaXNhbmRiZXJ0aWUuY29tL2dvb2Rjb3B5YmFkY29weS8yMDE3LzAyLzE0L3NlbnRlbmNlLXN0cnVjdHVyZS1ob3ctdG8tbWFrZS15b3VyLXNlbnRlbmNlcy1tdWNoLWVhc2llci10by1yZWFkXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjplPVwiaHR0cHM6Ly93d3cuZ3JhbW1hcmx5LmNvbS9ibG9nL2FjdGl2ZS12cy1wYXNzaXZlLXZvaWNlL1wiO2JyZWFrO2Nhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6ZT1cImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vd3JpdGluZy9jb250cmFjdGlvbnMvXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvZW1vamlzL1wiO2JyZWFrO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOmU9XCJodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3Mvc3R5bGUtZ3VpZGUvY2FwaXRhbGl6YXRpb24vcHJvZHVjdC1jYXBhYmlsaXR5LWZlYXR1cmUtdXNhZ2UvI3doZW4tdG8tdXNlLXRpdGxlLWNhc2VcIjticmVhaztkZWZhdWx0OmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL25yMS1wcm9kdWN0L2Rlc2lnbi93cml0aW5nXCJ9cmV0dXJuXCJyZXRleHQtc3BlbGxcIj09PXIuc291cmNlP24uY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnlcIn0sbi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse3NyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU9TSWdhR1ZwWjJoMFBTSTVJaUIyYVdWM1FtOTRQU0l3SURBZ09TQTVJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOGNHRjBhQ0JtYVd4c0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdOc2FYQXRjblZzWlQwaVpYWmxibTlrWkNJZ1pEMGlUVGtnTkVnMVZqQklORlkwU0RCV05VZzBWamxJTlZZMVNEbFdORm9pSUdacGJHdzlJaU0yUlRjMU56VWlMejRLUEM5emRtYytDZz09XCIsYWx0OlwicGx1cyBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXBsdXMtaWNvblwifSksbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1sYWJlbFwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdShyLmFjdHVhbCxyLm5hbWUpLHZvaWQgcyhyLm5hbWUpfX0sXCJBZGQgdG8gZGljdGlvbmFyeVwiKSk6bi5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnlcIixocmVmOmUsdGFyZ2V0OmQ/XCJfYmxhbmtcIjpcIl9zZWxmXCJ9LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFVpSUdobGFXZG9kRDBpTVRVaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TlNBeE5TSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2diM0JoWTJsMGVUMGlNQzQ0SWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRBZ055NDFRekFnTXk0MElETXVOQ0F3SURjdU5TQXdRekV4TGpZZ01DQXhOU0F6TGpRZ01UVWdOeTQxUXpFMUlERXhMallnTVRFdU5pQXhOU0EzTGpVZ01UVkRNeTQwSURFMUlEQWdNVEV1TmlBd0lEY3VOVnBOTVNBM0xqVkRNU0F4TVM0eElETXVPU0F4TkNBM0xqVWdNVFJETVRFdU1TQXhOQ0F4TkNBeE1TNHhJREUwSURjdU5VTXhOQ0F6TGprZ01URXVNU0F4SURjdU5TQXhRek11T1NBeElERWdNeTQ1SURFZ055NDFXazA0SURFeFZqRXlTRGRXTVRGSU9GcE5OU0ExTGpWRE5TQTBMakVnTmk0eElETWdOeTQxSURORE9DNDVJRE1nTVRBZ05DNHhJREV3SURVdU5VTXhNQ0EyTGpjeU9EQXlJRGt1TXpnME5EZ2dOeTR4T0RZMk15QTRMamc1TlRneElEY3VOVFV3TnpORE9DNDRNamN6TnlBM0xqWXdNVGN5SURndU56WXhORElnTnk0Mk5UQTROaUE0TGpjZ055NDNRemd1TmpjMk5qTWdOeTQzTVRRd01pQTRMalkxTXpreElEY3VOekkzTmpFZ09DNDJNekU0TkNBM0xqYzBNRGd4UXpndU1UZ3hOelFnT0M0d01TQTRJRGd1TVRFNE55QTRJRGd1TlZZNVZqRXdTRGRXT1ZZNExqVkROeUEzTGpVNU5UUTBJRGN1TlRjeU56VWdOeTR4T0RFNE1pQTNMamszT0RFMElEWXVPRGc1TURkRE9DNHdNakE1TVNBMkxqZzFPREU0SURndU1EWXhPRElnTmk0NE1qZzJNeUE0TGpFZ05pNDRRemd1TVRJeU9UY2dOaTQzT0RZeU1pQTRMakUwTlRjeUlEWXVOemN5TmpVZ09DNHhOamd5TkNBMkxqYzFPVEl5UXpndU5qTTFPU0EyTGpRNE1ETTJJRGtnTmk0eU5qTXlOU0E1SURVdU5VTTVJRFF1TnlBNExqTWdOQ0EzTGpVZ05FTTJMamNnTkNBMklEUXVOeUEySURVdU5WWTJTRFZXTlM0MVdpSWdabWxzYkQwaUl6WkZOelUzTlNJdlBnbzhMM04yWno0S1wiLGFsdDpcIkhlbHAgaWNvblwiLGNsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1oZWxwLWljb25cIn0pLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtbGFiZWxcIn0sXCJMZWFybiBtb3JlXCIpKX0oKSxuLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5IHN1Z2dlc3Rpb24tY3RhLWljb24tb25seSBcIi5jb25jYXQocD9cImRlbGV0ZS1pcy1ob3ZlcmVkXCI6XCJcIiksb25Nb3VzZUVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEQoc2V0VGltZW91dCgoZnVuY3Rpb24oKXtoKCEwKX0pLDUwMCkpLGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh5KX19LG9uTW91c2VMZWF2ZTpmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoeSksdm9pZCBoKCExKX0sb25DbGljazpmdW5jdGlvbigpe3Moci5uYW1lKX19LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVElpSUdobGFXZG9kRDBpTVRVaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TWlBeE5TSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2diM0JoWTJsMGVUMGlNQzQ0SWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRrZ01FZ3pWakpJTUZZelNERldNVFZJTVRGV00wZ3hNbFl5U0RsV01GcE5OQ0F4U0RoV01rZzBWakZhVFRJZ01UUklNVEJXTTBneVZqRTBXazAwSURWSU5WWXhNa2cwVmpWYVRUZ2dOVWczVmpFeVNEaFdOVm9pSUdacGJHdzlJaU0yUlRjMU56VWlMejRLUEM5emRtYytDZz09XCIsYWx0OlwiRGVsZXRlIGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktdHJhc2gtaWNvblwifSkpKSl9O2Z1bmN0aW9uIEcobil7aWYobil0aHJvdyBufXZhciB3PWEoNzM4KSx2PWEoNDcwKTtmdW5jdGlvbiBrKG4pe2lmKFwiW29iamVjdCBPYmplY3RdXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikpcmV0dXJuITE7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIG51bGw9PT1lfHxlPT09T2JqZWN0LnByb3RvdHlwZX12YXIgUj17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBZKG4pe3JldHVybiBuJiZcIm9iamVjdFwiPT10eXBlb2Ygbj9SLmNhbGwobixcInBvc2l0aW9uXCIpfHxSLmNhbGwobixcInR5cGVcIik/UChuLnBvc2l0aW9uKTpSLmNhbGwobixcInN0YXJ0XCIpfHxSLmNhbGwobixcImVuZFwiKT9QKG4pOlIuY2FsbChuLFwibGluZVwiKXx8Ui5jYWxsKG4sXCJjb2x1bW5cIik/QShuKTpcIlwiOlwiXCJ9ZnVuY3Rpb24gQShuKXtyZXR1cm4gQyhuJiZuLmxpbmUpK1wiOlwiK0MobiYmbi5jb2x1bW4pfWZ1bmN0aW9uIFAobil7cmV0dXJuIEEobiYmbi5zdGFydCkrXCItXCIrQShuJiZuLmVuZCl9ZnVuY3Rpb24gQyhuKXtyZXR1cm4gbiYmXCJudW1iZXJcIj09dHlwZW9mIG4/bjoxfWNsYXNzIFQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihuLGUsYSl7dmFyIGkscj1bbnVsbCxudWxsXSx0PXtzdGFydDp7bGluZTpudWxsLGNvbHVtbjpudWxsfSxlbmQ6e2xpbmU6bnVsbCxjb2x1bW46bnVsbH19O3N1cGVyKCksXCJzdHJpbmdcIj09dHlwZW9mIGUmJihhPWUsZT1udWxsKSxcInN0cmluZ1wiPT10eXBlb2YgYSYmKC0xPT09KGk9YS5pbmRleE9mKFwiOlwiKSk/clsxXT1hOihyWzBdPWEuc2xpY2UoMCxpKSxyWzFdPWEuc2xpY2UoaSsxKSkpLGUmJihcInR5cGVcImluIGV8fFwicG9zaXRpb25cImluIGU/ZS5wb3NpdGlvbiYmKHQ9ZS5wb3NpdGlvbik6XCJzdGFydFwiaW4gZXx8XCJlbmRcImluIGU/dD1lOihcImxpbmVcImluIGV8fFwiY29sdW1uXCJpbiBlKSYmKHQuc3RhcnQ9ZSkpLHRoaXMubmFtZT1ZKGUpfHxcIjE6MVwiLHRoaXMubWVzc2FnZT1cIm9iamVjdFwiPT10eXBlb2Ygbj9uLm1lc3NhZ2U6bix0aGlzLnN0YWNrPVwib2JqZWN0XCI9PXR5cGVvZiBuP24uc3RhY2s6XCJcIix0aGlzLnJlYXNvbj10aGlzLm1lc3NhZ2UsdGhpcy5mYXRhbCx0aGlzLmxpbmU9dC5zdGFydC5saW5lLHRoaXMuY29sdW1uPXQuc3RhcnQuY29sdW1uLHRoaXMuc291cmNlPXJbMF0sdGhpcy5ydWxlSWQ9clsxXSx0aGlzLnBvc2l0aW9uPXQsdGhpcy5hY3R1YWwsdGhpcy5leHBlY3RlZCx0aGlzLmZpbGUsdGhpcy51cmwsdGhpcy5ub3RlfX1ULnByb3RvdHlwZS5maWxlPVwiXCIsVC5wcm90b3R5cGUubmFtZT1cIlwiLFQucHJvdG90eXBlLnJlYXNvbj1cIlwiLFQucHJvdG90eXBlLm1lc3NhZ2U9XCJcIixULnByb3RvdHlwZS5zdGFjaz1cIlwiLFQucHJvdG90eXBlLmZhdGFsPW51bGwsVC5wcm90b3R5cGUuY29sdW1uPW51bGwsVC5wcm90b3R5cGUubGluZT1udWxsLFQucHJvdG90eXBlLnNvdXJjZT1udWxsLFQucHJvdG90eXBlLnJ1bGVJZD1udWxsLFQucHJvdG90eXBlLnBvc2l0aW9uPW51bGw7Y29uc3QgeD1mdW5jdGlvbihuLGUpe2lmKHZvaWQgMCE9PWUmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1oobik7bGV0IGEsaT0wLHI9LTEsdD1uLmxlbmd0aDtpZih2b2lkIDA9PT1lfHwwPT09ZS5sZW5ndGh8fGUubGVuZ3RoPm4ubGVuZ3RoKXtmb3IoO3QtLTspaWYoNDc9PT1uLmNoYXJDb2RlQXQodCkpe2lmKGEpe2k9dCsxO2JyZWFrfX1lbHNlIHI8MCYmKGE9ITAscj10KzEpO3JldHVybiByPDA/XCJcIjpuLnNsaWNlKGkscil9aWYoZT09PW4pcmV0dXJuXCJcIjtsZXQgbz0tMSxNPWUubGVuZ3RoLTE7Zm9yKDt0LS07KWlmKDQ3PT09bi5jaGFyQ29kZUF0KHQpKXtpZihhKXtpPXQrMTticmVha319ZWxzZSBvPDAmJihhPSEwLG89dCsxKSxNPi0xJiYobi5jaGFyQ29kZUF0KHQpPT09ZS5jaGFyQ29kZUF0KE0tLSk/TTwwJiYocj10KTooTT0tMSxyPW8pKTtyZXR1cm4gaT09PXI/cj1vOnI8MCYmKHI9bi5sZW5ndGgpLG4uc2xpY2UoaSxyKX0sej1mdW5jdGlvbihuKXtpZihaKG4pLDA9PT1uLmxlbmd0aClyZXR1cm5cIi5cIjtsZXQgZSxhPS0xLGk9bi5sZW5ndGg7Zm9yKDstLWk7KWlmKDQ3PT09bi5jaGFyQ29kZUF0KGkpKXtpZihlKXthPWk7YnJlYWt9fWVsc2UgZXx8KGU9ITApO3JldHVybiBhPDA/NDc9PT1uLmNoYXJDb2RlQXQoMCk/XCIvXCI6XCIuXCI6MT09PWEmJjQ3PT09bi5jaGFyQ29kZUF0KDApP1wiLy9cIjpuLnNsaWNlKDAsYSl9LEU9ZnVuY3Rpb24obil7WihuKTtsZXQgZSxhPW4ubGVuZ3RoLGk9LTEscj0wLHQ9LTEsbz0wO2Zvcig7YS0tOyl7Y29uc3QgTT1uLmNoYXJDb2RlQXQoYSk7aWYoNDchPT1NKWk8MCYmKGU9ITAsaT1hKzEpLDQ2PT09TT90PDA/dD1hOjEhPT1vJiYobz0xKTp0Pi0xJiYobz0tMSk7ZWxzZSBpZihlKXtyPWErMTticmVha319cmV0dXJuIHQ8MHx8aTwwfHwwPT09b3x8MT09PW8mJnQ9PT1pLTEmJnQ9PT1yKzE/XCJcIjpuLnNsaWNlKHQsaSl9LEI9ZnVuY3Rpb24oLi4ubil7bGV0IGUsYT0tMTtmb3IoOysrYTxuLmxlbmd0aDspWihuW2FdKSxuW2FdJiYoZT12b2lkIDA9PT1lP25bYV06ZStcIi9cIituW2FdKTtyZXR1cm4gdm9pZCAwPT09ZT9cIi5cIjpmdW5jdGlvbihuKXtaKG4pO2NvbnN0IGU9NDc9PT1uLmNoYXJDb2RlQXQoMCk7bGV0IGE9ZnVuY3Rpb24obixlKXtsZXQgYSxpLHI9XCJcIix0PTAsbz0tMSxNPTAscz0tMTtmb3IoOysrczw9bi5sZW5ndGg7KXtpZihzPG4ubGVuZ3RoKWE9bi5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1hKWJyZWFrO2E9NDd9aWYoNDc9PT1hKXtpZihvPT09cy0xfHwxPT09TSk7ZWxzZSBpZihvIT09cy0xJiYyPT09TSl7aWYoci5sZW5ndGg8Mnx8MiE9PXR8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXtpZihpPXIubGFzdEluZGV4T2YoXCIvXCIpLGkhPT1yLmxlbmd0aC0xKXtpPDA/KHI9XCJcIix0PTApOihyPXIuc2xpY2UoMCxpKSx0PXIubGVuZ3RoLTEtci5sYXN0SW5kZXhPZihcIi9cIikpLG89cyxNPTA7Y29udGludWV9fWVsc2UgaWYoci5sZW5ndGg+MCl7cj1cIlwiLHQ9MCxvPXMsTT0wO2NvbnRpbnVlfWUmJihyPXIubGVuZ3RoPjA/citcIi8uLlwiOlwiLi5cIix0PTIpfWVsc2Ugci5sZW5ndGg+MD9yKz1cIi9cIituLnNsaWNlKG8rMSxzKTpyPW4uc2xpY2UobysxLHMpLHQ9cy1vLTE7bz1zLE09MH1lbHNlIDQ2PT09YSYmTT4tMT9NKys6TT0tMX1yZXR1cm4gcn0obiwhZSk7cmV0dXJuIDAhPT1hLmxlbmd0aHx8ZXx8KGE9XCIuXCIpLGEubGVuZ3RoPjAmJjQ3PT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoYSs9XCIvXCIpLGU/XCIvXCIrYTphfShlKX0sTj1cIi9cIjtmdW5jdGlvbiBaKG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkIFwiK0pTT04uc3RyaW5naWZ5KG4pKX1jb25zdCBGPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9O2Z1bmN0aW9uIEkobil7cmV0dXJuIG51bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmbi5ocmVmJiZuLm9yaWdpbn1jb25zdCBVPVtcImhpc3RvcnlcIixcInBhdGhcIixcImJhc2VuYW1lXCIsXCJzdGVtXCIsXCJleHRuYW1lXCIsXCJkaXJuYW1lXCJdO2NsYXNzIGp7Y29uc3RydWN0b3Iobil7bGV0IGU7ZT1uP1wic3RyaW5nXCI9PXR5cGVvZiBufHx3KG4pP3t2YWx1ZTpufTpJKG4pP3twYXRoOm59Om46e30sdGhpcy5kYXRhPXt9LHRoaXMubWVzc2FnZXM9W10sdGhpcy5oaXN0b3J5PVtdLHRoaXMuY3dkPUYoKSx0aGlzLnZhbHVlLHRoaXMuc3RvcmVkLHRoaXMucmVzdWx0LHRoaXMubWFwO2xldCBhLGk9LTE7Zm9yKDsrK2k8VS5sZW5ndGg7KXtjb25zdCBuPVVbaV07biBpbiBlJiZ2b2lkIDAhPT1lW25dJiYodGhpc1tuXT1cImhpc3RvcnlcIj09PW4/Wy4uLmVbbl1dOmVbbl0pfWZvcihhIGluIGUpVS5pbmNsdWRlcyhhKXx8KHRoaXNbYV09ZVthXSl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGgtMV19c2V0IHBhdGgobil7SShuKSYmKG49ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pbj1uZXcgVVJMKG4pO2Vsc2UgaWYoIUkobikpe2NvbnN0IGU9bmV3IFR5cGVFcnJvcignVGhlIFwicGF0aFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJytuK1wiYFwiKTt0aHJvdyBlLmNvZGU9XCJFUlJfSU5WQUxJRF9BUkdfVFlQRVwiLGV9aWYoXCJmaWxlOlwiIT09bi5wcm90b2NvbCl7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKFwiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlXCIpO3Rocm93IG4uY29kZT1cIkVSUl9JTlZBTElEX1VSTF9TQ0hFTUVcIixufXJldHVybiBmdW5jdGlvbihuKXtpZihcIlwiIT09bi5ob3N0bmFtZSl7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKCdGaWxlIFVSTCBob3N0IG11c3QgYmUgXCJsb2NhbGhvc3RcIiBvciBlbXB0eSBvbiBkYXJ3aW4nKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUXCIsbn1jb25zdCBlPW4ucGF0aG5hbWU7bGV0IGE9LTE7Zm9yKDsrK2E8ZS5sZW5ndGg7KWlmKDM3PT09ZS5jaGFyQ29kZUF0KGEpJiY1MD09PWUuY2hhckNvZGVBdChhKzEpKXtjb25zdCBuPWUuY2hhckNvZGVBdChhKzIpO2lmKDcwPT09bnx8MTAyPT09bil7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKFwiRmlsZSBVUkwgcGF0aCBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzXCIpO3Rocm93IG4uY29kZT1cIkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEhcIixufX1yZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfShuKX0obikpLHEobixcInBhdGhcIiksdGhpcy5wYXRoIT09biYmdGhpcy5oaXN0b3J5LnB1c2gobil9Z2V0IGRpcm5hbWUoKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5wYXRoP3oodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGRpcm5hbWUobil7SCh0aGlzLmJhc2VuYW1lLFwiZGlybmFtZVwiKSx0aGlzLnBhdGg9QihufHxcIlwiLHRoaXMuYmFzZW5hbWUpfWdldCBiYXNlbmFtZSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/eCh0aGlzLnBhdGgpOnZvaWQgMH1zZXQgYmFzZW5hbWUobil7cShuLFwiYmFzZW5hbWVcIiksTChuLFwiYmFzZW5hbWVcIiksdGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lfHxcIlwiLG4pfWdldCBleHRuYW1lKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD9FKHRoaXMucGF0aCk6dm9pZCAwfXNldCBleHRuYW1lKG4pe2lmKEwobixcImV4dG5hbWVcIiksSCh0aGlzLmRpcm5hbWUsXCJleHRuYW1lXCIpLG4pe2lmKDQ2IT09bi5jaGFyQ29kZUF0KDApKXRocm93IG5ldyBFcnJvcihcImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gXCIpO2lmKG4uaW5jbHVkZXMoXCIuXCIsMSkpdGhyb3cgbmV3IEVycm9yKFwiYGV4dG5hbWVgIGNhbm5vdCBjb250YWluIG11bHRpcGxlIGRvdHNcIil9dGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lLHRoaXMuc3RlbSsobnx8XCJcIikpfWdldCBzdGVtKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD94KHRoaXMucGF0aCx0aGlzLmV4dG5hbWUpOnZvaWQgMH1zZXQgc3RlbShuKXtxKG4sXCJzdGVtXCIpLEwobixcInN0ZW1cIiksdGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lfHxcIlwiLG4rKHRoaXMuZXh0bmFtZXx8XCJcIikpfXRvU3RyaW5nKG4pe3JldHVybih0aGlzLnZhbHVlfHxcIlwiKS50b1N0cmluZyhuKX1tZXNzYWdlKG4sZSxhKXtjb25zdCBpPW5ldyBUKG4sZSxhKTtyZXR1cm4gdGhpcy5wYXRoJiYoaS5uYW1lPXRoaXMucGF0aCtcIjpcIitpLm5hbWUsaS5maWxlPXRoaXMucGF0aCksaS5mYXRhbD0hMSx0aGlzLm1lc3NhZ2VzLnB1c2goaSksaX1pbmZvKG4sZSxhKXtjb25zdCBpPXRoaXMubWVzc2FnZShuLGUsYSk7cmV0dXJuIGkuZmF0YWw9bnVsbCxpfWZhaWwobixlLGEpe2NvbnN0IGk9dGhpcy5tZXNzYWdlKG4sZSxhKTt0aHJvdyBpLmZhdGFsPSEwLGl9fWZ1bmN0aW9uIEwobixlKXtpZihuJiZuLmluY2x1ZGVzKE4pKXRocm93IG5ldyBFcnJvcihcImBcIitlK1wiYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgXCIrTitcImBcIil9ZnVuY3Rpb24gcShuLGUpe2lmKCFuKXRocm93IG5ldyBFcnJvcihcImBcIitlK1wiYCBjYW5ub3QgYmUgZW1wdHlcIil9ZnVuY3Rpb24gSChuLGUpe2lmKCFuKXRocm93IG5ldyBFcnJvcihcIlNldHRpbmcgYFwiK2UrXCJgIHJlcXVpcmVzIGBwYXRoYCB0byBiZSBzZXQgdG9vXCIpfWNvbnN0IEo9ZnVuY3Rpb24gbigpe2NvbnN0IGU9ZnVuY3Rpb24oKXtjb25zdCBuPVtdLGU9e3J1bjpmdW5jdGlvbiguLi5lKXtsZXQgYT0tMTtjb25zdCBpPWUucG9wKCk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90IFwiK2kpOyFmdW5jdGlvbiByKHQsLi4ubyl7Y29uc3QgTT1uWysrYV07bGV0IHM9LTE7aWYodClpKHQpO2Vsc2V7Zm9yKDsrK3M8ZS5sZW5ndGg7KW51bGwhPT1vW3NdJiZ2b2lkIDAhPT1vW3NdfHwob1tzXT1lW3NdKTtlPW8sTT9mdW5jdGlvbihuLGUpe2xldCBhO3JldHVybiBmdW5jdGlvbiguLi5lKXtjb25zdCB0PW4ubGVuZ3RoPmUubGVuZ3RoO2xldCBvO3QmJmUucHVzaChpKTt0cnl7bz1uKC4uLmUpfWNhdGNoKG4pe2NvbnN0IGU9bjtpZih0JiZhKXRocm93IGU7cmV0dXJuIGkoZSl9dHx8KG8gaW5zdGFuY2VvZiBQcm9taXNlP28udGhlbihyLGkpOm8gaW5zdGFuY2VvZiBFcnJvcj9pKG8pOnIobykpfTtmdW5jdGlvbiBpKG4sLi4uaSl7YXx8KGE9ITAsZShuLC4uLmkpKX1mdW5jdGlvbiByKG4pe2kobnVsbCxuKX19KE0scikoLi4ubyk6aShudWxsLC4uLm8pfX0obnVsbCwuLi5lKX0sdXNlOmZ1bmN0aW9uKGEpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgXCIrYSk7cmV0dXJuIG4ucHVzaChhKSxlfX07cmV0dXJuIGV9KCksYT1bXTtsZXQgaSxyPXt9LHQ9LTE7cmV0dXJuIG8uZGF0YT1mdW5jdGlvbihuLGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuPzI9PT1hcmd1bWVudHMubGVuZ3RoPyhLKFwiZGF0YVwiLGkpLHJbbl09ZSxvKTpPLmNhbGwocixuKSYmcltuXXx8bnVsbDpuPyhLKFwiZGF0YVwiLGkpLHI9bixvKTpyfSxvLlBhcnNlcj12b2lkIDAsby5Db21waWxlcj12b2lkIDAsby5mcmVlemU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiBvO2Zvcig7Kyt0PGEubGVuZ3RoOyl7Y29uc3RbbiwuLi5pXT1hW3RdO2lmKCExPT09aVswXSljb250aW51ZTshMD09PWlbMF0mJihpWzFdPXZvaWQgMCk7Y29uc3Qgcj1uLmNhbGwobywuLi5pKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZlLnVzZShyKX1yZXR1cm4gaT0hMCx0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvfSxvLmF0dGFjaGVycz1hLG8udXNlPWZ1bmN0aW9uKG4sLi4uZSl7bGV0IHQ7aWYoSyhcInVzZVwiLGkpLG51bGw9PW4pO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbiljKG4sLi4uZSk7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYFwiK24rXCJgXCIpO0FycmF5LmlzQXJyYXkobik/bChuKTpzKG4pfXJldHVybiB0JiYoci5zZXR0aW5ncz1PYmplY3QuYXNzaWduKHIuc2V0dGluZ3N8fHt9LHQpKSxvO2Z1bmN0aW9uIE0obil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbiljKG4pO2Vsc2V7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGBcIituK1wiYFwiKTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdFtlLC4uLmFdPW47YyhlLC4uLmEpfWVsc2UgcyhuKX19ZnVuY3Rpb24gcyhuKXtsKG4ucGx1Z2lucyksbi5zZXR0aW5ncyYmKHQ9T2JqZWN0LmFzc2lnbih0fHx7fSxuLnNldHRpbmdzKSl9ZnVuY3Rpb24gbChuKXtsZXQgZT0tMTtpZihudWxsPT1uKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGBcIituK1wiYFwiKTtmb3IoOysrZTxuLmxlbmd0aDspTShuW2VdKX19ZnVuY3Rpb24gYyhuLGUpe2xldCBpLHI9LTE7Zm9yKDsrK3I8YS5sZW5ndGg7KWlmKGFbcl1bMF09PT1uKXtpPWFbcl07YnJlYWt9aT8oayhpWzFdKSYmayhlKSYmKGU9dighMCxpWzFdLGUpKSxpWzFdPWUpOmEucHVzaChbLi4uYXJndW1lbnRzXSl9fSxvLnBhcnNlPWZ1bmN0aW9uKG4pe28uZnJlZXplKCk7Y29uc3QgZT1fKG4pLGE9by5QYXJzZXI7cmV0dXJuIFYoXCJwYXJzZVwiLGEpLFgoYSxcInBhcnNlXCIpP25ldyBhKFN0cmluZyhlKSxlKS5wYXJzZSgpOmEoU3RyaW5nKGUpLGUpfSxvLnN0cmluZ2lmeT1mdW5jdGlvbihuLGUpe28uZnJlZXplKCk7Y29uc3QgYT1fKGUpLGk9by5Db21waWxlcjtyZXR1cm4gVyhcInN0cmluZ2lmeVwiLGkpLCQobiksWChpLFwiY29tcGlsZVwiKT9uZXcgaShuLGEpLmNvbXBpbGUoKTppKG4sYSl9LG8ucnVuPWZ1bmN0aW9uKG4sYSxpKXtpZigkKG4pLG8uZnJlZXplKCksaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYXx8KGk9YSxhPXZvaWQgMCksIWkpcmV0dXJuIG5ldyBQcm9taXNlKHIpO2Z1bmN0aW9uIHIocix0KXtlLnJ1bihuLF8oYSksKGZ1bmN0aW9uKGUsYSxvKXthPWF8fG4sZT90KGUpOnI/cihhKTppKG51bGwsYSxvKX0pKX1yKG51bGwsaSl9LG8ucnVuU3luYz1mdW5jdGlvbihuLGUpe2xldCBhLGk7cmV0dXJuIG8ucnVuKG4sZSwoZnVuY3Rpb24obixlKXtHKG4pLGE9ZSxpPSEwfSkpLFEoXCJydW5TeW5jXCIsXCJydW5cIixpKSxhfSxvLnByb2Nlc3M9ZnVuY3Rpb24obixlKXtpZihvLmZyZWV6ZSgpLFYoXCJwcm9jZXNzXCIsby5QYXJzZXIpLFcoXCJwcm9jZXNzXCIsby5Db21waWxlciksIWUpcmV0dXJuIG5ldyBQcm9taXNlKGEpO2Z1bmN0aW9uIGEoYSxpKXtjb25zdCByPV8obik7ZnVuY3Rpb24gdChuLHIpe258fCFyP2kobik6YT9hKHIpOmUobnVsbCxyKX1vLnJ1bihvLnBhcnNlKHIpLHIsKChuLGUsYSk9PntpZighbiYmZSYmYSl7Y29uc3Qgcj1vLnN0cmluZ2lmeShlLGEpO251bGw9PXJ8fChcInN0cmluZ1wiPT10eXBlb2YoaT1yKXx8dyhpKT9hLnZhbHVlPXI6YS5yZXN1bHQ9ciksdChuLGEpfWVsc2UgdChuKTt2YXIgaX0pKX1hKG51bGwsZSl9LG8ucHJvY2Vzc1N5bmM9ZnVuY3Rpb24obil7bGV0IGU7by5mcmVlemUoKSxWKFwicHJvY2Vzc1N5bmNcIixvLlBhcnNlciksVyhcInByb2Nlc3NTeW5jXCIsby5Db21waWxlcik7Y29uc3QgYT1fKG4pO3JldHVybiBvLnByb2Nlc3MoYSwoZnVuY3Rpb24obil7ZT0hMCxHKG4pfSkpLFEoXCJwcm9jZXNzU3luY1wiLFwicHJvY2Vzc1wiLGUpLGF9LG87ZnVuY3Rpb24gbygpe2NvbnN0IGU9bigpO2xldCBpPS0xO2Zvcig7KytpPGEubGVuZ3RoOyllLnVzZSguLi5hW2ldKTtyZXR1cm4gZS5kYXRhKHYoITAse30scikpLGV9fSgpLmZyZWV6ZSgpLE89e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWChuLGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlJiYoZnVuY3Rpb24obil7bGV0IGU7Zm9yKGUgaW4gbilpZihPLmNhbGwobixlKSlyZXR1cm4hMDtyZXR1cm4hMX0obi5wcm90b3R5cGUpfHxlIGluIG4ucHJvdG90eXBlKX1mdW5jdGlvbiBWKG4sZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGBcIituK1wiYCB3aXRob3V0IGBQYXJzZXJgXCIpfWZ1bmN0aW9uIFcobixlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYFwiK24rXCJgIHdpdGhvdXQgYENvbXBpbGVyYFwiKX1mdW5jdGlvbiBLKG4sZSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2FsbCBgXCIrbitcImAgb24gYSBmcm96ZW4gcHJvY2Vzc29yLlxcbkNyZWF0ZSBhIG5ldyBwcm9jZXNzb3IgZmlyc3QsIGJ5IGNhbGxpbmcgaXQ6IHVzZSBgcHJvY2Vzc29yKClgIGluc3RlYWQgb2YgYHByb2Nlc3NvcmAuXCIpfWZ1bmN0aW9uICQobil7aWYoIWsobil8fFwic3RyaW5nXCIhPXR5cGVvZiBuLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG5vZGUsIGdvdCBgXCIrbitcImBcIil9ZnVuY3Rpb24gUShuLGUsYSl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiYFwiK24rXCJgIGZpbmlzaGVkIGFzeW5jLiBVc2UgYFwiK2UrXCJgIGluc3RlYWRcIil9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4obiYmXCJvYmplY3RcIj09dHlwZW9mIG4mJlwibWVzc2FnZVwiaW4gbiYmXCJtZXNzYWdlc1wiaW4gbil9KG4pP246bmV3IGoobil9ZnVuY3Rpb24gbm4obil7Y29uc3QgZT1jbGFzcyBleHRlbmRzIG57fSxhPWUucHJvdG90eXBlO2xldCBpO2ZvcihpIGluIGEpe2NvbnN0IG49YVtpXTtuJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmKGFbaV09XCJjb25jYXRcImluIG4/bi5jb25jYXQoKTpPYmplY3QuYXNzaWduKHt9LG4pKX1yZXR1cm4gZX12YXIgZW49YSg4MDIpLGFuPWEoNzY2KSxybj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI7aWYoKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCImXCI9PT1lbihuKSYmKHI9KGk9YS5jaGlsZHJlbilbZSsxXSwhKGU+MCYmXCJXb3JkTm9kZVwiPT09aVtlLTFdLnR5cGUpJiZyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUpKXJldHVybiBpLnNwbGljZShlLDEpLHIuY2hpbGRyZW4udW5zaGlmdChuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxlLTF9KSksdG49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQ7aWYoZT4wJiYoXCJTeW1ib2xOb2RlXCI9PT1uLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1uLnR5cGUpJiZcIi1cIj09PWVuKG4pJiYocj0oaT1hLmNoaWxkcmVuKVtlLTFdLCghKHQ9aVtlKzFdKXx8XCJXb3JkTm9kZVwiIT09dC50eXBlKSYmciYmXCJXb3JkTm9kZVwiPT09ci50eXBlKSlyZXR1cm4gaS5zcGxpY2UoZSwxKSxyLmNoaWxkcmVuLnB1c2gobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfSkpLG9uPS9eKFshXCInKS4/XFx1MDBCQlxcdTBGM0JcXHUwRjNEXFx1MTY5Q1xcdTIwMTlcXHUyMDFEXFx1MjAyNlxcdTIwM0FcXHUyMDNEXFx1MjA0NlxcdTIwN0VcXHUyMDhFXFx1MjMwOVxcdTIzMEJcXHUyMzJBXFx1Mjc2OVxcdTI3NkJcXHUyNzZEXFx1Mjc2RlxcdTI3NzFcXHUyNzczXFx1Mjc3NVxcdTI3QzZcXHUyN0U3XFx1MjdFOVxcdTI3RUJcXHUyN0VEXFx1MjdFRlxcdTI5ODRcXHUyOTg2XFx1Mjk4OFxcdTI5OEFcXHUyOThDXFx1Mjk4RVxcdTI5OTBcXHUyOTkyXFx1Mjk5NFxcdTI5OTZcXHUyOTk4XFx1MjlEOVxcdTI5REJcXHUyOUZEXFx1MkUwM1xcdTJFMDVcXHUyRTBBXFx1MkUwRFxcdTJFMURcXHUyRTIxXFx1MkUyM1xcdTJFMjVcXHUyRTI3XFx1MkUyOVxcdTMwMDlcXHUzMDBCXFx1MzAwRFxcdTMwMEZcXHUzMDExXFx1MzAxNVxcdTMwMTdcXHUzMDE5XFx1MzAxQlxcdTMwMUVcXHUzMDFGXFx1RkQzRVxcdUZFMThcXHVGRTM2XFx1RkUzOFxcdUZFM0FcXHVGRTNDXFx1RkUzRVxcdUZFNDBcXHVGRTQyXFx1RkU0NFxcdUZFNDhcXHVGRTVBXFx1RkU1Q1xcdUZFNUVcXHVGRjA5XFx1RkYzRFxcdUZGNURcXHVGRjYwXFx1RkY2M1xcXX1dKVxcMSokLyxNbj0vXlsgXFx0XSooKFxccj9cXG58XFxyKVtcXHQgXSopezIsfSQvLHNuPS9eKFshLj9cXHUyMDI2XFx1MjAzRF0rKSQvLGxuPS9eKFsmJ1xcLS46PT9AXFx1MDBBRFxcdTAwQjdcXHUyMDEwXFx1MjAxMVxcdTIwMTlcXHUyMDI3XXxfKykkLyxjbj0vXig/OltcXGRcXHUwMEIyXFx1MDBCM1xcdTAwQjlcXHUwMEJDLVxcdTAwQkVcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwOUY0LVxcdTA5RjlcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQjcyLVxcdTBCNzdcXHUwQkU2LVxcdTBCRjJcXHUwQzY2LVxcdTBDNkZcXHUwQzc4LVxcdTBDN0VcXHUwQ0U2LVxcdTBDRUZcXHUwRDU4LVxcdTBENUVcXHUwRDY2LVxcdTBENzhcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMzNcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxMzY5LVxcdTEzN0NcXHUxNkVFLVxcdTE2RjBcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5REFcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTgyXFx1MjE4NS1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkNGRFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBNjIwLVxcdUE2MjlcXHVBNkU2LVxcdUE2RUZcXHVBODMwLVxcdUE4MzVcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTldfFxcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ0MC1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNcXHVERjQxXFx1REY0QVxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQ0EwLVxcdURDQTldfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERDMwLVxcdUREMzlcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzZGXFx1RENGMC1cXHVEQ0Y5XFx1REQzNi1cXHVERDNGXFx1REREMC1cXHVEREQ5XFx1RERFMS1cXHVEREY0XFx1REVGMC1cXHVERUY5XXxcXHVEODA1W1xcdURDNTAtXFx1REM1OVxcdURDRDAtXFx1RENEOVxcdURFNTAtXFx1REU1OVxcdURFQzAtXFx1REVDOVxcdURGMzAtXFx1REYzQl18XFx1RDgwNltcXHVEQ0UwLVxcdURDRjJcXHVERDUwLVxcdURENTldfFxcdUQ4MDdbXFx1REM1MC1cXHVEQzZDXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE5XFx1REZDMC1cXHVERkQ0XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18XFx1RDgxQVtcXHVERTYwLVxcdURFNjlcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFdfFxcdUQ4MUJbXFx1REU4MC1cXHVERTk2XXxcXHVEODM0W1xcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVERkNFLVxcdURGRkZdfFxcdUQ4MzhbXFx1REQ0MC1cXHVERDQ5XFx1REVGMC1cXHVERUY5XXxcXHVEODNBW1xcdURDQzctXFx1RENDRlxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVEQzcxLVxcdURDQUJcXHVEQ0FELVxcdURDQUZcXHVEQ0IxLVxcdURDQjRcXHVERDAxLVxcdUREMkRcXHVERDJGLVxcdUREM0RdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0pKyQvLFNuPS9eXFxkLyx1bj0vXig/OlthLXpcXHUwMEI1XFx1MDBERi1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGXFx1MDEwMVxcdTAxMDNcXHUwMTA1XFx1MDEwN1xcdTAxMDlcXHUwMTBCXFx1MDEwRFxcdTAxMEZcXHUwMTExXFx1MDExM1xcdTAxMTVcXHUwMTE3XFx1MDExOVxcdTAxMUJcXHUwMTFEXFx1MDExRlxcdTAxMjFcXHUwMTIzXFx1MDEyNVxcdTAxMjdcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHUwMTJGXFx1MDEzMVxcdTAxMzNcXHUwMTM1XFx1MDEzN1xcdTAxMzhcXHUwMTNBXFx1MDEzQ1xcdTAxM0VcXHUwMTQwXFx1MDE0MlxcdTAxNDRcXHUwMTQ2XFx1MDE0OFxcdTAxNDlcXHUwMTRCXFx1MDE0RFxcdTAxNEZcXHUwMTUxXFx1MDE1M1xcdTAxNTVcXHUwMTU3XFx1MDE1OVxcdTAxNUJcXHUwMTVEXFx1MDE1RlxcdTAxNjFcXHUwMTYzXFx1MDE2NVxcdTAxNjdcXHUwMTY5XFx1MDE2QlxcdTAxNkRcXHUwMTZGXFx1MDE3MVxcdTAxNzNcXHUwMTc1XFx1MDE3N1xcdTAxN0FcXHUwMTdDXFx1MDE3RS1cXHUwMTgwXFx1MDE4M1xcdTAxODVcXHUwMTg4XFx1MDE4Q1xcdTAxOERcXHUwMTkyXFx1MDE5NVxcdTAxOTktXFx1MDE5QlxcdTAxOUVcXHUwMUExXFx1MDFBM1xcdTAxQTVcXHUwMUE4XFx1MDFBQVxcdTAxQUJcXHUwMUFEXFx1MDFCMFxcdTAxQjRcXHUwMUI2XFx1MDFCOVxcdTAxQkFcXHUwMUJELVxcdTAxQkZcXHUwMUM2XFx1MDFDOVxcdTAxQ0NcXHUwMUNFXFx1MDFEMFxcdTAxRDJcXHUwMUQ0XFx1MDFENlxcdTAxRDhcXHUwMURBXFx1MDFEQ1xcdTAxRERcXHUwMURGXFx1MDFFMVxcdTAxRTNcXHUwMUU1XFx1MDFFN1xcdTAxRTlcXHUwMUVCXFx1MDFFRFxcdTAxRUZcXHUwMUYwXFx1MDFGM1xcdTAxRjVcXHUwMUY5XFx1MDFGQlxcdTAxRkRcXHUwMUZGXFx1MDIwMVxcdTAyMDNcXHUwMjA1XFx1MDIwN1xcdTAyMDlcXHUwMjBCXFx1MDIwRFxcdTAyMEZcXHUwMjExXFx1MDIxM1xcdTAyMTVcXHUwMjE3XFx1MDIxOVxcdTAyMUJcXHUwMjFEXFx1MDIxRlxcdTAyMjFcXHUwMjIzXFx1MDIyNVxcdTAyMjdcXHUwMjI5XFx1MDIyQlxcdTAyMkRcXHUwMjJGXFx1MDIzMVxcdTAyMzMtXFx1MDIzOVxcdTAyM0NcXHUwMjNGXFx1MDI0MFxcdTAyNDJcXHUwMjQ3XFx1MDI0OVxcdTAyNEJcXHUwMjREXFx1MDI0Ri1cXHUwMjkzXFx1MDI5NS1cXHUwMkFGXFx1MDM3MVxcdTAzNzNcXHUwMzc3XFx1MDM3Qi1cXHUwMzdEXFx1MDM5MFxcdTAzQUMtXFx1MDNDRVxcdTAzRDBcXHUwM0QxXFx1MDNENS1cXHUwM0Q3XFx1MDNEOVxcdTAzREJcXHUwM0REXFx1MDNERlxcdTAzRTFcXHUwM0UzXFx1MDNFNVxcdTAzRTdcXHUwM0U5XFx1MDNFQlxcdTAzRURcXHUwM0VGLVxcdTAzRjNcXHUwM0Y1XFx1MDNGOFxcdTAzRkJcXHUwM0ZDXFx1MDQzMC1cXHUwNDVGXFx1MDQ2MVxcdTA0NjNcXHUwNDY1XFx1MDQ2N1xcdTA0NjlcXHUwNDZCXFx1MDQ2RFxcdTA0NkZcXHUwNDcxXFx1MDQ3M1xcdTA0NzVcXHUwNDc3XFx1MDQ3OVxcdTA0N0JcXHUwNDdEXFx1MDQ3RlxcdTA0ODFcXHUwNDhCXFx1MDQ4RFxcdTA0OEZcXHUwNDkxXFx1MDQ5M1xcdTA0OTVcXHUwNDk3XFx1MDQ5OVxcdTA0OUJcXHUwNDlEXFx1MDQ5RlxcdTA0QTFcXHUwNEEzXFx1MDRBNVxcdTA0QTdcXHUwNEE5XFx1MDRBQlxcdTA0QURcXHUwNEFGXFx1MDRCMVxcdTA0QjNcXHUwNEI1XFx1MDRCN1xcdTA0QjlcXHUwNEJCXFx1MDRCRFxcdTA0QkZcXHUwNEMyXFx1MDRDNFxcdTA0QzZcXHUwNEM4XFx1MDRDQVxcdTA0Q0NcXHUwNENFXFx1MDRDRlxcdTA0RDFcXHUwNEQzXFx1MDRENVxcdTA0RDdcXHUwNEQ5XFx1MDREQlxcdTA0RERcXHUwNERGXFx1MDRFMVxcdTA0RTNcXHUwNEU1XFx1MDRFN1xcdTA0RTlcXHUwNEVCXFx1MDRFRFxcdTA0RUZcXHUwNEYxXFx1MDRGM1xcdTA0RjVcXHUwNEY3XFx1MDRGOVxcdTA0RkJcXHUwNEZEXFx1MDRGRlxcdTA1MDFcXHUwNTAzXFx1MDUwNVxcdTA1MDdcXHUwNTA5XFx1MDUwQlxcdTA1MERcXHUwNTBGXFx1MDUxMVxcdTA1MTNcXHUwNTE1XFx1MDUxN1xcdTA1MTlcXHUwNTFCXFx1MDUxRFxcdTA1MUZcXHUwNTIxXFx1MDUyM1xcdTA1MjVcXHUwNTI3XFx1MDUyOVxcdTA1MkJcXHUwNTJEXFx1MDUyRlxcdTA1NjAtXFx1MDU4OFxcdTEwRDAtXFx1MTBGQVxcdTEwRkQtXFx1MTBGRlxcdTEzRjgtXFx1MTNGRFxcdTFDODAtXFx1MUM4OFxcdTFEMDAtXFx1MUQyQlxcdTFENkItXFx1MUQ3N1xcdTFENzktXFx1MUQ5QVxcdTFFMDFcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUxRTA5XFx1MUUwQlxcdTFFMERcXHUxRTBGXFx1MUUxMVxcdTFFMTNcXHUxRTE1XFx1MUUxN1xcdTFFMTlcXHUxRTFCXFx1MUUxRFxcdTFFMUZcXHUxRTIxXFx1MUUyM1xcdTFFMjVcXHUxRTI3XFx1MUUyOVxcdTFFMkJcXHUxRTJEXFx1MUUyRlxcdTFFMzFcXHUxRTMzXFx1MUUzNVxcdTFFMzdcXHUxRTM5XFx1MUUzQlxcdTFFM0RcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUxRTQ1XFx1MUU0N1xcdTFFNDlcXHUxRTRCXFx1MUU0RFxcdTFFNEZcXHUxRTUxXFx1MUU1M1xcdTFFNTVcXHUxRTU3XFx1MUU1OVxcdTFFNUJcXHUxRTVEXFx1MUU1RlxcdTFFNjFcXHUxRTYzXFx1MUU2NVxcdTFFNjdcXHUxRTY5XFx1MUU2QlxcdTFFNkRcXHUxRTZGXFx1MUU3MVxcdTFFNzNcXHUxRTc1XFx1MUU3N1xcdTFFNzlcXHUxRTdCXFx1MUU3RFxcdTFFN0ZcXHUxRTgxXFx1MUU4M1xcdTFFODVcXHUxRTg3XFx1MUU4OVxcdTFFOEJcXHUxRThEXFx1MUU4RlxcdTFFOTFcXHUxRTkzXFx1MUU5NS1cXHUxRTlEXFx1MUU5RlxcdTFFQTFcXHUxRUEzXFx1MUVBNVxcdTFFQTdcXHUxRUE5XFx1MUVBQlxcdTFFQURcXHUxRUFGXFx1MUVCMVxcdTFFQjNcXHUxRUI1XFx1MUVCN1xcdTFFQjlcXHUxRUJCXFx1MUVCRFxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVDOVxcdTFFQ0JcXHUxRUNEXFx1MUVDRlxcdTFFRDFcXHUxRUQzXFx1MUVENVxcdTFFRDdcXHUxRUQ5XFx1MUVEQlxcdTFFRERcXHUxRURGXFx1MUVFMVxcdTFFRTNcXHUxRUU1XFx1MUVFN1xcdTFFRTlcXHUxRUVCXFx1MUVFRFxcdTFFRUZcXHUxRUYxXFx1MUVGM1xcdTFFRjVcXHUxRUY3XFx1MUVGOVxcdTFFRkJcXHUxRUZEXFx1MUVGRi1cXHUxRjA3XFx1MUYxMC1cXHUxRjE1XFx1MUYyMC1cXHUxRjI3XFx1MUYzMC1cXHUxRjM3XFx1MUY0MC1cXHUxRjQ1XFx1MUY1MC1cXHUxRjU3XFx1MUY2MC1cXHUxRjY3XFx1MUY3MC1cXHUxRjdEXFx1MUY4MC1cXHUxRjg3XFx1MUY5MC1cXHUxRjk3XFx1MUZBMC1cXHUxRkE3XFx1MUZCMC1cXHUxRkI0XFx1MUZCNlxcdTFGQjdcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNlxcdTFGQzdcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2XFx1MUZEN1xcdTFGRTAtXFx1MUZFN1xcdTFGRjItXFx1MUZGNFxcdTFGRjZcXHUxRkY3XFx1MjEwQVxcdTIxMEVcXHUyMTBGXFx1MjExM1xcdTIxMkZcXHUyMTM0XFx1MjEzOVxcdTIxM0NcXHUyMTNEXFx1MjE0Ni1cXHUyMTQ5XFx1MjE0RVxcdTIxODRcXHUyQzMwLVxcdTJDNUVcXHUyQzYxXFx1MkM2NVxcdTJDNjZcXHUyQzY4XFx1MkM2QVxcdTJDNkNcXHUyQzcxXFx1MkM3M1xcdTJDNzRcXHUyQzc2LVxcdTJDN0JcXHUyQzgxXFx1MkM4M1xcdTJDODVcXHUyQzg3XFx1MkM4OVxcdTJDOEJcXHUyQzhEXFx1MkM4RlxcdTJDOTFcXHUyQzkzXFx1MkM5NVxcdTJDOTdcXHUyQzk5XFx1MkM5QlxcdTJDOURcXHUyQzlGXFx1MkNBMVxcdTJDQTNcXHUyQ0E1XFx1MkNBN1xcdTJDQTlcXHUyQ0FCXFx1MkNBRFxcdTJDQUZcXHUyQ0IxXFx1MkNCM1xcdTJDQjVcXHUyQ0I3XFx1MkNCOVxcdTJDQkJcXHUyQ0JEXFx1MkNCRlxcdTJDQzFcXHUyQ0MzXFx1MkNDNVxcdTJDQzdcXHUyQ0M5XFx1MkNDQlxcdTJDQ0RcXHUyQ0NGXFx1MkNEMVxcdTJDRDNcXHUyQ0Q1XFx1MkNEN1xcdTJDRDlcXHUyQ0RCXFx1MkNERFxcdTJDREZcXHUyQ0UxXFx1MkNFM1xcdTJDRTRcXHUyQ0VDXFx1MkNFRVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdUE2NDFcXHVBNjQzXFx1QTY0NVxcdUE2NDdcXHVBNjQ5XFx1QTY0QlxcdUE2NERcXHVBNjRGXFx1QTY1MVxcdUE2NTNcXHVBNjU1XFx1QTY1N1xcdUE2NTlcXHVBNjVCXFx1QTY1RFxcdUE2NUZcXHVBNjYxXFx1QTY2M1xcdUE2NjVcXHVBNjY3XFx1QTY2OVxcdUE2NkJcXHVBNjZEXFx1QTY4MVxcdUE2ODNcXHVBNjg1XFx1QTY4N1xcdUE2ODlcXHVBNjhCXFx1QTY4RFxcdUE2OEZcXHVBNjkxXFx1QTY5M1xcdUE2OTVcXHVBNjk3XFx1QTY5OVxcdUE2OUJcXHVBNzIzXFx1QTcyNVxcdUE3MjdcXHVBNzI5XFx1QTcyQlxcdUE3MkRcXHVBNzJGLVxcdUE3MzFcXHVBNzMzXFx1QTczNVxcdUE3MzdcXHVBNzM5XFx1QTczQlxcdUE3M0RcXHVBNzNGXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTc0N1xcdUE3NDlcXHVBNzRCXFx1QTc0RFxcdUE3NEZcXHVBNzUxXFx1QTc1M1xcdUE3NTVcXHVBNzU3XFx1QTc1OVxcdUE3NUJcXHVBNzVEXFx1QTc1RlxcdUE3NjFcXHVBNzYzXFx1QTc2NVxcdUE3NjdcXHVBNzY5XFx1QTc2QlxcdUE3NkRcXHVBNzZGXFx1QTc3MS1cXHVBNzc4XFx1QTc3QVxcdUE3N0NcXHVBNzdGXFx1QTc4MVxcdUE3ODNcXHVBNzg1XFx1QTc4N1xcdUE3OENcXHVBNzhFXFx1QTc5MVxcdUE3OTMtXFx1QTc5NVxcdUE3OTdcXHVBNzk5XFx1QTc5QlxcdUE3OURcXHVBNzlGXFx1QTdBMVxcdUE3QTNcXHVBN0E1XFx1QTdBN1xcdUE3QTlcXHVBN0FGXFx1QTdCNVxcdUE3QjdcXHVBN0I5XFx1QTdCQlxcdUE3QkRcXHVBN0JGXFx1QTdDM1xcdUE3QzhcXHVBN0NBXFx1QTdGNlxcdUE3RkFcXHVBQjMwLVxcdUFCNUFcXHVBQjYwLVxcdUFCNjhcXHVBQjcwLVxcdUFCQkZcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGRjQxLVxcdUZGNUFdfFxcdUQ4MDFbXFx1REMyOC1cXHVEQzRGXFx1RENEOC1cXHVEQ0ZCXXxcXHVEODAzW1xcdURDQzAtXFx1RENGMl18XFx1RDgwNltcXHVEQ0MwLVxcdURDREZdfFxcdUQ4MUJbXFx1REU2MC1cXHVERTdGXXxcXHVEODM1W1xcdURDMUEtXFx1REMzM1xcdURDNEUtXFx1REM1NFxcdURDNTYtXFx1REM2N1xcdURDODItXFx1REM5QlxcdURDQjYtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdURDQ0ZcXHVEQ0VBLVxcdUREMDNcXHVERDFFLVxcdUREMzdcXHVERDUyLVxcdURENkJcXHVERDg2LVxcdUREOUZcXHVEREJBLVxcdURERDNcXHVEREVFLVxcdURFMDdcXHVERTIyLVxcdURFM0JcXHVERTU2LVxcdURFNkZcXHVERThBLVxcdURFQTVcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRTFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMUJcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNTVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGOEZcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQzlcXHVERkNCXXxcXHVEODNBW1xcdUREMjItXFx1REQ0M10pLyxkbj0vW1xcdUQ4MDAtXFx1REZGRl0vLG1uPS9bIVwiJy0pLC0vOjs/Wy1cXF1fe31cXHUwMEExXFx1MDBBN1xcdTAwQUJcXHUwMEI2XFx1MDBCN1xcdTAwQkJcXHUwMEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAxRlxcdTIwMjItXFx1MjAyN1xcdTIwMzItXFx1MjAzQVxcdTIwM0MtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURFQURcXHVERjU1LVxcdURGNTldfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOFxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQzRCLVxcdURDNEZcXHVEQzVBXFx1REM1QlxcdURDNURcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REU2MC1cXHVERTZDXFx1REYzQy1cXHVERjNFXXxcXHVEODA2W1xcdURDM0JcXHVERDQ0LVxcdURENDZcXHVEREUyXFx1REUzRi1cXHVERTQ2XFx1REU5QS1cXHVERTlDXFx1REU5RS1cXHVERUEyXXxcXHVEODA3W1xcdURDNDEtXFx1REM0NVxcdURDNzBcXHVEQzcxXFx1REVGN1xcdURFRjhcXHVERkZGXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODFCW1xcdURFOTctXFx1REU5QVxcdURGRTJdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXXxcXHVEODNBW1xcdURENUVcXHVERDVGXS8scG49L1tcXGRBLVphLXpcXHUwMEFBXFx1MDBCMlxcdTAwQjNcXHUwMEI1XFx1MDBCOVxcdTAwQkFcXHUwMEJDLVxcdTAwQkVcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDdGRFxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhDN1xcdTA4RDMtXFx1MDhFMVxcdTA4RTMtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MDlGNC1cXHUwOUY5XFx1MDlGQ1xcdTA5RkVcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEFGOS1cXHUwQUZGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NS1cXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxLVxcdTBCNzdcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJGMlxcdTBDMDAtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM3OC1cXHUwQzdFXFx1MEM4MC1cXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAwLVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU0LVxcdTBENjNcXHUwRDY2LVxcdTBENzhcXHUwRDdBLVxcdTBEN0ZcXHUwRDgxLVxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjMzXFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzY5LVxcdTEzN0NcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE3RjAtXFx1MTdGOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEQVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQUIwLVxcdTFBQzBcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRkFcXHUxRDAwLVxcdTFERjlcXHUxREZCLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MFxcdTIwNzFcXHUyMDc0LVxcdTIwNzlcXHUyMDdGLVxcdTIwODlcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE1MC1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkNGRFxcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxOTItXFx1MzE5NVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTMyMjAtXFx1MzIyOVxcdTMyNDgtXFx1MzI0RlxcdTMyNTEtXFx1MzI1RlxcdTMyODAtXFx1MzI4OVxcdTMyQjEtXFx1MzJCRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY3MlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDQVxcdUE3RjUtXFx1QTgyN1xcdUE4MkNcXHVBODMwLVxcdUE4MzVcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzVcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QThGRC1cXHVBOTJEXFx1QTkzMC1cXHVBOTUzXFx1QTk2MC1cXHVBOTdDXFx1QTk4MC1cXHVBOUMwXFx1QTlDRi1cXHVBOUQ5XFx1QTlFMC1cXHVBOUZFXFx1QUEwMC1cXHVBQTM2XFx1QUE0MC1cXHVBQTREXFx1QUE1MC1cXHVBQTU5XFx1QUE2MC1cXHVBQTc2XFx1QUE3QS1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY5XFx1QUI3MC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdUREMDctXFx1REQzM1xcdURENDAtXFx1REQ3OFxcdUREOEFcXHVERDhCXFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTAtXFx1REVGQlxcdURGMDAtXFx1REYyM1xcdURGMkQtXFx1REY0QVxcdURGNTAtXFx1REY3QVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0EwLVxcdURDQTlcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNTgtXFx1REM3NlxcdURDNzktXFx1REM5RVxcdURDQTctXFx1RENBRlxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1RENGQi1cXHVERDFCXFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCQy1cXHVERENGXFx1REREMi1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTM4LVxcdURFM0FcXHVERTNGLVxcdURFNDhcXHVERTYwLVxcdURFN0VcXHVERTgwLVxcdURFOUZcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTZcXHVERUVCLVxcdURFRUZcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjU4LVxcdURGNzJcXHVERjc4LVxcdURGOTFcXHVERkE5LVxcdURGQUZdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1RENGQS1cXHVERDI3XFx1REQzMC1cXHVERDM5XFx1REU2MC1cXHVERTdFXFx1REU4MC1cXHVERUE5XFx1REVBQlxcdURFQUNcXHVERUIwXFx1REVCMVxcdURGMDAtXFx1REYyN1xcdURGMzAtXFx1REY1NFxcdURGQjAtXFx1REZDQlxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDNDZcXHVEQzUyLVxcdURDNkZcXHVEQzdGLVxcdURDQkFcXHVEQ0QwLVxcdURDRThcXHVEQ0YwLVxcdURDRjlcXHVERDAwLVxcdUREMzRcXHVERDM2LVxcdUREM0ZcXHVERDQ0LVxcdURENDdcXHVERDUwLVxcdURENzNcXHVERDc2XFx1REQ4MC1cXHVEREM0XFx1RERDOS1cXHVERENDXFx1RERDRS1cXHVERERBXFx1REREQ1xcdURERTEtXFx1RERGNFxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFM0VcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERUVBXFx1REVGMC1cXHVERUY5XFx1REYwMC1cXHVERjAzXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0ItXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1MFxcdURGNTdcXHVERjVELVxcdURGNjNcXHVERjY2LVxcdURGNkNcXHVERjcwLVxcdURGNzRdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzRBXFx1REM1MC1cXHVEQzU5XFx1REM1RS1cXHVEQzYxXFx1REM4MC1cXHVEQ0M1XFx1RENDN1xcdURDRDAtXFx1RENEOVxcdUREODAtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURERDgtXFx1RERERFxcdURFMDAtXFx1REU0MFxcdURFNDRcXHVERTUwLVxcdURFNTlcXHVERTgwLVxcdURFQjhcXHVERUMwLVxcdURFQzlcXHVERjAwLVxcdURGMUFcXHVERjFELVxcdURGMkJcXHVERjMwLVxcdURGM0JdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzNBXFx1RENBMC1cXHVEQ0YyXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDM1XFx1REQzN1xcdUREMzhcXHVERDNCLVxcdURENDNcXHVERDUwLVxcdURENTlcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDdcXHVERERBLVxcdURERTFcXHVEREUzXFx1RERFNFxcdURFMDAtXFx1REUzRVxcdURFNDdcXHVERTUwLVxcdURFOTlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMzNlxcdURDMzgtXFx1REM0MFxcdURDNTAtXFx1REM2Q1xcdURDNzItXFx1REM4RlxcdURDOTItXFx1RENBN1xcdURDQTktXFx1RENCNlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDM2XFx1REQzQVxcdUREM0NcXHVERDNEXFx1REQzRi1cXHVERDQ3XFx1REQ1MC1cXHVERDU5XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREOEVcXHVERDkwXFx1REQ5MVxcdUREOTMtXFx1REQ5OFxcdUREQTAtXFx1RERBOVxcdURFRTAtXFx1REVGNlxcdURGQjBcXHVERkMwLVxcdURGRDRdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RVxcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTYwLVxcdURFNjlcXHVERUQwLVxcdURFRURcXHVERUYwLVxcdURFRjRcXHVERjAwLVxcdURGMzZcXHVERjQwLVxcdURGNDNcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTk2XFx1REYwMC1cXHVERjRBXFx1REY0Ri1cXHVERjg3XFx1REY4Ri1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXFx1REZFNFxcdURGRjBcXHVERkYxXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyM1tcXHVEQzAwLVxcdURDRDVcXHVERDAwLVxcdUREMDhdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NFxcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQwMC1cXHVERDJDXFx1REQzMC1cXHVERDNEXFx1REQ0MC1cXHVERDQ5XFx1REQ0RVxcdURFQzAtXFx1REVGOV18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVEQ0M3LVxcdURDRDZcXHVERDAwLVxcdURENEJcXHVERDUwLVxcdURENTldfFxcdUQ4M0JbXFx1REM3MS1cXHVEQ0FCXFx1RENBRC1cXHVEQ0FGXFx1RENCMS1cXHVEQ0I0XFx1REQwMS1cXHVERDJEXFx1REQyRi1cXHVERDNEXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDgzQ1tcXHVERDAwLVxcdUREMENdfFxcdUQ4M0VbXFx1REZGMC1cXHVERkY5XXxcXHVEODY5W1xcdURDMDAtXFx1REVERFxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdLyxobj0vW1xcdC1cXHIgXFx1MDA4NVxcdTAwQTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDBdLyxnbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsO2lmKGU+MCYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmKHQ9KGk9YS5jaGlsZHJlbilbZS0xXSkmJlwiV29yZE5vZGVcIj09PXQudHlwZSl7Zm9yKE09ZS0xLHM9W10sbD1bXTtpWysrTV07KWlmKFwiV29yZE5vZGVcIj09PShyPWlbTV0pLnR5cGUpcz1zLmNvbmNhdChsLHIuY2hpbGRyZW4pLGw9W107ZWxzZXtpZihcIlN5bWJvbE5vZGVcIiE9PXIudHlwZSYmXCJQdW5jdHVhdGlvbk5vZGVcIiE9PXIudHlwZXx8IWxuLnRlc3QoZW4ocikpKWJyZWFrO2wucHVzaChyKX1pZihzLmxlbmd0aD4wKXJldHVybiBsLmxlbmd0aD4wJiYoTS09bC5sZW5ndGgpLGkuc3BsaWNlKGUsTS1lKSx0LmNoaWxkcmVuPXQuY2hpbGRyZW4uY29uY2F0KHMpLG89c1tzLmxlbmd0aC0xXSx0LnBvc2l0aW9uJiZvLnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9by5wb3NpdGlvbi5lbmQpLGV9fSkpLHluPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGwsYz1hLmNoaWxkcmVuO2lmKGk9Y1tlLTFdLHI9Y1tlKzFdLGkmJlwiV29yZE5vZGVcIj09PWkudHlwZSYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCIvXCI9PT1lbihuKSYmKHQ9ZW4oaSkscz1uLE09W25dLGw9MSxyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJihvPWVuKHIpLHM9cixNPU0uY29uY2F0KHIuY2hpbGRyZW4pLGwrKyksdC5sZW5ndGg8MyYmKCFvfHxvLmxlbmd0aDwzKSkpcmV0dXJuIGkuY2hpbGRyZW49aS5jaGlsZHJlbi5jb25jYXQoTSksYy5zcGxpY2UoZSxsKSxpLnBvc2l0aW9uJiZzLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5lbmQ9cy5wb3NpdGlvbi5lbmQpLGV9KSksYm49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNLHMsbDtpZihlPjAmJlwiLlwiPT09ZW4obikmJih0PShyPShpPWEuY2hpbGRyZW4pW2UtMV0pLmNoaWxkcmVuLFwiV29yZE5vZGVcIj09PXIudHlwZSYmdCYmMSE9PXQubGVuZ3RoJiZ0Lmxlbmd0aCUyIT0wKSl7Zm9yKG89dC5sZW5ndGgscz0hMDt0Wy0tb107KWlmKE09dFtvXSxsPWVuKE0pLG8lMj09MCl7aWYobC5sZW5ndGg+MSlyZXR1cm47Y24udGVzdChsKXx8KHM9ITEpfWVsc2UgaWYoXCIuXCIhPT1sKXtpZihvPHQubGVuZ3RoLTIpYnJlYWs7cmV0dXJufWlmKCFzKXJldHVybiBpLnNwbGljZShlLDEpLHQucHVzaChuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGV9fSkpLERuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1hLmNoaWxkcmVuO2lmKFwiV29yZE5vZGVcIj09PW4udHlwZSYmKGk9cltlKzFdKSYmXCJXb3JkTm9kZVwiPT09aS50eXBlKXJldHVybiByLnNwbGljZShlKzEsMSksbi5jaGlsZHJlbj1uLmNoaWxkcmVuLmNvbmNhdChpLmNoaWxkcmVuKSxpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLGV9KSksZm49YSgyMCksR249Zm4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1hLmNoaWxkcmVuO24ucG9zaXRpb24mJighKGU8MSl8fGEucG9zaXRpb24mJmEucG9zaXRpb24uc3RhcnR8fCh3bihhKSxhLnBvc2l0aW9uLnN0YXJ0PW4ucG9zaXRpb24uc3RhcnQpLGUhPT1pLmxlbmd0aC0xfHxhLnBvc2l0aW9uJiZhLnBvc2l0aW9uLmVuZHx8KHduKGEpLGEucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSl9KSk7ZnVuY3Rpb24gd24obil7bi5wb3NpdGlvbnx8KG4ucG9zaXRpb249e30pfXZhciB2bj1hbigoZnVuY3Rpb24obixlLGEpe2Zvcih2YXIgaSxyLHQ9bi5jaGlsZHJlbixvPS0xO3RbKytvXTspaWYoXCJXb3JkTm9kZVwiPT09dFtvXS50eXBlKXJldHVybjtpZihpPWEuY2hpbGRyZW5bZS0xXSlyZXR1cm4gaS5jaGlsZHJlbj1pLmNoaWxkcmVuLmNvbmNhdCh0KSxhLmNoaWxkcmVuLnNwbGljZShlLDEpLGkucG9zaXRpb24mJm4ucG9zaXRpb24mJihpLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZTsocj1hLmNoaWxkcmVuW2UrMV0pJiYoci5jaGlsZHJlbj10LmNvbmNhdChyLmNoaWxkcmVuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxhLmNoaWxkcmVuLnNwbGljZShlLDEpKX0pKSxrbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvPW4uY2hpbGRyZW47aWYobyYmby5sZW5ndGg+MCYmZT4wJiYoaT1vWzBdLHI9b1sxXSx0PWEuY2hpbGRyZW5bZS0xXSwoXCJTeW1ib2xOb2RlXCI9PT1pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1pLnR5cGUpJiZvbi50ZXN0KGVuKGkpKSkpcmV0dXJuIHQuY2hpbGRyZW4ucHVzaChvLnNoaWZ0KCkpLGkucG9zaXRpb24mJnQucG9zaXRpb24mJih0LnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksciYmci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uc3RhcnQ9ci5wb3NpdGlvbi5zdGFydCksZS0xfSkpLFJuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTT1uLmNoaWxkcmVuO2lmKE0mJk0ubGVuZ3RoPjAmJmU+MClmb3IoaT0tMTtNWysraV07KXtpZihcIldvcmROb2RlXCI9PT0ocj1NW2ldKS50eXBlKXtpZighdW4udGVzdChlbihyKSkpcmV0dXJuO3JldHVybihvPSh0PWEuY2hpbGRyZW4pW2UtMV0pLmNoaWxkcmVuPW8uY2hpbGRyZW4uY29uY2F0KE0pLHQuc3BsaWNlKGUsMSksby5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG8ucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfWlmKFwiU3ltYm9sTm9kZVwiPT09ci50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09ci50eXBlKXJldHVybn19KSksWW49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1uLmNoaWxkcmVuLHI9YS5jaGlsZHJlbix0PXJbZS0xXSxvPWlbMF07aWYodCYmbyYmXCJXb3JkTm9kZVwiPT09by50eXBlJiZTbi50ZXN0KGVuKG8pKSlyZXR1cm4gdC5jaGlsZHJlbj10LmNoaWxkcmVuLmNvbmNhdChpKSxyLnNwbGljZShlLDEpLHQucG9zaXRpb24mJm4ucG9zaXRpb24mJih0LnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX0pKSxBbj1uZXcgUmVnRXhwKFwiXihbMC05XXsxLDN9fFthLXpdfGFsfGNhfGNhcHxjY2F8Y2VudHxjZnxjaXR8Y29ufGNwfGN3dHxlYWR8ZXRjfGZmfGZsfGliaWR8aWR8bmVtfG9wfHByb3xzZXF8c2ljfHN0YXR8dGVtfHZpeikkXCIpLFBuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG89bi5jaGlsZHJlbjtpZihvJiZvLmxlbmd0aD4xJiYoaT1vW28ubGVuZ3RoLTFdKSYmXCIuXCI9PT1lbihpKSYmKHI9b1tvLmxlbmd0aC0yXSkmJlwiV29yZE5vZGVcIj09PXIudHlwZSYmQW4udGVzdChlbihyKS50b0xvd2VyQ2FzZSgpKSYmKHIuY2hpbGRyZW4ucHVzaChpKSxvLnBvcCgpLGkucG9zaXRpb24mJnIucG9zaXRpb24mJihyLnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksdD1hLmNoaWxkcmVuW2UrMV0pKXJldHVybiBuLmNoaWxkcmVuPW8uY29uY2F0KHQuY2hpbGRyZW4pLGEuY2hpbGRyZW4uc3BsaWNlKGUrMSwxKSx0LnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5lbmQ9dC5wb3NpdGlvbi5lbmQpLGUtMX0pKSxDbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE09bi5jaGlsZHJlbjtpZihNJiYwIT09TS5sZW5ndGgmJiEoZTwxKSlmb3Iocj0tMTtNWysrcl07KXtpZihcIldvcmROb2RlXCI9PT0oaT1NW3JdKS50eXBlKXJldHVybjtpZihcIlN5bWJvbE5vZGVcIj09PWkudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PWkudHlwZSl7aWYoXCIsXCIhPT0odD1lbihpKSkmJlwiO1wiIT09dClyZXR1cm47cmV0dXJuKG89YS5jaGlsZHJlbltlLTFdKS5jaGlsZHJlbj1vLmNoaWxkcmVuLmNvbmNhdChNKSxvLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoby5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGEuY2hpbGRyZW4uc3BsaWNlKGUsMSksZX19fSkpLFRuPWZuKChmdW5jdGlvbihuKXtmb3IodmFyIGUsYSxpLHIsdD1uLmNoaWxkcmVuLG89dC5sZW5ndGgsTT0hMTt0Wy0tb107KWlmKFwiU3ltYm9sTm9kZVwiPT09KGU9dFtvXSkudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PWUudHlwZSl7aWYoc24udGVzdChlbihlKSkpaWYoTSl7aWYoXCIuXCI9PT1lbihlKSlpZihhPXRbby0xXSxpPXRbbysxXSxhJiZcIldvcmROb2RlXCI9PT1hLnR5cGUpe2lmKHI9dFtvKzJdLGkmJnImJlwiV2hpdGVTcGFjZU5vZGVcIj09PWkudHlwZSYmXCIuXCI9PT1lbihyKSljb250aW51ZTt0LnNwbGljZShvLDEpLGEuY2hpbGRyZW4ucHVzaChlKSxlLnBvc2l0aW9uJiZhLnBvc2l0aW9uJiYoYS5wb3NpdGlvbi5lbmQ9ZS5wb3NpdGlvbi5lbmQpLG8tLX1lbHNlIGkmJlwiV29yZE5vZGVcIj09PWkudHlwZSYmKHQuc3BsaWNlKG8sMSksaS5jaGlsZHJlbi51bnNoaWZ0KGUpLGUucG9zaXRpb24mJmkucG9zaXRpb24mJihpLnBvc2l0aW9uLnN0YXJ0PWUucG9zaXRpb24uc3RhcnQpKX1lbHNlIE09ITB9ZWxzZVwiV29yZE5vZGVcIj09PWUudHlwZSYmKE09ITApfSkpLHhuPWZuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1uLmNoaWxkcmVuO3ImJnIubGVuZ3RoPjAmJlwiV2hpdGVTcGFjZU5vZGVcIj09PXJbMF0udHlwZSYmKGEuY2hpbGRyZW4uc3BsaWNlKGUsMCxyLnNoaWZ0KCkpLChpPXJbMF0pJiZpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5zdGFydD1pLnBvc2l0aW9uLnN0YXJ0KSl9KSksem49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyPW4uY2hpbGRyZW47aWYociYmci5sZW5ndGg+MCYmXCJXaGl0ZVNwYWNlTm9kZVwiPT09cltyLmxlbmd0aC0xXS50eXBlKXJldHVybiBhLmNoaWxkcmVuLnNwbGljZShlKzEsMCxuLmNoaWxkcmVuLnBvcCgpKSwoaT1yW3IubGVuZ3RoLTFdKSYmaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPWkucG9zaXRpb24uZW5kKSxlfSkpLEVuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGw7aWYoXCJTZW50ZW5jZU5vZGVcIj09PW4udHlwZSlmb3IoaT1uLmNoaWxkcmVuLHI9MDsrK3I8aS5sZW5ndGgtMTspaWYoXCJXaGl0ZVNwYWNlTm9kZVwiPT09KGw9aVtyXSkudHlwZSYmTW4udGVzdChlbihsKSkpcmV0dXJuIG4uY2hpbGRyZW49aS5zbGljZSgwLHIpLHM9e3R5cGU6XCJTZW50ZW5jZU5vZGVcIixjaGlsZHJlbjppLnNsaWNlKHIrMSl9LHQ9aVtyLTFdLG89aVtyKzFdLGEuY2hpbGRyZW4uc3BsaWNlKGUrMSwwLGwscyksbi5wb3NpdGlvbiYmdC5wb3NpdGlvbiYmby5wb3NpdGlvbiYmKE09bi5wb3NpdGlvbi5lbmQsbi5wb3NpdGlvbi5lbmQ9dC5wb3NpdGlvbi5lbmQscy5wb3NpdGlvbj17c3RhcnQ6by5wb3NpdGlvbi5zdGFydCxlbmQ6TX0pLGUrMX0pKSxCbj1hbigoZnVuY3Rpb24obixlLGEpe2lmKFwiY2hpbGRyZW5cImluIG4mJjA9PT1uLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSxlfSkpO2Z1bmN0aW9uIE5uKG4pe3ZhciBlLGEsaT1uLnR5cGUscj1uLnRva2VuaXplcix0PW4uZGVsaW1pdGVyLG89dCYmKGU9bi5kZWxpbWl0ZXJUeXBlLGE9dCxmdW5jdGlvbihuKXtmb3IodmFyIGkscix0LG89W10sTT1uLmNoaWxkcmVuLHM9bi50eXBlLGw9LTEsYz1NLmxlbmd0aC0xLFM9MDsrK2w8TS5sZW5ndGg7KShsPT09Y3x8TVtsXS50eXBlPT09ZSYmYS50ZXN0KGVuKE1bbF0pKSkmJihpPU1bU10scj1NW2xdLHQ9e3R5cGU6cyxjaGlsZHJlbjpNLnNsaWNlKFMsbCsxKX0saS5wb3NpdGlvbiYmci5wb3NpdGlvbiYmKHQucG9zaXRpb249e3N0YXJ0OmkucG9zaXRpb24uc3RhcnQsZW5kOnIucG9zaXRpb24uZW5kfSksby5wdXNoKHQpLFM9bCsxKTtyZXR1cm4gb30pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT10aGlzW3JdKG4pO3JldHVybnt0eXBlOmksY2hpbGRyZW46bz9vKGUpOmV9fX1jbGFzcyBabntjb25zdHJ1Y3RvcihuLGUpe3ZhciBhPWV8fG47dGhpcy5kb2M9YT9TdHJpbmcoYSk6bnVsbH1ydW4obixlKXt2YXIgYT10aGlzW24rXCJQbHVnaW5zXCJdLGk9LTE7aWYoYSlmb3IoO2FbKytpXTspYVtpXShlKTtyZXR1cm4gZX1wYXJzZShuKXtyZXR1cm4gdGhpcy50b2tlbml6ZVJvb3Qobnx8dGhpcy5kb2MpfXRva2VuaXplKG4pe3ZhciBlLGEsaSxyLHQsbyxNPXRoaXMscz1bXSxsPTAsYz0wLFM9MSx1PTE7aWYobnVsbD09bj9uPVwiXCI6biBpbnN0YW5jZW9mIFN0cmluZyYmKG49bi50b1N0cmluZygpKSxcInN0cmluZ1wiIT10eXBlb2Ygbil7aWYoXCJsZW5ndGhcImluIG4mJighblswXXx8blswXS50eXBlKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb246ICdcIituK1wiJyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgJ1BhcnNlTGF0aW4nXCIpfWlmKCFuKXJldHVybiBzO2ZvcihvPXRoaXMucG9zaXRpb24/ZnVuY3Rpb24obil7dmFyIGUsYT0oZT1oKCksZnVuY3Rpb24obil7cmV0dXJuIG4ucG9zaXRpb249bmV3IHAoZSksbn0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT0tMSxhPS0xO2ZvcihjKz1uLmxlbmd0aDsrK2U8bi5sZW5ndGg7KVwiXFxuXCI9PT1uLmNoYXJBdChlKSYmKGE9ZSxTKyspO2E8MD91Kz1uLmxlbmd0aDp1PW4ubGVuZ3RoLWF9KG4pLGZ1bmN0aW9uKC4uLm4pe3JldHVybiBhKG0oLi4ubikpfX06ZnVuY3Rpb24oKXtyZXR1cm4gbX0saT1cIlwiLGE9XCJcIjtsPG4ubGVuZ3RoOyllPW4uY2hhckF0KGwpLHQ9aG4udGVzdChlKT9cIldoaXRlU3BhY2VcIjptbi50ZXN0KGUpP1wiUHVuY3R1YXRpb25cIjpwbi50ZXN0KGUpP1wiV29yZFwiOlwiU3ltYm9sXCIsZCgpLGk9ZSxlPVwiXCIscj10LHQ9bnVsbCxsKys7cmV0dXJuIGQoKSxzO2Z1bmN0aW9uIGQoKXtyIT09dHx8XCJXb3JkXCIhPT1yJiZcIldoaXRlU3BhY2VcIiE9PXImJmUhPT1pJiYhZG4udGVzdChlKT8oYSYmTVtcInRva2VuaXplXCIrcl0oYSxvKSxhPWUpOmErPWV9ZnVuY3Rpb24gbShuLGUpe3JldHVybiBlP2UuY2hpbGRyZW4ucHVzaChuKTpzLnB1c2gobiksbn1mdW5jdGlvbiBwKG4pe3RoaXMuc3RhcnQ9bix0aGlzLmVuZD1oKCl9ZnVuY3Rpb24gaCgpe3JldHVybntsaW5lOlMsY29sdW1uOnUsb2Zmc2V0OmN9fX19ZnVuY3Rpb24gRm4obil7cmV0dXJuIG4rPVwiTm9kZVwiLGZ1bmN0aW9uKGUsYSxpKXtyZXR1cm4gbnVsbD09ZSYmKGU9XCJcIiksKGF8fExuKShlKSh7dHlwZTpuLHZhbHVlOlN0cmluZyhlKX0saSl9fWZ1bmN0aW9uIEluKG4sZSxhKXtuLnByb3RvdHlwZVtlXT1mdW5jdGlvbiguLi5uKXtyZXR1cm4gdGhpcy5ydW4oZSxhLmFwcGx5KHRoaXMsbikpfX1mdW5jdGlvbiBVbihuKXtyZXR1cm4gZnVuY3Rpb24oZSxhKXt2YXIgaTtpZighKGUgaW4gdGhpcykpdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBJbnZvY2F0aW9uOiBVbnN1cHBvcnRlZCBga2V5YCBmb3IgYHVzZShrZXksIHBsdWdpbnMpYC4gTWFrZSBzdXJlIGBrZXlgIGlzIGEgc3VwcG9ydGVkIGZ1bmN0aW9uXCIpO2EmJihpPWUrXCJQbHVnaW5zXCIsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhP1thXTphLmNvbmNhdCgpLHRoaXNbaV18fCh0aGlzW2ldPVtdKSxuKHRoaXMsaSxhKSl9fWZ1bmN0aW9uIGpuKG4sZSl7cmV0dXJuIGUmJmUuY2hpbGRyZW4ucHVzaChuKSxufWZ1bmN0aW9uIExuKCl7cmV0dXJuIGpufVpuLnByb3RvdHlwZS5wb3NpdGlvbj0hMCxabi5wcm90b3R5cGUudG9rZW5pemVTeW1ib2w9Rm4oXCJTeW1ib2xcIiksWm4ucHJvdG90eXBlLnRva2VuaXplV2hpdGVTcGFjZT1GbihcIldoaXRlU3BhY2VcIiksWm4ucHJvdG90eXBlLnRva2VuaXplUHVuY3R1YXRpb249Rm4oXCJQdW5jdHVhdGlvblwiKSxabi5wcm90b3R5cGUudG9rZW5pemVTb3VyY2U9Rm4oXCJTb3VyY2VcIiksWm4ucHJvdG90eXBlLnRva2VuaXplVGV4dD1GbihcIlRleHRcIiksWm4ucHJvdG90eXBlLnVzZT1VbigoZnVuY3Rpb24obixlLGEpe25bZV09bltlXS5jb25jYXQoYSl9KSksWm4ucHJvdG90eXBlLnVzZUZpcnN0PVVuKChmdW5jdGlvbihuLGUsYSl7bltlXT1hLmNvbmNhdChuW2VdKX0pKSxJbihabixcInRva2VuaXplV29yZFwiLChmdW5jdGlvbihuLGUpe3ZhciBhPShlfHxMbikoXCJcIiksaT17dHlwZTpcIldvcmROb2RlXCIsY2hpbGRyZW46W119O3JldHVybiB0aGlzLnRva2VuaXplVGV4dChuLGUsaSksYShpKX0pKSxJbihabixcInRva2VuaXplU2VudGVuY2VcIixObih7dHlwZTpcIlNlbnRlbmNlTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplXCJ9KSksSW4oWm4sXCJ0b2tlbml6ZVBhcmFncmFwaFwiLE5uKHt0eXBlOlwiUGFyYWdyYXBoTm9kZVwiLGRlbGltaXRlcjpzbixkZWxpbWl0ZXJUeXBlOlwiUHVuY3R1YXRpb25Ob2RlXCIsdG9rZW5pemVyOlwidG9rZW5pemVTZW50ZW5jZVwifSkpLEluKFpuLFwidG9rZW5pemVSb290XCIsTm4oe3R5cGU6XCJSb290Tm9kZVwiLGRlbGltaXRlcjovXlsgXFx0XSooKFxccj9cXG58XFxyKVtcXHQgXSopKyQvLGRlbGltaXRlclR5cGU6XCJXaGl0ZVNwYWNlTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplUGFyYWdyYXBoXCJ9KSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplU2VudGVuY2VcIixbcm4sdG4sZ24seW4sYm4sRG4sR25dKSxabi5wcm90b3R5cGUudXNlKFwidG9rZW5pemVQYXJhZ3JhcGhcIixbdm4sa24sUm4sWW4sUG4sQ24sVG4seG4sem4sRW4sQm4sR25dKSxabi5wcm90b3R5cGUudXNlKFwidG9rZW5pemVSb290XCIsW3huLHpuLEJuLEduXSk7ZnVuY3Rpb24gcW4obixlPVwiXCIpe2xldCBhPS0xO2lmKCFufHwhQXJyYXkuaXNBcnJheShuKSYmIW4udHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBub3QgYFwiK24rXCJgXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnZhbHVlKXJldHVybiBuLnZhbHVlO2NvbnN0IGk9KEFycmF5LmlzQXJyYXkobik/bjpuLmNoaWxkcmVuKXx8W107aWYoMT09PWkubGVuZ3RoJiZcInZhbHVlXCJpbiBpWzBdKXJldHVybiBpWzBdLnZhbHVlO2NvbnN0IHI9W107Zm9yKDsrK2E8aS5sZW5ndGg7KXJbYV09cW4oaVthXSxlKTtyZXR1cm4gci5qb2luKGUpfWZ1bmN0aW9uIEhuKG4pe3JldHVybiBxbihuKX1jb25zdCBKbj1mdW5jdGlvbigpe09iamVjdC5hc3NpZ24odGhpcyx7Q29tcGlsZXI6SG59KX0sT249SigpLnVzZSgoZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduKHRoaXMse1BhcnNlcjpubihabil9KX0pKS51c2UoSm4pLmZyZWV6ZSgpO3ZhciBYbj1hKDI5MSk7Y29uc3QgVm49ZnVuY3Rpb24gbihlLGEsaSxyLHQpe2NvbnN0IG89V24oYSk7aWYobnVsbCE9aSYmKFwibnVtYmVyXCIhPXR5cGVvZiBpfHxpPDB8fGk9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleFwiKTtpZighKG51bGw9PXJ8fG4ocikmJnIuY2hpbGRyZW4pKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBhcmVudCBub2RlXCIpO2lmKG51bGw9PXIhPShudWxsPT1pKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXhcIik7cmV0dXJuISghZXx8IWUudHlwZXx8XCJzdHJpbmdcIiE9dHlwZW9mIGUudHlwZSkmJkJvb2xlYW4oby5jYWxsKHQsZSxpLHIpKX0sV249ZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4gJG47aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIGU9bixLbigoZnVuY3Rpb24obil7cmV0dXJuIG4mJm4udHlwZT09PWV9KSk7dmFyIGU7aWYoXCJvYmplY3RcIj09dHlwZW9mIG4pcmV0dXJuIEFycmF5LmlzQXJyYXkobik/ZnVuY3Rpb24obil7Y29uc3QgZT1bXTtsZXQgYT0tMTtmb3IoOysrYTxuLmxlbmd0aDspZVthXT1XbihuW2FdKTtyZXR1cm4gS24oKGZ1bmN0aW9uKC4uLm4pe2xldCBhPS0xO2Zvcig7KythPGUubGVuZ3RoOylpZihlW2FdLmNhbGwodGhpcywuLi5uKSlyZXR1cm4hMDtyZXR1cm4hMX0pKX0obik6ZnVuY3Rpb24obil7cmV0dXJuIEtuKChmdW5jdGlvbihlKXtsZXQgYTtmb3IoYSBpbiBuKWlmKGVbYV0hPT1uW2FdKXJldHVybiExO3JldHVybiEwfSkpfShuKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBLbihuKTt0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBmdW5jdGlvbiwgc3RyaW5nLCBvciBvYmplY3QgYXMgdGVzdFwiKX07ZnVuY3Rpb24gS24obil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe3JldHVybiBCb29sZWFuKG4uY2FsbCh0aGlzLC4uLmUpKX19ZnVuY3Rpb24gJG4oKXtyZXR1cm4hMH1jb25zdCBRbj1cInNraXBcIixfbj1mdW5jdGlvbihuLGUsYSxpKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoaT1hLGE9ZSxlPW51bGwpLGZ1bmN0aW9uKG4sZSxhLGkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJihpPWEsYT1lLGU9bnVsbCk7Y29uc3Qgcj1XbihlKSx0PWk/LTE6MTshZnVuY3Rpb24gbihvLE0scyl7Y29uc3QgbD1cIm9iamVjdFwiPT10eXBlb2YgbyYmbnVsbCE9PW8/bzp7fTtsZXQgYztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbC50eXBlJiYoYz1cInN0cmluZ1wiPT10eXBlb2YgbC50YWdOYW1lP2wudGFnTmFtZTpcInN0cmluZ1wiPT10eXBlb2YgbC5uYW1lP2wubmFtZTp2b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsXCJuYW1lXCIse3ZhbHVlOlwibm9kZSAoXCIrbC50eXBlKyhjP1wiPFwiK2MrXCI+XCI6XCJcIikrXCIpXCJ9KSksUztmdW5jdGlvbiBTKCl7bGV0IGwsYyxTLHU9W107aWYoKCFlfHxyKG8sTSxzW3MubGVuZ3RoLTFdfHxudWxsKSkmJih1PWZ1bmN0aW9uKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246XCJudW1iZXJcIj09dHlwZW9mIG4/WyEwLG5dOltuXX0oYShvLHMpKSwhMT09PXVbMF0pKXJldHVybiB1O2lmKG8uY2hpbGRyZW4mJnVbMF0hPT1Rbilmb3IoYz0oaT9vLmNoaWxkcmVuLmxlbmd0aDotMSkrdCxTPXMuY29uY2F0KG8pO2M+LTEmJmM8by5jaGlsZHJlbi5sZW5ndGg7KXtpZihsPW4oby5jaGlsZHJlbltjXSxjLFMpKCksITE9PT1sWzBdKXJldHVybiBsO2M9XCJudW1iZXJcIj09dHlwZW9mIGxbMV0/bFsxXTpjK3R9cmV0dXJuIHV9fShuLG51bGwsW10pKCl9KG4sZSwoZnVuY3Rpb24obixlKXtjb25zdCBpPWVbZS5sZW5ndGgtMV07cmV0dXJuIGEobixpP2kuY2hpbGRyZW4uaW5kZXhPZihuKTpudWxsLGkpfSksaSl9O3ZhciBuZT1hKDQzMik7Y29uc3QgZWU9cmUoW1widW5pc3RcIixcIlVcIixcIlVFRkFcIixcIlVLXCIsXCJVTlwiLFwiVU5IQ1JcIixcIlVTXCIsXCJVU0JcIixcImV1Y2FseXB0KlwiLFwiZXVjaGEqXCIsXCJldWNocipcIixcImV1Y2xpZCpcIixcImV1Y3JpdGVcIixcImV1Y3J5cGhpYVwiLFwiZXVnZW4qXCIsXCJldWthcipcIixcImV1bG9nKlwiLFwiZXVuaWNlXCIsXCJldW51Y2hcIixcImV1cGgqXCIsXCJldXJhKlwiLFwiZXVyZSpcIixcImV1cm8qXCIsXCJldXJ5KlwiLFwiZXV0aGEqXCIsXCJld2VcIixcImV3ZXJcIixcImhhYml0dWFsXCIsXCJoYWxsdWNpbipcIixcImhlcmIqXCIsXCJoZXJlZGl0KlwiLFwiaGlzdG9yKlwiLFwiaGlsYXJpb3VzKlwiLFwiaG9ycmVuZCpcIixcImhvcnJpZipcIixcImhvdGVsKlwiLFwibXNcIixcIm9uY2VcIixcIm9uZVwiLFwib25lL1wiLFwib25lLSpcIixcIm9uZWFub3RoZXJcIixcIm9uZWJlcnJ5XCIsXCJvbmVmb2xkKlwiLFwib25laGVhcnQqXCIsXCJvbmVuZXNzKlwiLFwib25lc2VsZipcIixcIm9uZXRpbWUqXCIsXCJvbmV3YXlcIixcIm9uZXdoZXJlKlwiLFwib25leWVhclwiLFwidWJpcSpcIixcInVnYW5kYW5cIixcInVrYXNlXCIsXCJ1a3JhaW4qXCIsXCJ1a3VsZWxlXCIsXCJ1bHVsYXRlZFwiLFwidWx1bGF0aW9uXCIsXCJ1bmFuaW0qXCIsXCJ1bmFyeVwiLFwidW5lc2NvXCIsXCJ1bmlhbSpcIixcInVuaWFydCpcIixcInVuaWF0KlwiLFwidW5pYXVyKlwiLFwidW5pYXgqXCIsXCJ1bmliYXMqXCIsXCJ1bmlibGVcIixcInVuaWN5Y2wqXCIsXCJ1bmlkaXJlY3QqXCIsXCJ1bmlvbipcIixcInVuaXQqXCIsXCJ1bml2KlwiLFwidW5pZipcIixcInVuaXEqXCIsXCJ1cmFuKlwiLFwidXJhdGVcIixcInVyaSpcIixcInVyb2xvZ2lzdFwiLFwidXJ1Z3VheVwiLFwidXJ1Z3VheWFuXCIsXCJ1cnVndWF5YW5zXCIsXCJ1c2FiKlwiLFwidXNhZ2VcIixcInVzZSpcIixcInVzaW5nXCIsXCJ1c3UqXCIsXCJ1dGFoXCIsXCJ1dGVuKlwiLFwidXRlcipcIixcInV0aWwqXCIsXCJ1dG9wKlwiLFwidXRyZWNodFwiLFwidXR0b3hldGVyXCIsXCJ1dnVsYVwiLFwidXZ1bGFyXCIsXCJ1eWdodXJcIl0pLGFlPXJlKFtcIm1kYXN0XCIsXCLOsVwiLFwiZlwiLFwiZmJpXCIsXCJmbVwiLFwiZmRhXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJuZmxcIixcIm5iYVwiLFwibmJjXCIsXCJuaGxcIixcIm5nb1wiLFwibnBtXCIsXCJudmlkaWFcIixcInNcIixcInJcIixcImhcIixcImhhYml0dWFsXCIsXCJoYWxsdWNpbipcIixcImhhdXRldXJcIixcImhlaXIqXCIsXCJoZXJiKlwiLFwiaGVyZWRpdCpcIixcImhpbGFyaW91cypcIixcImhpc3RvcipcIixcImhvbWFnZVwiLFwiaG9uZXN0KlwiLFwiaG9ub3IqXCIsXCJob25vdXIqXCIsXCJob3JyZW5kKlwiLFwiaG9ycmlmKlwiLFwiaG90ZWwqXCIsXCJob3VyKlwiLFwiaDFcIixcImgyXCIsXCJoM1wiLFwiaDRcIixcImg1XCIsXCJoNlwiLFwiaGl2XCIsXCJsYndcIixcImxjZFwiLFwibXBnXCIsXCJtcGhcIixcIk1CQVwiLFwiTUFcIixcIk1SSVwiLFwibXNjXCIsXCJNU1wiLFwiTVRWXCIsXCJodG1sXCIsXCJyJmRcIixcIlNHTUxcIixcIlNPU1wiLFwiU01TXCIsXCJ4XCIsXCJYTUxcIixcInhtYXNcIixcIngtcmF5XCIsXCJ4LXJheXNcIixcInhib3hcIixcIlNVVlwiLFwiU1REXCIsXCJTUEZcIixcIkhCXCIsXCJSQUZcIixcIklPVVwiXSk7ZnVuY3Rpb24gaWUoKXtyZXR1cm4obixlKT0+e19uKG4sXCJXb3JkTm9kZVwiLCgobixhLGkpPT57Y29uc3Qgcj1pLHQ9cW4obiksbz10LnRvTG93ZXJDYXNlKCk7aWYoXCJhXCIhPT1vJiZcImFuXCIhPT1vfHwhcnx8bnVsbD09PWEpcmV0dXJuO2NvbnN0IE09ZnVuY3Rpb24obixlKXtjb25zdCBhPW4uY2hpbGRyZW47bGV0IGkscj1hWysrZV07cmV0dXJuIHImJlwiV2hpdGVTcGFjZU5vZGVcIj09PXIudHlwZSYmKHI9YVsrK2VdLHImJlwiUHVuY3R1YXRpb25Ob2RlXCI9PT1yLnR5cGUmJi9eW+KAnOKAneKAmOKAmSdcIigpW1xcXV0kLy50ZXN0KHFuKHIpKSYmKHI9YVsrK2VdKSxyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJihpPXIpKSxpfShyLGEpO2lmKCFNKXJldHVybjtjb25zdCBzPTEhPT10Lmxlbmd0aCxsPXFuKE0pO2lmKG8hPT10JiYhcyYmIWZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1uLmNoaWxkcmVuO2Zvcig7ZS0tOylpZihcIldvcmROb2RlXCI9PT1hW2VdLnR5cGUpcmV0dXJuITE7cmV0dXJuITB9KHIsYSkpcmV0dXJuO2lmKG89PT10JiYhcyYmL14oYW5kfG9yfG5vcikkL2kudGVzdChsKSlyZXR1cm47bGV0IGM9ZnVuY3Rpb24obil7Y29uc3QgZT1uLnJlcGxhY2UoL15cXGQrLywobj0+bmUudG9Xb3JkcyhuKStcIiBcIikpLnNwbGl0KC9bJ+KAmSAtXS8sMSlbMF0sYT1lLnRvTG93ZXJDYXNlKCk7bGV0IGk7cmV0dXJuIGVlKGUpJiYoaT1cImFcIiksYWUoZSkmJihpPVwiYVwiPT09aT9cImEtb3ItYW5cIjpcImFuXCIpLGl8fGEhPT1lfHwoaT0vW2FlaW91XS8udGVzdChhLmNoYXJBdCgwKSk/XCJhblwiOlwiYVwiKSxpfShsKTsoXCJhblwiPT09YyYmIXN8fFwiYVwiPT09YyYmcykmJihvIT09dCYmKGM9Yy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShYbihcIlVzZSBgJXNgIGJlZm9yZSBgJXNgLCBub3QgYCVzYFwiLGMsbCx0KSxuLFwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZTpyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCIpLHthY3R1YWw6dCxleHBlY3RlZDpbY10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1pbmRlZmluaXRlLWFydGljbGUjcmVhZG1lXCJ9KSl9KSl9fWZ1bmN0aW9uIHJlKG4pe2NvbnN0IGU9W10sYT1bXSxpPVtdO2xldCByPS0xO2Zvcig7KytyPG4ubGVuZ3RoOyl7Y29uc3QgdD1uW3JdO1wiKlwiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/ZS5wdXNoKG5ldyBSZWdFeHAoXCJeXCIrdC5zbGljZSgwLC0xKSxcImlcIikpOnQ9PT10LnRvTG93ZXJDYXNlKCk/aS5wdXNoKHQpOmEucHVzaCh0KX1yZXR1cm4gZnVuY3Rpb24obil7Y29uc3Qgcj1uLnRvTG93ZXJDYXNlKCk7aWYoYS5pbmNsdWRlcyhuKXx8aS5pbmNsdWRlcyhyKSlyZXR1cm4hMDtsZXQgdD0tMTtmb3IoOysrdDxlLmxlbmd0aDspaWYoZVt0XS50ZXN0KG4pKXJldHVybiEwO3JldHVybiExfX12YXIgdGU9TWUoXCJzdGFydFwiKSxvZT1NZShcImVuZFwiKTtmdW5jdGlvbiBNZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGE9ZSYmZS5wb3NpdGlvbiYmZS5wb3NpdGlvbltuXXx8e307cmV0dXJue2xpbmU6YS5saW5lfHxudWxsLGNvbHVtbjphLmNvbHVtbnx8bnVsbCxvZmZzZXQ6YS5vZmZzZXQ+LTE/YS5vZmZzZXQ6bnVsbH19fWNvbnN0IHNlPVwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCIsbGU9bmV3IFNldChbXCJoYWRcIixcInRoYXRcIixcImNhblwiLFwiYmxhaFwiLFwiYmVlcFwiLFwieWFkZGFcIixcInNhcGllbnNcIixcInRzZVwiLFwibWF1XCJdKTtmdW5jdGlvbiBjZSgpe3JldHVybihuLGUpPT57X24obixcIlNlbnRlbmNlTm9kZVwiLChuPT57bGV0IGEsaSxyPS0xO2Zvcig7KytyPG4uY2hpbGRyZW4ubGVuZ3RoOyl7Y29uc3QgdD1uLmNoaWxkcmVuW3JdO2lmKFwiV29yZE5vZGVcIj09PXQudHlwZSl7Y29uc3Qgbz1xbih0KTtpPXtjaGlsZDp0LGluZGV4OnIsdmFsdWU6b30sYSYmYS52YWx1ZS50b0xvd2VyQ2FzZSgpPT09by50b0xvd2VyQ2FzZSgpJiYhU2UobykmJk9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKFwiRXhwZWN0ZWQgYFwiK28rXCJgIG9uY2UsIG5vdCB0d2ljZVwiLHtzdGFydDp0ZShhLmNoaWxkKSxlbmQ6b2UodCl9LFtzZSxvLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxXKy9nLFwiLVwiKV0uam9pbihcIjpcIikpLHthY3R1YWw6cW4obi5jaGlsZHJlbi5zbGljZShhLmluZGV4LHIrMSkpLGV4cGVjdGVkOltvXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXJlcGVhdGVkLXdvcmRzI3JlYWRtZVwifSl9ZWxzZVwiV2hpdGVTcGFjZU5vZGVcIj09PXQudHlwZT8oYT1pLGk9dm9pZCAwKTooYT12b2lkIDAsaT12b2lkIDApfXJldHVybiBRbn0pKX19ZnVuY3Rpb24gU2Uobil7aWYobGUuaGFzKG4udG9Mb3dlckNhc2UoKSkpcmV0dXJuITA7Y29uc3QgZT1uLmNoYXJBdCgwKTtpZihlPT09ZS50b1VwcGVyQ2FzZSgpKXtpZigyPT09bi5sZW5ndGgmJlwiLlwiPT09bi5jaGFyQXQoMSkpcmV0dXJuITA7Y29uc3QgZT1uLnNsaWNlKDEpO2lmKGU9PT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdWUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5jaGFyYWN0ZXI/bi5jaGFyYWN0ZXIvbi53b3JkKjQuNzErbi53b3JkL24uc2VudGVuY2UqLjUtMjEuNDM6TnVtYmVyLk5hTn1mdW5jdGlvbiBkZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkJiZuLmxldHRlcj9uLmxldHRlci9uLndvcmQqMTAwKi4wNTg4LW4uc2VudGVuY2Uvbi53b3JkKjEwMCouMjk2LTE1Ljg6TnVtYmVyLk5hTn12YXIgbWU9W1wiYVwiLFwiYWJsZVwiLFwiYWJvYXJkXCIsXCJhYm91dFwiLFwiYWJvdmVcIixcImFic2VudFwiLFwiYWNjZXB0XCIsXCJhY2NpZGVudFwiLFwiYWNjb3VudFwiLFwiYWNoZVwiLFwiYWNoaW5nXCIsXCJhY29yblwiLFwiYWNyZVwiLFwiYWNyb3NzXCIsXCJhY3RcIixcImFjdHNcIixcImFkZFwiLFwiYWRkcmVzc1wiLFwiYWRtaXJlXCIsXCJhZHZlbnR1cmVcIixcImFmYXJcIixcImFmcmFpZFwiLFwiYWZ0ZXJcIixcImFmdGVybm9vblwiLFwiYWZ0ZXJ3YXJkXCIsXCJhZnRlcndhcmRzXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWdlXCIsXCJhZ2VkXCIsXCJhZ29cIixcImFncmVlXCIsXCJhaFwiLFwiYWhlYWRcIixcImFpZFwiLFwiYWltXCIsXCJhaXJcIixcImFpcmZpZWxkXCIsXCJhaXJwbGFuZVwiLFwiYWlycG9ydFwiLFwiYWlyc2hpcFwiLFwiYWlyeVwiLFwiYWxhcm1cIixcImFsaWtlXCIsXCJhbGl2ZVwiLFwiYWxsXCIsXCJhbGxleVwiLFwiYWxsaWdhdG9yXCIsXCJhbGxvd1wiLFwiYWxtb3N0XCIsXCJhbG9uZVwiLFwiYWxvbmdcIixcImFsb3VkXCIsXCJhbHJlYWR5XCIsXCJhbHNvXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbWVyaWNhXCIsXCJhbWVyaWNhblwiLFwiYW1vbmdcIixcImFtb3VudFwiLFwiYW5cIixcImFuZFwiLFwiYW5nZWxcIixcImFuZ2VyXCIsXCJhbmdyeVwiLFwiYW5pbWFsXCIsXCJhbm90aGVyXCIsXCJhbnN3ZXJcIixcImFudFwiLFwiYW55XCIsXCJhbnlib2R5XCIsXCJhbnlob3dcIixcImFueW9uZVwiLFwiYW55dGhpbmdcIixcImFueXdheVwiLFwiYW55d2hlcmVcIixcImFwYXJ0XCIsXCJhcGFydG1lbnRcIixcImFwZVwiLFwiYXBpZWNlXCIsXCJhcHBlYXJcIixcImFwcGxlXCIsXCJhcHJpbFwiLFwiYXByb25cIixcImFyZVwiLFwiYXJlbid0XCIsXCJhcmlzZVwiLFwiYXJpdGhtZXRpY1wiLFwiYXJtXCIsXCJhcm1mdWxcIixcImFybXlcIixcImFyb3NlXCIsXCJhcm91bmRcIixcImFycmFuZ2VcIixcImFycml2ZVwiLFwiYXJyaXZlZFwiLFwiYXJyb3dcIixcImFydFwiLFwiYXJ0aXN0XCIsXCJhc1wiLFwiYXNoXCIsXCJhc2hlc1wiLFwiYXNpZGVcIixcImFza1wiLFwiYXNsZWVwXCIsXCJhdFwiLFwiYXRlXCIsXCJhdHRhY2tcIixcImF0dGVuZFwiLFwiYXR0ZW50aW9uXCIsXCJhdWd1c3RcIixcImF1bnRcIixcImF1dGhvclwiLFwiYXV0b1wiLFwiYXV0b21vYmlsZVwiLFwiYXV0dW1uXCIsXCJhdmVudWVcIixcImF3YWtlXCIsXCJhd2FrZW5cIixcImF3YXlcIixcImF3ZnVsXCIsXCJhd2Z1bGx5XCIsXCJhd2hpbGVcIixcImF4XCIsXCJheGVcIixcImJhYVwiLFwiYmFiZVwiLFwiYmFiaWVzXCIsXCJiYWNrXCIsXCJiYWNrZ3JvdW5kXCIsXCJiYWNrd2FyZFwiLFwiYmFja3dhcmRzXCIsXCJiYWNvblwiLFwiYmFkXCIsXCJiYWRnZVwiLFwiYmFkbHlcIixcImJhZ1wiLFwiYmFrZVwiLFwiYmFrZXJcIixcImJha2VyeVwiLFwiYmFraW5nXCIsXCJiYWxsXCIsXCJiYWxsb29uXCIsXCJiYW5hbmFcIixcImJhbmRcIixcImJhbmRhZ2VcIixcImJhbmdcIixcImJhbmpvXCIsXCJiYW5rXCIsXCJiYW5rZXJcIixcImJhclwiLFwiYmFyYmVyXCIsXCJiYXJlXCIsXCJiYXJlZm9vdFwiLFwiYmFyZWx5XCIsXCJiYXJrXCIsXCJiYXJuXCIsXCJiYXJyZWxcIixcImJhc2VcIixcImJhc2ViYWxsXCIsXCJiYXNlbWVudFwiLFwiYmFza2V0XCIsXCJiYXRcIixcImJhdGNoXCIsXCJiYXRoXCIsXCJiYXRoZVwiLFwiYmF0aGluZ1wiLFwiYmF0aHJvb21cIixcImJhdGh0dWJcIixcImJhdHRsZVwiLFwiYmF0dGxlc2hpcFwiLFwiYmF5XCIsXCJiZVwiLFwiYmVhY2hcIixcImJlYWRcIixcImJlYW1cIixcImJlYW5cIixcImJlYXJcIixcImJlYXJkXCIsXCJiZWFzdFwiLFwiYmVhdFwiLFwiYmVhdGluZ1wiLFwiYmVhdXRpZnVsXCIsXCJiZWF1dGlmeVwiLFwiYmVhdXR5XCIsXCJiZWNhbWVcIixcImJlY2F1c2VcIixcImJlY29tZVwiLFwiYmVjb21pbmdcIixcImJlZFwiLFwiYmVkYnVnXCIsXCJiZWRyb29tXCIsXCJiZWRzcHJlYWRcIixcImJlZHRpbWVcIixcImJlZVwiLFwiYmVlY2hcIixcImJlZWZcIixcImJlZWZzdGVha1wiLFwiYmVlaGl2ZVwiLFwiYmVlblwiLFwiYmVlclwiLFwiYmVldFwiLFwiYmVmb3JlXCIsXCJiZWdcIixcImJlZ2FuXCIsXCJiZWdnYXJcIixcImJlZ2dlZFwiLFwiYmVnaW5cIixcImJlZ2lubmluZ1wiLFwiYmVndW5cIixcImJlaGF2ZVwiLFwiYmVoaW5kXCIsXCJiZWluZ1wiLFwiYmVsaWV2ZVwiLFwiYmVsbFwiLFwiYmVsb25nXCIsXCJiZWxvd1wiLFwiYmVsdFwiLFwiYmVuY2hcIixcImJlbmRcIixcImJlbmVhdGhcIixcImJlbnRcIixcImJlcnJpZXNcIixcImJlcnJ5XCIsXCJiZXNpZGVcIixcImJlc2lkZXNcIixcImJlc3RcIixcImJldFwiLFwiYmV0dGVyXCIsXCJiZXR3ZWVuXCIsXCJiaWJcIixcImJpYmxlXCIsXCJiaWN5Y2xlXCIsXCJiaWRcIixcImJpZ1wiLFwiYmlnZ2VyXCIsXCJiaWxsXCIsXCJiaWxsYm9hcmRcIixcImJpblwiLFwiYmluZFwiLFwiYmlyZFwiLFwiYmlydGhcIixcImJpcnRoZGF5XCIsXCJiaXNjdWl0XCIsXCJiaXRcIixcImJpdGVcIixcImJpdGluZ1wiLFwiYml0dGVyXCIsXCJibGFja1wiLFwiYmxhY2tiZXJyeVwiLFwiYmxhY2tiaXJkXCIsXCJibGFja2JvYXJkXCIsXCJibGFja25lc3NcIixcImJsYWNrc21pdGhcIixcImJsYW1lXCIsXCJibGFua1wiLFwiYmxhbmtldFwiLFwiYmxhc3RcIixcImJsYXplXCIsXCJibGVlZFwiLFwiYmxlc3NcIixcImJsZXNzaW5nXCIsXCJibGV3XCIsXCJibGluZFwiLFwiYmxpbmRmb2xkXCIsXCJibGluZHNcIixcImJsb2NrXCIsXCJibG9vZFwiLFwiYmxvb21cIixcImJsb3Nzb21cIixcImJsb3RcIixcImJsb3dcIixcImJsdWVcIixcImJsdWViZXJyeVwiLFwiYmx1ZWJpcmRcIixcImJsdXNoXCIsXCJib2FyZFwiLFwiYm9hc3RcIixcImJvYXRcIixcImJvYlwiLFwiYm9id2hpdGVcIixcImJvZGllc1wiLFwiYm9keVwiLFwiYm9pbFwiLFwiYm9pbGVyXCIsXCJib2xkXCIsXCJib25lXCIsXCJib25uZXRcIixcImJvb1wiLFwiYm9va1wiLFwiYm9va2Nhc2VcIixcImJvb2trZWVwZXJcIixcImJvb21cIixcImJvb3RcIixcImJvcm5cIixcImJvcnJvd1wiLFwiYm9zc1wiLFwiYm90aFwiLFwiYm90aGVyXCIsXCJib3R0bGVcIixcImJvdHRvbVwiLFwiYm91Z2h0XCIsXCJib3VuY2VcIixcImJvd1wiLFwiYm93LXdvd1wiLFwiYm93bFwiLFwiYm94XCIsXCJib3hjYXJcIixcImJveGVyXCIsXCJib3hlc1wiLFwiYm95XCIsXCJib3lob29kXCIsXCJicmFjZWxldFwiLFwiYnJhaW5cIixcImJyYWtlXCIsXCJicmFuXCIsXCJicmFuY2hcIixcImJyYXNzXCIsXCJicmF2ZVwiLFwiYnJlYWRcIixcImJyZWFrXCIsXCJicmVha2Zhc3RcIixcImJyZWFzdFwiLFwiYnJlYXRoXCIsXCJicmVhdGhlXCIsXCJicmVlemVcIixcImJyaWNrXCIsXCJicmlkZVwiLFwiYnJpZGdlXCIsXCJicmlnaHRcIixcImJyaWdodG5lc3NcIixcImJyaW5nXCIsXCJicm9hZFwiLFwiYnJvYWRjYXN0XCIsXCJicm9rZVwiLFwiYnJva2VuXCIsXCJicm9va1wiLFwiYnJvb21cIixcImJyb3RoZXJcIixcImJyb3VnaHRcIixcImJyb3duXCIsXCJicnVzaFwiLFwiYnViYmxlXCIsXCJidWNrZXRcIixcImJ1Y2tsZVwiLFwiYnVkXCIsXCJidWZmYWxvXCIsXCJidWdcIixcImJ1Z2d5XCIsXCJidWlsZFwiLFwiYnVpbGRpbmdcIixcImJ1aWx0XCIsXCJidWxiXCIsXCJidWxsXCIsXCJidWxsZXRcIixcImJ1bVwiLFwiYnVtYmxlYmVlXCIsXCJidW1wXCIsXCJidW5cIixcImJ1bmNoXCIsXCJidW5kbGVcIixcImJ1bm55XCIsXCJidXJuXCIsXCJidXJzdFwiLFwiYnVyeVwiLFwiYnVzXCIsXCJidXNoXCIsXCJidXNoZWxcIixcImJ1c2luZXNzXCIsXCJidXN5XCIsXCJidXRcIixcImJ1dGNoZXJcIixcImJ1dHRcIixcImJ1dHRlclwiLFwiYnV0dGVyY3VwXCIsXCJidXR0ZXJmbHlcIixcImJ1dHRlcm1pbGtcIixcImJ1dHRlcnNjb3RjaFwiLFwiYnV0dG9uXCIsXCJidXR0b25ob2xlXCIsXCJidXlcIixcImJ1enpcIixcImJ5XCIsXCJieWVcIixcImNhYlwiLFwiY2FiYmFnZVwiLFwiY2FiaW5cIixcImNhYmluZXRcIixcImNhY2tsZVwiLFwiY2FnZVwiLFwiY2FrZVwiLFwiY2FsZW5kYXJcIixcImNhbGZcIixcImNhbGxcIixcImNhbGxlclwiLFwiY2FsbGluZ1wiLFwiY2FtZVwiLFwiY2FtZWxcIixcImNhbXBcIixcImNhbXBmaXJlXCIsXCJjYW5cIixcImNhbid0XCIsXCJjYW5hbFwiLFwiY2FuYXJ5XCIsXCJjYW5kbGVcIixcImNhbmRsZXN0aWNrXCIsXCJjYW5keVwiLFwiY2FuZVwiLFwiY2Fubm9uXCIsXCJjYW5ub3RcIixcImNhbm9lXCIsXCJjYW55b25cIixcImNhcFwiLFwiY2FwZVwiLFwiY2FwaXRhbFwiLFwiY2FwdGFpblwiLFwiY2FyXCIsXCJjYXJkXCIsXCJjYXJkYm9hcmRcIixcImNhcmVcIixcImNhcmVmdWxcIixcImNhcmVsZXNzXCIsXCJjYXJlbGVzc25lc3NcIixcImNhcmxvYWRcIixcImNhcnBlbnRlclwiLFwiY2FycGV0XCIsXCJjYXJyaWFnZVwiLFwiY2Fycm90XCIsXCJjYXJyeVwiLFwiY2FydFwiLFwiY2FydmVcIixcImNhc2VcIixcImNhc2hcIixcImNhc2hpZXJcIixcImNhc3RsZVwiLFwiY2F0XCIsXCJjYXRiaXJkXCIsXCJjYXRjaFwiLFwiY2F0Y2hlclwiLFwiY2F0ZXJwaWxsYXJcIixcImNhdGZpc2hcIixcImNhdHN1cFwiLFwiY2F0dGxlXCIsXCJjYXVnaHRcIixcImNhdXNlXCIsXCJjYXZlXCIsXCJjZWlsaW5nXCIsXCJjZWxsXCIsXCJjZWxsYXJcIixcImNlbnRcIixcImNlbnRlclwiLFwiY2VyZWFsXCIsXCJjZXJ0YWluXCIsXCJjZXJ0YWlubHlcIixcImNoYWluXCIsXCJjaGFpclwiLFwiY2hhbGtcIixcImNoYW1waW9uXCIsXCJjaGFuY2VcIixcImNoYW5nZVwiLFwiY2hhcFwiLFwiY2hhcmdlXCIsXCJjaGFybVwiLFwiY2hhcnRcIixcImNoYXNlXCIsXCJjaGF0dGVyXCIsXCJjaGVhcFwiLFwiY2hlYXRcIixcImNoZWNrXCIsXCJjaGVja2Vyc1wiLFwiY2hlZWtcIixcImNoZWVyXCIsXCJjaGVlc2VcIixcImNoZXJyeVwiLFwiY2hlc3RcIixcImNoZXdcIixcImNoaWNrXCIsXCJjaGlja2VuXCIsXCJjaGllZlwiLFwiY2hpbGRcIixcImNoaWxkaG9vZFwiLFwiY2hpbGRyZW5cIixcImNoaWxsXCIsXCJjaGlsbHlcIixcImNoaW1uZXlcIixcImNoaW5cIixcImNoaW5hXCIsXCJjaGlwXCIsXCJjaGlwbXVua1wiLFwiY2hvY29sYXRlXCIsXCJjaG9pY2VcIixcImNob29zZVwiLFwiY2hvcFwiLFwiY2hvcnVzXCIsXCJjaG9zZVwiLFwiY2hvc2VuXCIsXCJjaHJpc3RlblwiLFwiY2hyaXN0bWFzXCIsXCJjaHVyY2hcIixcImNodXJuXCIsXCJjaWdhcmV0dGVcIixcImNpcmNsZVwiLFwiY2lyY3VzXCIsXCJjaXRpemVuXCIsXCJjaXR5XCIsXCJjbGFuZ1wiLFwiY2xhcFwiLFwiY2xhc3NcIixcImNsYXNzbWF0ZVwiLFwiY2xhc3Nyb29tXCIsXCJjbGF3XCIsXCJjbGF5XCIsXCJjbGVhblwiLFwiY2xlYW5lclwiLFwiY2xlYXJcIixcImNsZXJrXCIsXCJjbGV2ZXJcIixcImNsaWNrXCIsXCJjbGlmZlwiLFwiY2xpbWJcIixcImNsaXBcIixcImNsb2FrXCIsXCJjbG9ja1wiLFwiY2xvc2VcIixcImNsb3NldFwiLFwiY2xvdGhcIixcImNsb3RoZXNcIixcImNsb3RoaW5nXCIsXCJjbG91ZFwiLFwiY2xvdWR5XCIsXCJjbG92ZXJcIixcImNsb3duXCIsXCJjbHViXCIsXCJjbHVja1wiLFwiY2x1bXBcIixcImNvYWNoXCIsXCJjb2FsXCIsXCJjb2FzdFwiLFwiY29hdFwiLFwiY29iXCIsXCJjb2JibGVyXCIsXCJjb2NvYVwiLFwiY29jb251dFwiLFwiY29jb29uXCIsXCJjb2RcIixcImNvZGZpc2hcIixcImNvZmZlZVwiLFwiY29mZmVlcG90XCIsXCJjb2luXCIsXCJjb2xkXCIsXCJjb2xsYXJcIixcImNvbGxlZ2VcIixcImNvbG9yXCIsXCJjb2xvcmVkXCIsXCJjb2x0XCIsXCJjb2x1bW5cIixcImNvbWJcIixcImNvbWVcIixcImNvbWZvcnRcIixcImNvbWljXCIsXCJjb21pbmdcIixcImNvbXBhbnlcIixcImNvbXBhcmVcIixcImNvbmR1Y3RvclwiLFwiY29uZVwiLFwiY29ubmVjdFwiLFwiY29vXCIsXCJjb29rXCIsXCJjb29rZWRcIixcImNvb2tpZVwiLFwiY29va2llc1wiLFwiY29va2luZ1wiLFwiY29vbFwiLFwiY29vbGVyXCIsXCJjb29wXCIsXCJjb3BwZXJcIixcImNvcHlcIixcImNvcmRcIixcImNvcmtcIixcImNvcm5cIixcImNvcm5lclwiLFwiY29ycmVjdFwiLFwiY29zdFwiLFwiY290XCIsXCJjb3R0YWdlXCIsXCJjb3R0b25cIixcImNvdWNoXCIsXCJjb3VnaFwiLFwiY291bGRcIixcImNvdWxkbid0XCIsXCJjb3VudFwiLFwiY291bnRlclwiLFwiY291bnRyeVwiLFwiY291bnR5XCIsXCJjb3Vyc2VcIixcImNvdXJ0XCIsXCJjb3VzaW5cIixcImNvdmVyXCIsXCJjb3dcIixcImNvd2FyZFwiLFwiY293YXJkbHlcIixcImNvd2JveVwiLFwiY296eVwiLFwiY3JhYlwiLFwiY3JhY2tcIixcImNyYWNrZXJcIixcImNyYWRsZVwiLFwiY3JhbXBzXCIsXCJjcmFuYmVycnlcIixcImNyYW5rXCIsXCJjcmFua3lcIixcImNyYXNoXCIsXCJjcmF3bFwiLFwiY3JhenlcIixcImNyZWFtXCIsXCJjcmVhbXlcIixcImNyZWVrXCIsXCJjcmVlcFwiLFwiY3JlcHRcIixcImNyaWVkXCIsXCJjcmllc1wiLFwiY3JvYWtcIixcImNyb29rXCIsXCJjcm9va2VkXCIsXCJjcm9wXCIsXCJjcm9zc1wiLFwiY3Jvc3MtZXllZFwiLFwiY3Jvc3NpbmdcIixcImNyb3dcIixcImNyb3dkXCIsXCJjcm93ZGVkXCIsXCJjcm93blwiLFwiY3J1ZWxcIixcImNydW1iXCIsXCJjcnVtYmxlXCIsXCJjcnVzaFwiLFwiY3J1c3RcIixcImNyeVwiLFwiY3ViXCIsXCJjdWZmXCIsXCJjdXBcIixcImN1cGJvYXJkXCIsXCJjdXBmdWxcIixcImN1cmVcIixcImN1cmxcIixcImN1cmx5XCIsXCJjdXJ0YWluXCIsXCJjdXJ2ZVwiLFwiY3VzaGlvblwiLFwiY3VzdGFyZFwiLFwiY3VzdG9tZXJcIixcImN1dFwiLFwiY3V0ZVwiLFwiY3V0dGluZ1wiLFwiZGFiXCIsXCJkYWRcIixcImRhZGR5XCIsXCJkYWlseVwiLFwiZGFpcnlcIixcImRhaXN5XCIsXCJkYW1cIixcImRhbWFnZVwiLFwiZGFtZVwiLFwiZGFtcFwiLFwiZGFuY2VcIixcImRhbmNlclwiLFwiZGFuY2luZ1wiLFwiZGFuZHlcIixcImRhbmdlclwiLFwiZGFuZ2Vyb3VzXCIsXCJkYXJlXCIsXCJkYXJrXCIsXCJkYXJrbmVzc1wiLFwiZGFybGluZ1wiLFwiZGFyblwiLFwiZGFydFwiLFwiZGFzaFwiLFwiZGF0ZVwiLFwiZGF1Z2h0ZXJcIixcImRhd25cIixcImRheVwiLFwiZGF5YnJlYWtcIixcImRheXRpbWVcIixcImRlYWRcIixcImRlYWZcIixcImRlYWxcIixcImRlYXJcIixcImRlYXRoXCIsXCJkZWNlbWJlclwiLFwiZGVjaWRlXCIsXCJkZWNrXCIsXCJkZWVkXCIsXCJkZWVwXCIsXCJkZWVyXCIsXCJkZWZlYXRcIixcImRlZmVuZFwiLFwiZGVmZW5zZVwiLFwiZGVsaWdodFwiLFwiZGVuXCIsXCJkZW50aXN0XCIsXCJkZXBlbmRcIixcImRlcG9zaXRcIixcImRlc2NyaWJlXCIsXCJkZXNlcnRcIixcImRlc2VydmVcIixcImRlc2lyZVwiLFwiZGVza1wiLFwiZGVzdHJveVwiLFwiZGV2aWxcIixcImRld1wiLFwiZGlhbW9uZFwiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZVwiLFwiZGllZFwiLFwiZGllc1wiLFwiZGlmZmVyZW5jZVwiLFwiZGlmZmVyZW50XCIsXCJkaWdcIixcImRpbVwiLFwiZGltZVwiLFwiZGluZVwiLFwiZGluZy1kb25nXCIsXCJkaW5uZXJcIixcImRpcFwiLFwiZGlyZWN0XCIsXCJkaXJlY3Rpb25cIixcImRpcnRcIixcImRpcnR5XCIsXCJkaXNjb3ZlclwiLFwiZGlzaFwiLFwiZGlzbGlrZVwiLFwiZGlzbWlzc1wiLFwiZGl0Y2hcIixcImRpdmVcIixcImRpdmVyXCIsXCJkaXZpZGVcIixcImRvXCIsXCJkb2NrXCIsXCJkb2N0b3JcIixcImRvZXNcIixcImRvZXNuJ3RcIixcImRvZ1wiLFwiZG9sbFwiLFwiZG9sbGFyXCIsXCJkb2xseVwiLFwiZG9uJ3RcIixcImRvbmVcIixcImRvbmtleVwiLFwiZG9vclwiLFwiZG9vcmJlbGxcIixcImRvb3Jrbm9iXCIsXCJkb29yc3RlcFwiLFwiZG9wZVwiLFwiZG90XCIsXCJkb3VibGVcIixcImRvdWdoXCIsXCJkb3ZlXCIsXCJkb3duXCIsXCJkb3duc3RhaXJzXCIsXCJkb3dudG93blwiLFwiZG96ZW5cIixcImRyYWdcIixcImRyYWluXCIsXCJkcmFua1wiLFwiZHJhd1wiLFwiZHJhd2VyXCIsXCJkcmF3aW5nXCIsXCJkcmVhbVwiLFwiZHJlc3NcIixcImRyZXNzZXJcIixcImRyZXNzbWFrZXJcIixcImRyZXdcIixcImRyaWVkXCIsXCJkcmlmdFwiLFwiZHJpbGxcIixcImRyaW5rXCIsXCJkcmlwXCIsXCJkcml2ZVwiLFwiZHJpdmVuXCIsXCJkcml2ZXJcIixcImRyb3BcIixcImRyb3ZlXCIsXCJkcm93blwiLFwiZHJvd3N5XCIsXCJkcnViXCIsXCJkcnVtXCIsXCJkcnVua1wiLFwiZHJ5XCIsXCJkdWNrXCIsXCJkdWVcIixcImR1Z1wiLFwiZHVsbFwiLFwiZHVtYlwiLFwiZHVtcFwiLFwiZHVyaW5nXCIsXCJkdXN0XCIsXCJkdXN0eVwiLFwiZHV0eVwiLFwiZHdhcmZcIixcImR3ZWxsXCIsXCJkd2VsdFwiLFwiZHlpbmdcIixcImVhY2hcIixcImVhZ2VyXCIsXCJlYWdsZVwiLFwiZWFyXCIsXCJlYXJseVwiLFwiZWFyblwiLFwiZWFydGhcIixcImVhc3RcIixcImVhc3Rlcm5cIixcImVhc3lcIixcImVhdFwiLFwiZWF0ZW5cIixcImVkZ2VcIixcImVnZ1wiLFwiZWhcIixcImVpZ2h0XCIsXCJlaWdodGVlblwiLFwiZWlnaHRoXCIsXCJlaWdodHlcIixcImVpdGhlclwiLFwiZWxib3dcIixcImVsZGVyXCIsXCJlbGRlc3RcIixcImVsZWN0cmljXCIsXCJlbGVjdHJpY2l0eVwiLFwiZWxlcGhhbnRcIixcImVsZXZlblwiLFwiZWxmXCIsXCJlbG1cIixcImVsc2VcIixcImVsc2V3aGVyZVwiLFwiZW1wdHlcIixcImVuZFwiLFwiZW5kaW5nXCIsXCJlbmVteVwiLFwiZW5naW5lXCIsXCJlbmdpbmVlclwiLFwiZW5nbGlzaFwiLFwiZW5qb3lcIixcImVub3VnaFwiLFwiZW50ZXJcIixcImVudmVsb3BlXCIsXCJlcXVhbFwiLFwiZXJhc2VcIixcImVyYXNlclwiLFwiZXJyYW5kXCIsXCJlc2NhcGVcIixcImV2ZVwiLFwiZXZlblwiLFwiZXZlbmluZ1wiLFwiZXZlclwiLFwiZXZlcnlcIixcImV2ZXJ5Ym9keVwiLFwiZXZlcnlkYXlcIixcImV2ZXJ5b25lXCIsXCJldmVyeXRoaW5nXCIsXCJldmVyeXdoZXJlXCIsXCJldmlsXCIsXCJleGFjdFwiLFwiZXhjZXB0XCIsXCJleGNoYW5nZVwiLFwiZXhjaXRlZFwiLFwiZXhjaXRpbmdcIixcImV4Y3VzZVwiLFwiZXhpdFwiLFwiZXhwZWN0XCIsXCJleHBsYWluXCIsXCJleHRyYVwiLFwiZXllXCIsXCJleWVicm93XCIsXCJmYWJsZVwiLFwiZmFjZVwiLFwiZmFjaW5nXCIsXCJmYWN0XCIsXCJmYWN0b3J5XCIsXCJmYWlsXCIsXCJmYWludFwiLFwiZmFpclwiLFwiZmFpcnlcIixcImZhaXRoXCIsXCJmYWtlXCIsXCJmYWxsXCIsXCJmYWxzZVwiLFwiZmFtaWx5XCIsXCJmYW5cIixcImZhbmN5XCIsXCJmYXJcIixcImZhci1vZmZcIixcImZhcmF3YXlcIixcImZhcmVcIixcImZhcm1cIixcImZhcm1lclwiLFwiZmFybWluZ1wiLFwiZmFydGhlclwiLFwiZmFzaGlvblwiLFwiZmFzdFwiLFwiZmFzdGVuXCIsXCJmYXRcIixcImZhdGhlclwiLFwiZmF1bHRcIixcImZhdm9yXCIsXCJmYXZvcml0ZVwiLFwiZmVhclwiLFwiZmVhc3RcIixcImZlYXRoZXJcIixcImZlYnJ1YXJ5XCIsXCJmZWRcIixcImZlZWRcIixcImZlZWxcIixcImZlZXRcIixcImZlbGxcIixcImZlbGxvd1wiLFwiZmVsdFwiLFwiZmVuY2VcIixcImZldmVyXCIsXCJmZXdcIixcImZpYlwiLFwiZmlkZGxlXCIsXCJmaWVsZFwiLFwiZmlmZVwiLFwiZmlmdGVlblwiLFwiZmlmdGhcIixcImZpZnR5XCIsXCJmaWdcIixcImZpZ2h0XCIsXCJmaWd1cmVcIixcImZpbGVcIixcImZpbGxcIixcImZpbG1cIixcImZpbmFsbHlcIixcImZpbmRcIixcImZpbmVcIixcImZpbmdlclwiLFwiZmluaXNoXCIsXCJmaXJlXCIsXCJmaXJlYXJtXCIsXCJmaXJlY3JhY2tlclwiLFwiZmlyZXBsYWNlXCIsXCJmaXJld29ya3NcIixcImZpcmluZ1wiLFwiZmlyc3RcIixcImZpc2hcIixcImZpc2hlcm1hblwiLFwiZmlzdFwiLFwiZml0XCIsXCJmaXRzXCIsXCJmaXZlXCIsXCJmaXhcIixcImZsYWdcIixcImZsYWtlXCIsXCJmbGFtZVwiLFwiZmxhcFwiLFwiZmxhc2hcIixcImZsYXNobGlnaHRcIixcImZsYXRcIixcImZsZWFcIixcImZsZXNoXCIsXCJmbGV3XCIsXCJmbGllc1wiLFwiZmxpZ2h0XCIsXCJmbGlwXCIsXCJmbGlwLWZsb3BcIixcImZsb2F0XCIsXCJmbG9ja1wiLFwiZmxvb2RcIixcImZsb29yXCIsXCJmbG9wXCIsXCJmbG91clwiLFwiZmxvd1wiLFwiZmxvd2VyXCIsXCJmbG93ZXJ5XCIsXCJmbHV0dGVyXCIsXCJmbHlcIixcImZvYW1cIixcImZvZ1wiLFwiZm9nZ3lcIixcImZvbGRcIixcImZvbGtzXCIsXCJmb2xsb3dcIixcImZvbGxvd2luZ1wiLFwiZm9uZFwiLFwiZm9vZFwiLFwiZm9vbFwiLFwiZm9vbGlzaFwiLFwiZm9vdFwiLFwiZm9vdGJhbGxcIixcImZvb3RwcmludFwiLFwiZm9yXCIsXCJmb3JlaGVhZFwiLFwiZm9yZXN0XCIsXCJmb3JnZXRcIixcImZvcmdpdmVcIixcImZvcmdvdFwiLFwiZm9yZ290dGVuXCIsXCJmb3JrXCIsXCJmb3JtXCIsXCJmb3J0XCIsXCJmb3J0aFwiLFwiZm9ydHVuZVwiLFwiZm9ydHlcIixcImZvcndhcmRcIixcImZvdWdodFwiLFwiZm91bmRcIixcImZvdW50YWluXCIsXCJmb3VyXCIsXCJmb3VydGVlblwiLFwiZm91cnRoXCIsXCJmb3hcIixcImZyYW1lXCIsXCJmcmVlXCIsXCJmcmVlZG9tXCIsXCJmcmVlemVcIixcImZyZWlnaHRcIixcImZyZW5jaFwiLFwiZnJlc2hcIixcImZyZXRcIixcImZyaWRheVwiLFwiZnJpZWRcIixcImZyaWVuZFwiLFwiZnJpZW5kbHlcIixcImZyaWVuZHNoaXBcIixcImZyaWdodGVuXCIsXCJmcm9nXCIsXCJmcm9tXCIsXCJmcm9udFwiLFwiZnJvc3RcIixcImZyb3duXCIsXCJmcm96ZVwiLFwiZnJ1aXRcIixcImZyeVwiLFwiZnVkZ2VcIixcImZ1ZWxcIixcImZ1bGxcIixcImZ1bGx5XCIsXCJmdW5cIixcImZ1bm55XCIsXCJmdXJcIixcImZ1cm5pdHVyZVwiLFwiZnVydGhlclwiLFwiZnV6enlcIixcImdhaW5cIixcImdhbGxvblwiLFwiZ2FsbG9wXCIsXCJnYW1lXCIsXCJnYW5nXCIsXCJnYXJhZ2VcIixcImdhcmJhZ2VcIixcImdhcmRlblwiLFwiZ2FzXCIsXCJnYXNvbGluZVwiLFwiZ2F0ZVwiLFwiZ2F0aGVyXCIsXCJnYXZlXCIsXCJnYXlcIixcImdlYXJcIixcImdlZXNlXCIsXCJnZW5lcmFsXCIsXCJnZW50bGVcIixcImdlbnRsZW1hblwiLFwiZ2VudGxlbWVuXCIsXCJnZW9ncmFwaHlcIixcImdldFwiLFwiZ2V0dGluZ1wiLFwiZ2lhbnRcIixcImdpZnRcIixcImdpbmdlcmJyZWFkXCIsXCJnaXJsXCIsXCJnaXZlXCIsXCJnaXZlblwiLFwiZ2l2aW5nXCIsXCJnbGFkXCIsXCJnbGFkbHlcIixcImdsYW5jZVwiLFwiZ2xhc3NcIixcImdsYXNzZXNcIixcImdsZWFtXCIsXCJnbGlkZVwiLFwiZ2xvcnlcIixcImdsb3ZlXCIsXCJnbG93XCIsXCJnbHVlXCIsXCJnb1wiLFwiZ29hbFwiLFwiZ29hdFwiLFwiZ29iYmxlXCIsXCJnb2RcIixcImdvZG1vdGhlclwiLFwiZ29lc1wiLFwiZ29pbmdcIixcImdvbGRcIixcImdvbGRlblwiLFwiZ29sZGZpc2hcIixcImdvbGZcIixcImdvbmVcIixcImdvb2RcIixcImdvb2QtYnlcIixcImdvb2QtYnllXCIsXCJnb29kLWxvb2tpbmdcIixcImdvb2RieWVcIixcImdvb2RuZXNzXCIsXCJnb29kc1wiLFwiZ29vZHlcIixcImdvb3NlXCIsXCJnb29zZWJlcnJ5XCIsXCJnb3RcIixcImdvdmVyblwiLFwiZ292ZXJubWVudFwiLFwiZ293blwiLFwiZ3JhYlwiLFwiZ3JhY2lvdXNcIixcImdyYWRlXCIsXCJncmFpblwiLFwiZ3JhbmRcIixcImdyYW5kY2hpbGRcIixcImdyYW5kY2hpbGRyZW5cIixcImdyYW5kZGF1Z2h0ZXJcIixcImdyYW5kZmF0aGVyXCIsXCJncmFuZG1hXCIsXCJncmFuZG1vdGhlclwiLFwiZ3JhbmRwYVwiLFwiZ3JhbmRzb25cIixcImdyYW5kc3RhbmRcIixcImdyYXBlXCIsXCJncmFwZWZydWl0XCIsXCJncmFwZXNcIixcImdyYXNzXCIsXCJncmFzc2hvcHBlclwiLFwiZ3JhdGVmdWxcIixcImdyYXZlXCIsXCJncmF2ZWxcIixcImdyYXZleWFyZFwiLFwiZ3JhdnlcIixcImdyYXlcIixcImdyYXplXCIsXCJncmVhc2VcIixcImdyZWF0XCIsXCJncmVlblwiLFwiZ3JlZXRcIixcImdyZXdcIixcImdyaW5kXCIsXCJncm9hblwiLFwiZ3JvY2VyeVwiLFwiZ3JvdW5kXCIsXCJncm91cFwiLFwiZ3JvdmVcIixcImdyb3dcIixcImd1YXJkXCIsXCJndWVzc1wiLFwiZ3Vlc3RcIixcImd1aWRlXCIsXCJndWxmXCIsXCJndW1cIixcImd1blwiLFwiZ3VucG93ZGVyXCIsXCJndXlcIixcImhhXCIsXCJoYWJpdFwiLFwiaGFkXCIsXCJoYWRuJ3RcIixcImhhaWxcIixcImhhaXJcIixcImhhaXJjdXRcIixcImhhaXJwaW5cIixcImhhbGZcIixcImhhbGxcIixcImhhbHRcIixcImhhbVwiLFwiaGFtbWVyXCIsXCJoYW5kXCIsXCJoYW5kZnVsXCIsXCJoYW5ka2VyY2hpZWZcIixcImhhbmRsZVwiLFwiaGFuZHdyaXRpbmdcIixcImhhbmdcIixcImhhcHBlblwiLFwiaGFwcGlseVwiLFwiaGFwcGluZXNzXCIsXCJoYXBweVwiLFwiaGFyYm9yXCIsXCJoYXJkXCIsXCJoYXJkbHlcIixcImhhcmRzaGlwXCIsXCJoYXJkd2FyZVwiLFwiaGFyZVwiLFwiaGFya1wiLFwiaGFybVwiLFwiaGFybmVzc1wiLFwiaGFycFwiLFwiaGFydmVzdFwiLFwiaGFzXCIsXCJoYXNuJ3RcIixcImhhc3RlXCIsXCJoYXN0ZW5cIixcImhhc3R5XCIsXCJoYXRcIixcImhhdGNoXCIsXCJoYXRjaGV0XCIsXCJoYXRlXCIsXCJoYXVsXCIsXCJoYXZlXCIsXCJoYXZlbid0XCIsXCJoYXZpbmdcIixcImhhd2tcIixcImhheVwiLFwiaGF5ZmllbGRcIixcImhheXN0YWNrXCIsXCJoZVwiLFwiaGUnZFwiLFwiaGUnbGxcIixcImhlJ3NcIixcImhlYWRcIixcImhlYWRhY2hlXCIsXCJoZWFsXCIsXCJoZWFsdGhcIixcImhlYWx0aHlcIixcImhlYXBcIixcImhlYXJcIixcImhlYXJkXCIsXCJoZWFyaW5nXCIsXCJoZWFydFwiLFwiaGVhdFwiLFwiaGVhdGVyXCIsXCJoZWF2ZW5cIixcImhlYXZ5XCIsXCJoZWVsXCIsXCJoZWlnaHRcIixcImhlbGRcIixcImhlbGxcIixcImhlbGxvXCIsXCJoZWxtZXRcIixcImhlbHBcIixcImhlbHBlclwiLFwiaGVscGZ1bFwiLFwiaGVtXCIsXCJoZW5cIixcImhlbmhvdXNlXCIsXCJoZXJcIixcImhlcmRcIixcImhlcmVcIixcImhlcmUnc1wiLFwiaGVyb1wiLFwiaGVyc1wiLFwiaGVyc2VsZlwiLFwiaGV5XCIsXCJoaWNrb3J5XCIsXCJoaWRcIixcImhpZGRlblwiLFwiaGlkZVwiLFwiaGlnaFwiLFwiaGlnaHdheVwiLFwiaGlsbFwiLFwiaGlsbHNpZGVcIixcImhpbGx0b3BcIixcImhpbGx5XCIsXCJoaW1cIixcImhpbXNlbGZcIixcImhpbmRcIixcImhpbnRcIixcImhpcFwiLFwiaGlyZVwiLFwiaGlzXCIsXCJoaXNzXCIsXCJoaXN0b3J5XCIsXCJoaXRcIixcImhpdGNoXCIsXCJoaXZlXCIsXCJob1wiLFwiaG9lXCIsXCJob2dcIixcImhvbGRcIixcImhvbGRlclwiLFwiaG9sZVwiLFwiaG9saWRheVwiLFwiaG9sbG93XCIsXCJob2x5XCIsXCJob21lXCIsXCJob21lbHlcIixcImhvbWVzaWNrXCIsXCJob25lc3RcIixcImhvbmV5XCIsXCJob25leWJlZVwiLFwiaG9uZXltb29uXCIsXCJob25rXCIsXCJob25vclwiLFwiaG9vZFwiLFwiaG9vZlwiLFwiaG9va1wiLFwiaG9vcFwiLFwiaG9wXCIsXCJob3BlXCIsXCJob3BlZnVsXCIsXCJob3BlbGVzc1wiLFwiaG9yblwiLFwiaG9yc2VcIixcImhvcnNlYmFja1wiLFwiaG9yc2VzaG9lXCIsXCJob3NlXCIsXCJob3NwaXRhbFwiLFwiaG9zdFwiLFwiaG90XCIsXCJob3RlbFwiLFwiaG91bmRcIixcImhvdXJcIixcImhvdXNlXCIsXCJob3VzZXRvcFwiLFwiaG91c2V3aWZlXCIsXCJob3VzZXdvcmtcIixcImhvd1wiLFwiaG93ZXZlclwiLFwiaG93bFwiLFwiaHVnXCIsXCJodWdlXCIsXCJodW1cIixcImh1bWJsZVwiLFwiaHVtcFwiLFwiaHVuZHJlZFwiLFwiaHVuZ1wiLFwiaHVuZ2VyXCIsXCJodW5ncnlcIixcImh1bmtcIixcImh1bnRcIixcImh1bnRlclwiLFwiaHVycmFoXCIsXCJodXJyaWVkXCIsXCJodXJyeVwiLFwiaHVydFwiLFwiaHVzYmFuZFwiLFwiaHVzaFwiLFwiaHV0XCIsXCJoeW1uXCIsXCJpXCIsXCJpJ2RcIixcImknbGxcIixcImknbVwiLFwiaSd2ZVwiLFwiaWNlXCIsXCJpY3lcIixcImlkZWFcIixcImlkZWFsXCIsXCJpZlwiLFwiaWxsXCIsXCJpbXBvcnRhbnRcIixcImltcG9zc2libGVcIixcImltcHJvdmVcIixcImluXCIsXCJpbmNoXCIsXCJpbmNoZXNcIixcImluY29tZVwiLFwiaW5kZWVkXCIsXCJpbmRpYW5cIixcImluZG9vcnNcIixcImlua1wiLFwiaW5uXCIsXCJpbnNlY3RcIixcImluc2lkZVwiLFwiaW5zdGFudFwiLFwiaW5zdGVhZFwiLFwiaW5zdWx0XCIsXCJpbnRlbmRcIixcImludGVyZXN0ZWRcIixcImludGVyZXN0aW5nXCIsXCJpbnRvXCIsXCJpbnZpdGVcIixcImlyb25cIixcImlzXCIsXCJpc2xhbmRcIixcImlzbid0XCIsXCJpdFwiLFwiaXQnc1wiLFwiaXRzXCIsXCJpdHNlbGZcIixcIml2b3J5XCIsXCJpdnlcIixcImphY2tldFwiLFwiamFja3NcIixcImphaWxcIixcImphbVwiLFwiamFudWFyeVwiLFwiamFyXCIsXCJqYXdcIixcImpheVwiLFwiamVsbHlcIixcImplbGx5ZmlzaFwiLFwiamVya1wiLFwiamlnXCIsXCJqb2JcIixcImpvY2tleVwiLFwiam9pblwiLFwiam9rZVwiLFwiam9raW5nXCIsXCJqb2xseVwiLFwiam91cm5leVwiLFwiam95XCIsXCJqb3lmdWxcIixcImpveW91c1wiLFwianVkZ2VcIixcImp1Z1wiLFwianVpY2VcIixcImp1aWN5XCIsXCJqdWx5XCIsXCJqdW1wXCIsXCJqdW5lXCIsXCJqdW5pb3JcIixcImp1bmtcIixcImp1c3RcIixcImtlZW5cIixcImtlZXBcIixcImtlcHRcIixcImtldHRsZVwiLFwia2V5XCIsXCJraWNrXCIsXCJraWRcIixcImtpbGxcIixcImtpbGxlZFwiLFwia2luZFwiLFwia2luZGx5XCIsXCJraW5kbmVzc1wiLFwia2luZ1wiLFwia2luZ2RvbVwiLFwia2lzc1wiLFwia2l0Y2hlblwiLFwia2l0ZVwiLFwia2l0dGVuXCIsXCJraXR0eVwiLFwia25lZVwiLFwia25lZWxcIixcImtuZXdcIixcImtuaWZlXCIsXCJrbml0XCIsXCJrbml2ZXNcIixcImtub2JcIixcImtub2NrXCIsXCJrbm90XCIsXCJrbm93XCIsXCJrbm93blwiLFwibGFjZVwiLFwibGFkXCIsXCJsYWRkZXJcIixcImxhZGllc1wiLFwibGFkeVwiLFwibGFpZFwiLFwibGFrZVwiLFwibGFtYlwiLFwibGFtZVwiLFwibGFtcFwiLFwibGFuZFwiLFwibGFuZVwiLFwibGFuZ3VhZ2VcIixcImxhbnRlcm5cIixcImxhcFwiLFwibGFyZFwiLFwibGFyZ2VcIixcImxhc2hcIixcImxhc3NcIixcImxhc3RcIixcImxhdGVcIixcImxhdWdoXCIsXCJsYXVuZHJ5XCIsXCJsYXdcIixcImxhd25cIixcImxhd3llclwiLFwibGF5XCIsXCJsYXp5XCIsXCJsZWFkXCIsXCJsZWFkZXJcIixcImxlYWZcIixcImxlYWtcIixcImxlYW5cIixcImxlYXBcIixcImxlYXJuXCIsXCJsZWFybmVkXCIsXCJsZWFzdFwiLFwibGVhdGhlclwiLFwibGVhdmVcIixcImxlYXZpbmdcIixcImxlZFwiLFwibGVmdFwiLFwibGVnXCIsXCJsZW1vblwiLFwibGVtb25hZGVcIixcImxlbmRcIixcImxlbmd0aFwiLFwibGVzc1wiLFwibGVzc29uXCIsXCJsZXRcIixcImxldCdzXCIsXCJsZXR0ZXJcIixcImxldHRpbmdcIixcImxldHR1Y2VcIixcImxldmVsXCIsXCJsaWJlcnR5XCIsXCJsaWJyYXJ5XCIsXCJsaWNlXCIsXCJsaWNrXCIsXCJsaWRcIixcImxpZVwiLFwibGlmZVwiLFwibGlmdFwiLFwibGlnaHRcIixcImxpZ2h0bmVzc1wiLFwibGlnaHRuaW5nXCIsXCJsaWtlXCIsXCJsaWtlbHlcIixcImxpa2luZ1wiLFwibGlseVwiLFwibGltYlwiLFwibGltZVwiLFwibGltcFwiLFwibGluZVwiLFwibGluZW5cIixcImxpb25cIixcImxpcFwiLFwibGlzdFwiLFwibGlzdGVuXCIsXCJsaXRcIixcImxpdHRsZVwiLFwibGl2ZVwiLFwibGl2ZWx5XCIsXCJsaXZlclwiLFwibGl2ZXNcIixcImxpdmluZ1wiLFwibGl6YXJkXCIsXCJsb2FkXCIsXCJsb2FmXCIsXCJsb2FuXCIsXCJsb2F2ZXNcIixcImxvY2tcIixcImxvY29tb3RpdmVcIixcImxvZ1wiLFwibG9uZVwiLFwibG9uZWx5XCIsXCJsb25lc29tZVwiLFwibG9uZ1wiLFwibG9va1wiLFwibG9va291dFwiLFwibG9vcFwiLFwibG9vc2VcIixcImxvcmRcIixcImxvc2VcIixcImxvc2VyXCIsXCJsb3NzXCIsXCJsb3N0XCIsXCJsb3RcIixcImxvdWRcIixcImxvdmVcIixcImxvdmVseVwiLFwibG92ZXJcIixcImxvd1wiLFwibHVja1wiLFwibHVja3lcIixcImx1bWJlclwiLFwibHVtcFwiLFwibHVuY2hcIixcImx5aW5nXCIsXCJtYVwiLFwibWFjaGluZVwiLFwibWFjaGluZXJ5XCIsXCJtYWRcIixcIm1hZGVcIixcIm1hZ2F6aW5lXCIsXCJtYWdpY1wiLFwibWFpZFwiLFwibWFpbFwiLFwibWFpbGJveFwiLFwibWFpbG1hblwiLFwibWFqb3JcIixcIm1ha2VcIixcIm1ha2luZ1wiLFwibWFsZVwiLFwibWFtYVwiLFwibWFtbWFcIixcIm1hblwiLFwibWFuYWdlclwiLFwibWFuZVwiLFwibWFuZ2VyXCIsXCJtYW55XCIsXCJtYXBcIixcIm1hcGxlXCIsXCJtYXJibGVcIixcIm1hcmNoXCIsXCJtYXJlXCIsXCJtYXJrXCIsXCJtYXJrZXRcIixcIm1hcnJpYWdlXCIsXCJtYXJyaWVkXCIsXCJtYXJyeVwiLFwibWFza1wiLFwibWFzdFwiLFwibWFzdGVyXCIsXCJtYXRcIixcIm1hdGNoXCIsXCJtYXR0ZXJcIixcIm1hdHRyZXNzXCIsXCJtYXlcIixcIm1heWJlXCIsXCJtYXlvclwiLFwibWF5cG9sZVwiLFwibWVcIixcIm1lYWRvd1wiLFwibWVhbFwiLFwibWVhblwiLFwibWVhbnNcIixcIm1lYW50XCIsXCJtZWFzdXJlXCIsXCJtZWF0XCIsXCJtZWRpY2luZVwiLFwibWVldFwiLFwibWVldGluZ1wiLFwibWVsdFwiLFwibWVtYmVyXCIsXCJtZW5cIixcIm1lbmRcIixcIm1lb3dcIixcIm1lcnJ5XCIsXCJtZXNzXCIsXCJtZXNzYWdlXCIsXCJtZXRcIixcIm1ldGFsXCIsXCJtZXdcIixcIm1pY2VcIixcIm1pZGRsZVwiLFwibWlkbmlnaHRcIixcIm1pZ2h0XCIsXCJtaWdodHlcIixcIm1pbGVcIixcIm1pbGVyXCIsXCJtaWxrXCIsXCJtaWxrbWFuXCIsXCJtaWxsXCIsXCJtaWxsaW9uXCIsXCJtaW5kXCIsXCJtaW5lXCIsXCJtaW5lclwiLFwibWludFwiLFwibWludXRlXCIsXCJtaXJyb3JcIixcIm1pc2NoaWVmXCIsXCJtaXNzXCIsXCJtaXNzcGVsbFwiLFwibWlzdGFrZVwiLFwibWlzdHlcIixcIm1pdHRcIixcIm1pdHRlblwiLFwibWl4XCIsXCJtb21lbnRcIixcIm1vbmRheVwiLFwibW9uZXlcIixcIm1vbmtleVwiLFwibW9udGhcIixcIm1vb1wiLFwibW9vblwiLFwibW9vbmxpZ2h0XCIsXCJtb29zZVwiLFwibW9wXCIsXCJtb3JlXCIsXCJtb3JuaW5nXCIsXCJtb3Jyb3dcIixcIm1vc3NcIixcIm1vc3RcIixcIm1vc3RseVwiLFwibW90aGVyXCIsXCJtb3RvclwiLFwibW91bnRcIixcIm1vdW50YWluXCIsXCJtb3VzZVwiLFwibW91dGhcIixcIm1vdmVcIixcIm1vdmllXCIsXCJtb3ZpZXNcIixcIm1vdmluZ1wiLFwibW93XCIsXCJtci5cIixcIm1ycy5cIixcIm11Y2hcIixcIm11ZFwiLFwibXVkZHlcIixcIm11Z1wiLFwibXVsZVwiLFwibXVsdGlwbHlcIixcIm11cmRlclwiLFwibXVzaWNcIixcIm11c3RcIixcIm15XCIsXCJteXNlbGZcIixcIm5haWxcIixcIm5hbWVcIixcIm5hcFwiLFwibmFwa2luXCIsXCJuYXJyb3dcIixcIm5hc3R5XCIsXCJuYXVnaHR5XCIsXCJuYXZ5XCIsXCJuZWFyXCIsXCJuZWFyYnlcIixcIm5lYXJseVwiLFwibmVhdFwiLFwibmVja1wiLFwibmVja3RpZVwiLFwibmVlZFwiLFwibmVlZGxlXCIsXCJuZWVkbid0XCIsXCJuZWdyb1wiLFwibmVpZ2hib3JcIixcIm5laWdoYm9yaG9vZFwiLFwibmVpdGhlclwiLFwibmVydmVcIixcIm5lc3RcIixcIm5ldFwiLFwibmV2ZXJcIixcIm5ldmVybW9yZVwiLFwibmV3XCIsXCJuZXdzXCIsXCJuZXdzcGFwZXJcIixcIm5leHRcIixcIm5pYmJsZVwiLFwibmljZVwiLFwibmlja2VsXCIsXCJuaWdodFwiLFwibmlnaHRnb3duXCIsXCJuaW5lXCIsXCJuaW5ldGVlblwiLFwibmluZXR5XCIsXCJub1wiLFwibm9ib2R5XCIsXCJub2RcIixcIm5vaXNlXCIsXCJub2lzeVwiLFwibm9uZVwiLFwibm9vblwiLFwibm9yXCIsXCJub3J0aFwiLFwibm9ydGhlcm5cIixcIm5vc2VcIixcIm5vdFwiLFwibm90ZVwiLFwibm90aGluZ1wiLFwibm90aWNlXCIsXCJub3ZlbWJlclwiLFwibm93XCIsXCJub3doZXJlXCIsXCJudW1iZXJcIixcIm51cnNlXCIsXCJudXRcIixcIm8nY2xvY2tcIixcIm9ha1wiLFwib2FyXCIsXCJvYXRtZWFsXCIsXCJvYXRzXCIsXCJvYmV5XCIsXCJvY2VhblwiLFwib2N0b2JlclwiLFwib2RkXCIsXCJvZlwiLFwib2ZmXCIsXCJvZmZlclwiLFwib2ZmaWNlXCIsXCJvZmZpY2VyXCIsXCJvZnRlblwiLFwib2hcIixcIm9pbFwiLFwib2xkXCIsXCJvbGQtZmFzaGlvbmVkXCIsXCJvblwiLFwib25jZVwiLFwib25lXCIsXCJvbmlvblwiLFwib25seVwiLFwib253YXJkXCIsXCJvcGVuXCIsXCJvclwiLFwib3JhbmdlXCIsXCJvcmNoYXJkXCIsXCJvcmRlclwiLFwib3JlXCIsXCJvcmdhblwiLFwib3RoZXJcIixcIm90aGVyd2lzZVwiLFwib3VjaFwiLFwib3VnaHRcIixcIm91clwiLFwib3Vyc1wiLFwib3Vyc2VsdmVzXCIsXCJvdXRcIixcIm91dGRvb3JzXCIsXCJvdXRmaXRcIixcIm91dGxhd1wiLFwib3V0bGluZVwiLFwib3V0c2lkZVwiLFwib3V0d2FyZFwiLFwib3ZlblwiLFwib3ZlclwiLFwib3ZlcmFsbHNcIixcIm92ZXJjb2F0XCIsXCJvdmVyZWF0XCIsXCJvdmVyaGVhZFwiLFwib3ZlcmhlYXJcIixcIm92ZXJuaWdodFwiLFwib3ZlcnR1cm5cIixcIm93ZVwiLFwib3dpbmdcIixcIm93bFwiLFwib3duXCIsXCJvd25lclwiLFwib3hcIixcInBhXCIsXCJwYWNlXCIsXCJwYWNrXCIsXCJwYWNrYWdlXCIsXCJwYWRcIixcInBhZ2VcIixcInBhaWRcIixcInBhaWxcIixcInBhaW5cIixcInBhaW5mdWxcIixcInBhaW50XCIsXCJwYWludGVyXCIsXCJwYWludGluZ1wiLFwicGFpclwiLFwicGFsXCIsXCJwYWxhY2VcIixcInBhbGVcIixcInBhblwiLFwicGFuY2FrZVwiLFwicGFuZVwiLFwicGFuc3lcIixcInBhbnRzXCIsXCJwYXBhXCIsXCJwYXBlclwiLFwicGFyYWRlXCIsXCJwYXJkb25cIixcInBhcmVudFwiLFwicGFya1wiLFwicGFydFwiLFwicGFydGx5XCIsXCJwYXJ0bmVyXCIsXCJwYXJ0eVwiLFwicGFzc1wiLFwicGFzc2VuZ2VyXCIsXCJwYXN0XCIsXCJwYXN0ZVwiLFwicGFzdHVyZVwiLFwicGF0XCIsXCJwYXRjaFwiLFwicGF0aFwiLFwicGF0dGVyXCIsXCJwYXZlXCIsXCJwYXZlbWVudFwiLFwicGF3XCIsXCJwYXlcIixcInBheW1lbnRcIixcInBlYVwiLFwicGVhY2VcIixcInBlYWNlZnVsXCIsXCJwZWFjaFwiLFwicGVhY2hlc1wiLFwicGVha1wiLFwicGVhbnV0XCIsXCJwZWFyXCIsXCJwZWFybFwiLFwicGVhc1wiLFwicGVja1wiLFwicGVla1wiLFwicGVlbFwiLFwicGVlcFwiLFwicGVnXCIsXCJwZW5cIixcInBlbmNpbFwiLFwicGVubnlcIixcInBlb3BsZVwiLFwicGVwcGVyXCIsXCJwZXBwZXJtaW50XCIsXCJwZXJmdW1lXCIsXCJwZXJoYXBzXCIsXCJwZXJzb25cIixcInBldFwiLFwicGhvbmVcIixcInBpYW5vXCIsXCJwaWNrXCIsXCJwaWNrbGVcIixcInBpY25pY1wiLFwicGljdHVyZVwiLFwicGllXCIsXCJwaWVjZVwiLFwicGlnXCIsXCJwaWdlb25cIixcInBpZ2d5XCIsXCJwaWxlXCIsXCJwaWxsXCIsXCJwaWxsb3dcIixcInBpblwiLFwicGluZVwiLFwicGluZWFwcGxlXCIsXCJwaW5rXCIsXCJwaW50XCIsXCJwaXBlXCIsXCJwaXN0b2xcIixcInBpdFwiLFwicGl0Y2hcIixcInBpdGNoZXJcIixcInBpdHlcIixcInBsYWNlXCIsXCJwbGFpblwiLFwicGxhblwiLFwicGxhbmVcIixcInBsYW50XCIsXCJwbGF0ZVwiLFwicGxhdGZvcm1cIixcInBsYXR0ZXJcIixcInBsYXlcIixcInBsYXllclwiLFwicGxheWdyb3VuZFwiLFwicGxheWhvdXNlXCIsXCJwbGF5bWF0ZVwiLFwicGxheXRoaW5nXCIsXCJwbGVhc2FudFwiLFwicGxlYXNlXCIsXCJwbGVhc3VyZVwiLFwicGxlbnR5XCIsXCJwbG93XCIsXCJwbHVnXCIsXCJwbHVtXCIsXCJwb2NrZXRcIixcInBvY2tldGJvb2tcIixcInBvZW1cIixcInBvaW50XCIsXCJwb2lzb25cIixcInBva2VcIixcInBvbGVcIixcInBvbGljZVwiLFwicG9saWNlbWFuXCIsXCJwb2xpc2hcIixcInBvbGl0ZVwiLFwicG9uZFwiLFwicG9uaWVzXCIsXCJwb255XCIsXCJwb29sXCIsXCJwb29yXCIsXCJwb3BcIixcInBvcGNvcm5cIixcInBvcHBlZFwiLFwicG9yY2hcIixcInBvcmtcIixcInBvc3NpYmxlXCIsXCJwb3N0XCIsXCJwb3N0YWdlXCIsXCJwb3N0bWFuXCIsXCJwb3RcIixcInBvdGF0b1wiLFwicG90YXRvZXNcIixcInBvdW5kXCIsXCJwb3VyXCIsXCJwb3dkZXJcIixcInBvd2VyXCIsXCJwb3dlcmZ1bFwiLFwicHJhaXNlXCIsXCJwcmF5XCIsXCJwcmF5ZXJcIixcInByZXBhcmVcIixcInByZXNlbnRcIixcInByZXR0eVwiLFwicHJpY2VcIixcInByaWNrXCIsXCJwcmluY2VcIixcInByaW5jZXNzXCIsXCJwcmludFwiLFwicHJpc29uXCIsXCJwcml6ZVwiLFwicHJvbWlzZVwiLFwicHJvcGVyXCIsXCJwcm90ZWN0XCIsXCJwcm91ZFwiLFwicHJvdmVcIixcInBydW5lXCIsXCJwdWJsaWNcIixcInB1ZGRsZVwiLFwicHVmZlwiLFwicHVsbFwiLFwicHVtcFwiLFwicHVtcGtpblwiLFwicHVuY2hcIixcInB1bmlzaFwiLFwicHVwXCIsXCJwdXBpbFwiLFwicHVwcHlcIixcInB1cmVcIixcInB1cnBsZVwiLFwicHVyc2VcIixcInB1c2hcIixcInB1c3NcIixcInB1c3N5XCIsXCJwdXNzeWNhdFwiLFwicHV0XCIsXCJwdXR0aW5nXCIsXCJwdXp6bGVcIixcInF1YWNrXCIsXCJxdWFydFwiLFwicXVhcnRlclwiLFwicXVlZW5cIixcInF1ZWVyXCIsXCJxdWVzdGlvblwiLFwicXVpY2tcIixcInF1aWNrbHlcIixcInF1aWV0XCIsXCJxdWlsdFwiLFwicXVpdFwiLFwicXVpdGVcIixcInJhYmJpdFwiLFwicmFjZVwiLFwicmFja1wiLFwicmFkaW9cIixcInJhZGlzaFwiLFwicmFnXCIsXCJyYWlsXCIsXCJyYWlscm9hZFwiLFwicmFpbHdheVwiLFwicmFpblwiLFwicmFpbmJvd1wiLFwicmFpbnlcIixcInJhaXNlXCIsXCJyYWlzaW5cIixcInJha2VcIixcInJhbVwiLFwicmFuXCIsXCJyYW5jaFwiLFwicmFuZ1wiLFwicmFwXCIsXCJyYXBpZGx5XCIsXCJyYXRcIixcInJhdGVcIixcInJhdGhlclwiLFwicmF0dGxlXCIsXCJyYXdcIixcInJheVwiLFwicmVhY2hcIixcInJlYWRcIixcInJlYWRlclwiLFwicmVhZGluZ1wiLFwicmVhZHlcIixcInJlYWxcIixcInJlYWxseVwiLFwicmVhcFwiLFwicmVhclwiLFwicmVhc29uXCIsXCJyZWJ1aWxkXCIsXCJyZWNlaXZlXCIsXCJyZWNlc3NcIixcInJlY29yZFwiLFwicmVkXCIsXCJyZWRiaXJkXCIsXCJyZWRicmVhc3RcIixcInJlZnVzZVwiLFwicmVpbmRlZXJcIixcInJlam9pY2VcIixcInJlbWFpblwiLFwicmVtZW1iZXJcIixcInJlbWluZFwiLFwicmVtb3ZlXCIsXCJyZW50XCIsXCJyZXBhaXJcIixcInJlcGF5XCIsXCJyZXBlYXRcIixcInJlcG9ydFwiLFwicmVzdFwiLFwicmV0dXJuXCIsXCJyZXZpZXdcIixcInJld2FyZFwiLFwicmliXCIsXCJyaWJib25cIixcInJpY2VcIixcInJpY2hcIixcInJpZFwiLFwicmlkZGxlXCIsXCJyaWRlXCIsXCJyaWRlclwiLFwicmlkaW5nXCIsXCJyaWdodFwiLFwicmltXCIsXCJyaW5nXCIsXCJyaXBcIixcInJpcGVcIixcInJpc2VcIixcInJpc2luZ1wiLFwicml2ZXJcIixcInJvYWRcIixcInJvYWRzaWRlXCIsXCJyb2FyXCIsXCJyb2FzdFwiLFwicm9iXCIsXCJyb2JiZXJcIixcInJvYmVcIixcInJvYmluXCIsXCJyb2NrXCIsXCJyb2NrZXRcIixcInJvY2t5XCIsXCJyb2RlXCIsXCJyb2xsXCIsXCJyb2xsZXJcIixcInJvb2ZcIixcInJvb21cIixcInJvb3N0ZXJcIixcInJvb3RcIixcInJvcGVcIixcInJvc2VcIixcInJvc2VidWRcIixcInJvdFwiLFwicm90dGVuXCIsXCJyb3VnaFwiLFwicm91bmRcIixcInJvdXRlXCIsXCJyb3dcIixcInJvd2JvYXRcIixcInJveWFsXCIsXCJydWJcIixcInJ1YmJlZFwiLFwicnViYmVyXCIsXCJydWJiaXNoXCIsXCJydWdcIixcInJ1bGVcIixcInJ1bGVyXCIsXCJydW1ibGVcIixcInJ1blwiLFwicnVuZ1wiLFwicnVubmVyXCIsXCJydW5uaW5nXCIsXCJydXNoXCIsXCJydXN0XCIsXCJydXN0eVwiLFwicnllXCIsXCJzYWNrXCIsXCJzYWRcIixcInNhZGRsZVwiLFwic2FkbmVzc1wiLFwic2FmZVwiLFwic2FmZXR5XCIsXCJzYWlkXCIsXCJzYWlsXCIsXCJzYWlsYm9hdFwiLFwic2FpbG9yXCIsXCJzYWludFwiLFwic2FsYWRcIixcInNhbGVcIixcInNhbHRcIixcInNhbWVcIixcInNhbmRcIixcInNhbmR3aWNoXCIsXCJzYW5keVwiLFwic2FuZ1wiLFwic2Fua1wiLFwic2FwXCIsXCJzYXNoXCIsXCJzYXRcIixcInNhdGluXCIsXCJzYXRpc2ZhY3RvcnlcIixcInNhdHVyZGF5XCIsXCJzYXVzYWdlXCIsXCJzYXZhZ2VcIixcInNhdmVcIixcInNhdmluZ3NcIixcInNhd1wiLFwic2F5XCIsXCJzY2FiXCIsXCJzY2FsZXNcIixcInNjYXJlXCIsXCJzY2FyZlwiLFwic2Nob29sXCIsXCJzY2hvb2xib3lcIixcInNjaG9vbGhvdXNlXCIsXCJzY2hvb2xtYXN0ZXJcIixcInNjaG9vbHJvb21cIixcInNjb3JjaFwiLFwic2NvcmVcIixcInNjcmFwXCIsXCJzY3JhcGVcIixcInNjcmF0Y2hcIixcInNjcmVhbVwiLFwic2NyZWVuXCIsXCJzY3Jld1wiLFwic2NydWJcIixcInNlYVwiLFwic2VhbFwiLFwic2VhbVwiLFwic2VhcmNoXCIsXCJzZWFzb25cIixcInNlYXRcIixcInNlY29uZFwiLFwic2VjcmV0XCIsXCJzZWVcIixcInNlZWRcIixcInNlZWluZ1wiLFwic2Vla1wiLFwic2VlbVwiLFwic2VlblwiLFwic2Vlc2F3XCIsXCJzZWxlY3RcIixcInNlbGZcIixcInNlbGZpc2hcIixcInNlbGxcIixcInNlbmRcIixcInNlbnNlXCIsXCJzZW50XCIsXCJzZW50ZW5jZVwiLFwic2VwYXJhdGVcIixcInNlcHRlbWJlclwiLFwic2VydmFudFwiLFwic2VydmVcIixcInNlcnZpY2VcIixcInNldFwiLFwic2V0dGluZ1wiLFwic2V0dGxlXCIsXCJzZXR0bGVtZW50XCIsXCJzZXZlblwiLFwic2V2ZW50ZWVuXCIsXCJzZXZlbnRoXCIsXCJzZXZlbnR5XCIsXCJzZXZlcmFsXCIsXCJzZXdcIixcInNoYWRlXCIsXCJzaGFkb3dcIixcInNoYWR5XCIsXCJzaGFrZVwiLFwic2hha2VyXCIsXCJzaGFraW5nXCIsXCJzaGFsbFwiLFwic2hhbWVcIixcInNoYW4ndFwiLFwic2hhcGVcIixcInNoYXJlXCIsXCJzaGFycFwiLFwic2hhdmVcIixcInNoZVwiLFwic2hlJ2RcIixcInNoZSdsbFwiLFwic2hlJ3NcIixcInNoZWFyXCIsXCJzaGVhcnNcIixcInNoZWRcIixcInNoZWVwXCIsXCJzaGVldFwiLFwic2hlbGZcIixcInNoZWxsXCIsXCJzaGVwaGVyZFwiLFwic2hpbmVcIixcInNoaW5pbmdcIixcInNoaW55XCIsXCJzaGlwXCIsXCJzaGlydFwiLFwic2hvY2tcIixcInNob2VcIixcInNob2VtYWtlclwiLFwic2hvbmVcIixcInNob29rXCIsXCJzaG9vdFwiLFwic2hvcFwiLFwic2hvcHBpbmdcIixcInNob3JlXCIsXCJzaG9ydFwiLFwic2hvdFwiLFwic2hvdWxkXCIsXCJzaG91bGRlclwiLFwic2hvdWxkbid0XCIsXCJzaG91dFwiLFwic2hvdmVsXCIsXCJzaG93XCIsXCJzaG93ZXJcIixcInNodXRcIixcInNoeVwiLFwic2lja1wiLFwic2lja25lc3NcIixcInNpZGVcIixcInNpZGV3YWxrXCIsXCJzaWRld2F5c1wiLFwic2lnaFwiLFwic2lnaHRcIixcInNpZ25cIixcInNpbGVuY2VcIixcInNpbGVudFwiLFwic2lsa1wiLFwic2lsbFwiLFwic2lsbHlcIixcInNpbHZlclwiLFwic2ltcGxlXCIsXCJzaW5cIixcInNpbmNlXCIsXCJzaW5nXCIsXCJzaW5nZXJcIixcInNpbmdsZVwiLFwic2lua1wiLFwic2lwXCIsXCJzaXJcIixcInNpc1wiLFwic2lzc3lcIixcInNpc3RlclwiLFwic2l0XCIsXCJzaXR0aW5nXCIsXCJzaXhcIixcInNpeHRlZW5cIixcInNpeHRoXCIsXCJzaXh0eVwiLFwic2l6ZVwiLFwic2thdGVcIixcInNrYXRlclwiLFwic2tpXCIsXCJza2luXCIsXCJza2lwXCIsXCJza2lydFwiLFwic2t5XCIsXCJzbGFtXCIsXCJzbGFwXCIsXCJzbGF0ZVwiLFwic2xhdmVcIixcInNsZWRcIixcInNsZWVwXCIsXCJzbGVlcHlcIixcInNsZWV2ZVwiLFwic2xlaWdoXCIsXCJzbGVwdFwiLFwic2xpY2VcIixcInNsaWRcIixcInNsaWRlXCIsXCJzbGluZ1wiLFwic2xpcFwiLFwic2xpcHBlZFwiLFwic2xpcHBlclwiLFwic2xpcHBlcnlcIixcInNsaXRcIixcInNsb3dcIixcInNsb3dseVwiLFwic2x5XCIsXCJzbWFja1wiLFwic21hbGxcIixcInNtYXJ0XCIsXCJzbWVsbFwiLFwic21pbGVcIixcInNtb2tlXCIsXCJzbW9vdGhcIixcInNuYWlsXCIsXCJzbmFrZVwiLFwic25hcFwiLFwic25hcHBpbmdcIixcInNuZWV6ZVwiLFwic25vd1wiLFwic25vd2JhbGxcIixcInNub3dmbGFrZVwiLFwic25vd3lcIixcInNudWZmXCIsXCJzbnVnXCIsXCJzb1wiLFwic29ha1wiLFwic29hcFwiLFwic29iXCIsXCJzb2Nrc1wiLFwic29kXCIsXCJzb2RhXCIsXCJzb2ZhXCIsXCJzb2Z0XCIsXCJzb2lsXCIsXCJzb2xkXCIsXCJzb2xkaWVyXCIsXCJzb2xlXCIsXCJzb21lXCIsXCJzb21lYm9keVwiLFwic29tZWhvd1wiLFwic29tZW9uZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZVwiLFwic29tZXRpbWVzXCIsXCJzb21ld2hlcmVcIixcInNvblwiLFwic29uZ1wiLFwic29vblwiLFwic29yZVwiLFwic29ycm93XCIsXCJzb3JyeVwiLFwic29ydFwiLFwic291bFwiLFwic291bmRcIixcInNvdXBcIixcInNvdXJcIixcInNvdXRoXCIsXCJzb3V0aGVyblwiLFwic3BhY2VcIixcInNwYWRlXCIsXCJzcGFua1wiLFwic3BhcnJvd1wiLFwic3BlYWtcIixcInNwZWFrZXJcIixcInNwZWFyXCIsXCJzcGVlY2hcIixcInNwZWVkXCIsXCJzcGVsbFwiLFwic3BlbGxpbmdcIixcInNwZW5kXCIsXCJzcGVudFwiLFwic3BpZGVyXCIsXCJzcGlrZVwiLFwic3BpbGxcIixcInNwaW5cIixcInNwaW5hY2hcIixcInNwaXJpdFwiLFwic3BpdFwiLFwic3BsYXNoXCIsXCJzcG9pbFwiLFwic3Bva2VcIixcInNwb29rXCIsXCJzcG9vblwiLFwic3BvcnRcIixcInNwb3RcIixcInNwcmVhZFwiLFwic3ByaW5nXCIsXCJzcHJpbmd0aW1lXCIsXCJzcHJpbmtsZVwiLFwic3F1YXJlXCIsXCJzcXVhc2hcIixcInNxdWVha1wiLFwic3F1ZWV6ZVwiLFwic3F1aXJyZWxcIixcInN0YWJsZVwiLFwic3RhY2tcIixcInN0YWdlXCIsXCJzdGFpclwiLFwic3RhbGxcIixcInN0YW1wXCIsXCJzdGFuZFwiLFwic3RhclwiLFwic3RhcmVcIixcInN0YXJ0XCIsXCJzdGFydmVcIixcInN0YXRlXCIsXCJzdGF0ZXNcIixcInN0YXRpb25cIixcInN0YXlcIixcInN0ZWFrXCIsXCJzdGVhbFwiLFwic3RlYW1cIixcInN0ZWFtYm9hdFwiLFwic3RlYW1lclwiLFwic3RlZWxcIixcInN0ZWVwXCIsXCJzdGVlcGxlXCIsXCJzdGVlclwiLFwic3RlbVwiLFwic3RlcFwiLFwic3RlcHBpbmdcIixcInN0aWNrXCIsXCJzdGlja3lcIixcInN0aWZmXCIsXCJzdGlsbFwiLFwic3RpbGxuZXNzXCIsXCJzdGluZ1wiLFwic3RpclwiLFwic3RpdGNoXCIsXCJzdG9ja1wiLFwic3RvY2tpbmdcIixcInN0b2xlXCIsXCJzdG9uZVwiLFwic3Rvb2RcIixcInN0b29sXCIsXCJzdG9vcFwiLFwic3RvcFwiLFwic3RvcHBlZFwiLFwic3RvcHBpbmdcIixcInN0b3JlXCIsXCJzdG9yaWVzXCIsXCJzdG9ya1wiLFwic3Rvcm1cIixcInN0b3JteVwiLFwic3RvcnlcIixcInN0b3ZlXCIsXCJzdHJhaWdodFwiLFwic3RyYW5nZVwiLFwic3RyYW5nZXJcIixcInN0cmFwXCIsXCJzdHJhd1wiLFwic3RyYXdiZXJyeVwiLFwic3RyZWFtXCIsXCJzdHJlZXRcIixcInN0cmV0Y2hcIixcInN0cmluZ1wiLFwic3RyaXBcIixcInN0cmlwZXNcIixcInN0cm9uZ1wiLFwic3R1Y2tcIixcInN0dWR5XCIsXCJzdHVmZlwiLFwic3R1bXBcIixcInN0dW5nXCIsXCJzdWJqZWN0XCIsXCJzdWNoXCIsXCJzdWNrXCIsXCJzdWRkZW5cIixcInN1ZmZlclwiLFwic3VnYXJcIixcInN1aXRcIixcInN1bVwiLFwic3VtbWVyXCIsXCJzdW5cIixcInN1bmRheVwiLFwic3VuZmxvd2VyXCIsXCJzdW5nXCIsXCJzdW5rXCIsXCJzdW5saWdodFwiLFwic3VubnlcIixcInN1bnJpc2VcIixcInN1bnNldFwiLFwic3Vuc2hpbmVcIixcInN1cHBlclwiLFwic3VwcG9zZVwiLFwic3VyZVwiLFwic3VyZWx5XCIsXCJzdXJmYWNlXCIsXCJzdXJwcmlzZVwiLFwic3dhbGxvd1wiLFwic3dhbVwiLFwic3dhbXBcIixcInN3YW5cIixcInN3YXRcIixcInN3ZWFyXCIsXCJzd2VhdFwiLFwic3dlYXRlclwiLFwic3dlZXBcIixcInN3ZWV0XCIsXCJzd2VldGhlYXJ0XCIsXCJzd2VldG5lc3NcIixcInN3ZWxsXCIsXCJzd2VwdFwiLFwic3dpZnRcIixcInN3aW1cIixcInN3aW1taW5nXCIsXCJzd2luZ1wiLFwic3dpdGNoXCIsXCJzd29yZFwiLFwic3dvcmVcIixcInRhYmxlXCIsXCJ0YWJsZWNsb3RoXCIsXCJ0YWJsZXNwb29uXCIsXCJ0YWJsZXRcIixcInRhY2tcIixcInRhZ1wiLFwidGFpbFwiLFwidGFpbG9yXCIsXCJ0YWtlXCIsXCJ0YWtlblwiLFwidGFraW5nXCIsXCJ0YWxlXCIsXCJ0YWxrXCIsXCJ0YWxrZXJcIixcInRhbGxcIixcInRhbWVcIixcInRhblwiLFwidGFua1wiLFwidGFwXCIsXCJ0YXBlXCIsXCJ0YXJcIixcInRhcmR5XCIsXCJ0YXNrXCIsXCJ0YXN0ZVwiLFwidGF1Z2h0XCIsXCJ0YXhcIixcInRlYVwiLFwidGVhY2hcIixcInRlYWNoZXJcIixcInRlYW1cIixcInRlYXJcIixcInRlYXNlXCIsXCJ0ZWFzcG9vblwiLFwidGVldGhcIixcInRlbGVwaG9uZVwiLFwidGVsbFwiLFwidGVtcGVyXCIsXCJ0ZW5cIixcInRlbm5pc1wiLFwidGVudFwiLFwidGVybVwiLFwidGVycmlibGVcIixcInRlc3RcIixcInRoYW5cIixcInRoYW5rXCIsXCJ0aGFua2Z1bFwiLFwidGhhbmtzXCIsXCJ0aGFua3NnaXZpbmdcIixcInRoYXRcIixcInRoYXQnc1wiLFwidGhlXCIsXCJ0aGVhdGVyXCIsXCJ0aGVlXCIsXCJ0aGVpclwiLFwidGhlbVwiLFwidGhlblwiLFwidGhlcmVcIixcInRoZXNlXCIsXCJ0aGV5XCIsXCJ0aGV5J2RcIixcInRoZXknbGxcIixcInRoZXkncmVcIixcInRoZXkndmVcIixcInRoaWNrXCIsXCJ0aGllZlwiLFwidGhpbWJsZVwiLFwidGhpblwiLFwidGhpbmdcIixcInRoaW5rXCIsXCJ0aGlyZFwiLFwidGhpcnN0eVwiLFwidGhpcnRlZW5cIixcInRoaXJ0eVwiLFwidGhpc1wiLFwidGhvcm5cIixcInRob3NlXCIsXCJ0aG91Z2hcIixcInRob3VnaHRcIixcInRob3VzYW5kXCIsXCJ0aHJlYWRcIixcInRocmVlXCIsXCJ0aHJld1wiLFwidGhyb2F0XCIsXCJ0aHJvbmVcIixcInRocm91Z2hcIixcInRocm93XCIsXCJ0aHJvd25cIixcInRodW1iXCIsXCJ0aHVuZGVyXCIsXCJ0aHVyc2RheVwiLFwidGh5XCIsXCJ0aWNrXCIsXCJ0aWNrZXRcIixcInRpY2tsZVwiLFwidGllXCIsXCJ0aWdlclwiLFwidGlnaHRcIixcInRpbGxcIixcInRpbWVcIixcInRpblwiLFwidGlua2xlXCIsXCJ0aW55XCIsXCJ0aXBcIixcInRpcHRvZVwiLFwidGlyZVwiLFwidGlyZWRcIixcInRpdGxlXCIsXCJ0b1wiLFwidG9hZFwiLFwidG9hZHN0b29sXCIsXCJ0b2FzdFwiLFwidG9iYWNjb1wiLFwidG9kYXlcIixcInRvZVwiLFwidG9nZXRoZXJcIixcInRvaWxldFwiLFwidG9sZFwiLFwidG9tYXRvXCIsXCJ0b21vcnJvd1wiLFwidG9uXCIsXCJ0b25lXCIsXCJ0b25ndWVcIixcInRvbmlnaHRcIixcInRvb1wiLFwidG9va1wiLFwidG9vbFwiLFwidG9vdFwiLFwidG9vdGhcIixcInRvb3RoYnJ1c2hcIixcInRvb3RocGlja1wiLFwidG9wXCIsXCJ0b3JlXCIsXCJ0b3JuXCIsXCJ0b3NzXCIsXCJ0b3VjaFwiLFwidG93XCIsXCJ0b3dhcmRcIixcInRvd2FyZHNcIixcInRvd2VsXCIsXCJ0b3dlclwiLFwidG93blwiLFwidG95XCIsXCJ0cmFjZVwiLFwidHJhY2tcIixcInRyYWRlXCIsXCJ0cmFpblwiLFwidHJhbXBcIixcInRyYXBcIixcInRyYXlcIixcInRyZWFzdXJlXCIsXCJ0cmVhdFwiLFwidHJlZVwiLFwidHJpY2tcIixcInRyaWN5Y2xlXCIsXCJ0cmllZFwiLFwidHJpbVwiLFwidHJpcFwiLFwidHJvbGxleVwiLFwidHJvdWJsZVwiLFwidHJ1Y2tcIixcInRydWVcIixcInRydWx5XCIsXCJ0cnVua1wiLFwidHJ1c3RcIixcInRydXRoXCIsXCJ0cnlcIixcInR1YlwiLFwidHVlc2RheVwiLFwidHVnXCIsXCJ0dWxpcFwiLFwidHVtYmxlXCIsXCJ0dW5lXCIsXCJ0dW5uZWxcIixcInR1cmtleVwiLFwidHVyblwiLFwidHVydGxlXCIsXCJ0d2VsdmVcIixcInR3ZW50eVwiLFwidHdpY2VcIixcInR3aWdcIixcInR3aW5cIixcInR3b1wiLFwidWdseVwiLFwidW1icmVsbGFcIixcInVuY2xlXCIsXCJ1bmRlclwiLFwidW5kZXJzdGFuZFwiLFwidW5kZXJ3ZWFyXCIsXCJ1bmRyZXNzXCIsXCJ1bmZhaXJcIixcInVuZmluaXNoZWRcIixcInVuZm9sZFwiLFwidW5mcmllbmRseVwiLFwidW5oYXBweVwiLFwidW5odXJ0XCIsXCJ1bmlmb3JtXCIsXCJ1bml0ZWRcIixcInVua2luZFwiLFwidW5rbm93blwiLFwidW5sZXNzXCIsXCJ1bnBsZWFzYW50XCIsXCJ1bnRpbFwiLFwidW53aWxsaW5nXCIsXCJ1cFwiLFwidXBvblwiLFwidXBwZXJcIixcInVwc2V0XCIsXCJ1cHNpZGVcIixcInVwc3RhaXJzXCIsXCJ1cHRvd25cIixcInVwd2FyZFwiLFwidXNcIixcInVzZVwiLFwidXNlZFwiLFwidXNlZnVsXCIsXCJ2YWxlbnRpbmVcIixcInZhbGxleVwiLFwidmFsdWFibGVcIixcInZhbHVlXCIsXCJ2YXNlXCIsXCJ2ZWdldGFibGVcIixcInZlbHZldFwiLFwidmVyeVwiLFwidmVzc2VsXCIsXCJ2aWN0b3J5XCIsXCJ2aWV3XCIsXCJ2aWxsYWdlXCIsXCJ2aW5lXCIsXCJ2aW9sZXRcIixcInZpc2l0XCIsXCJ2aXNpdG9yXCIsXCJ2b2ljZVwiLFwidm90ZVwiLFwid2FnXCIsXCJ3YWdvblwiLFwid2Fpc3RcIixcIndhaXRcIixcIndha2VcIixcIndha2VuXCIsXCJ3YWxrXCIsXCJ3YWxsXCIsXCJ3YWxudXRcIixcIndhbnRcIixcIndhclwiLFwid2FybVwiLFwid2FyblwiLFwid2FzXCIsXCJ3YXNoXCIsXCJ3YXNoZXJcIixcIndhc2h0dWJcIixcIndhc24ndFwiLFwid2FzdGVcIixcIndhdGNoXCIsXCJ3YXRjaG1hblwiLFwid2F0ZXJcIixcIndhdGVybWVsb25cIixcIndhdGVycHJvb2ZcIixcIndhdmVcIixcIndheFwiLFwid2F5XCIsXCJ3YXlzaWRlXCIsXCJ3ZVwiLFwid2UnZFwiLFwid2UnbGxcIixcIndlJ3JlXCIsXCJ3ZSd2ZVwiLFwid2Vha1wiLFwid2Vha2VuXCIsXCJ3ZWFrbmVzc1wiLFwid2VhbHRoXCIsXCJ3ZWFwb25cIixcIndlYXJcIixcIndlYXJ5XCIsXCJ3ZWF0aGVyXCIsXCJ3ZWF2ZVwiLFwid2ViXCIsXCJ3ZWRkaW5nXCIsXCJ3ZWRuZXNkYXlcIixcIndlZVwiLFwid2VlZFwiLFwid2Vla1wiLFwid2VlcFwiLFwid2VpZ2hcIixcIndlbGNvbWVcIixcIndlbGxcIixcIndlbnRcIixcIndlcmVcIixcIndlc3RcIixcIndlc3Rlcm5cIixcIndldFwiLFwid2hhbGVcIixcIndoYXRcIixcIndoYXQnc1wiLFwid2hlYXRcIixcIndoZWVsXCIsXCJ3aGVuXCIsXCJ3aGVuZXZlclwiLFwid2hlcmVcIixcIndoaWNoXCIsXCJ3aGlsZVwiLFwid2hpcFwiLFwid2hpcHBlZFwiLFwid2hpcmxcIixcIndoaXNrZXlcIixcIndoaXNreVwiLFwid2hpc3BlclwiLFwid2hpc3RsZVwiLFwid2hpdGVcIixcIndob1wiLFwid2hvJ2RcIixcIndobydsbFwiLFwid2hvJ3NcIixcIndob2xlXCIsXCJ3aG9tXCIsXCJ3aG9zZVwiLFwid2h5XCIsXCJ3aWNrZWRcIixcIndpZGVcIixcIndpZmVcIixcIndpZ2dsZVwiLFwid2lsZFwiLFwid2lsZGNhdFwiLFwid2lsbFwiLFwid2lsbGluZ1wiLFwid2lsbG93XCIsXCJ3aW5cIixcIndpbmRcIixcIndpbmRtaWxsXCIsXCJ3aW5kb3dcIixcIndpbmR5XCIsXCJ3aW5lXCIsXCJ3aW5nXCIsXCJ3aW5rXCIsXCJ3aW5uZXJcIixcIndpbnRlclwiLFwid2lwZVwiLFwid2lyZVwiLFwid2lzZVwiLFwid2lzaFwiLFwid2l0XCIsXCJ3aXRjaFwiLFwid2l0aFwiLFwid2l0aG91dFwiLFwid29rZVwiLFwid29sZlwiLFwid29tYW5cIixcIndvbWVuXCIsXCJ3b25cIixcIndvbid0XCIsXCJ3b25kZXJcIixcIndvbmRlcmZ1bFwiLFwid29vZFwiLFwid29vZGVuXCIsXCJ3b29kcGVja2VyXCIsXCJ3b29kc1wiLFwid29vbFwiLFwid29vbGVuXCIsXCJ3b3JkXCIsXCJ3b3JlXCIsXCJ3b3JrXCIsXCJ3b3JrZXJcIixcIndvcmttYW5cIixcIndvcmxkXCIsXCJ3b3JtXCIsXCJ3b3JuXCIsXCJ3b3JyeVwiLFwid29yc2VcIixcIndvcnN0XCIsXCJ3b3J0aFwiLFwid291bGRcIixcIndvdWxkbid0XCIsXCJ3b3VuZFwiLFwid292ZVwiLFwid3JhcFwiLFwid3JhcHBlZFwiLFwid3JlY2tcIixcIndyZW5cIixcIndyaW5nXCIsXCJ3cml0ZVwiLFwid3JpdGluZ1wiLFwid3JpdHRlblwiLFwid3JvbmdcIixcIndyb3RlXCIsXCJ3cnVuZ1wiLFwieWFyZFwiLFwieWFyblwiLFwieWVhclwiLFwieWVsbFwiLFwieWVsbG93XCIsXCJ5ZXNcIixcInllc3RlcmRheVwiLFwieWV0XCIsXCJ5b2xrXCIsXCJ5b25kZXJcIixcInlvdVwiLFwieW91J2RcIixcInlvdSdsbFwiLFwieW91J3JlXCIsXCJ5b3UndmVcIixcInlvdW5nXCIsXCJ5b3VuZ3N0ZXJcIixcInlvdXJcIixcInlvdXJzXCIsXCJ5b3Vyc2VsZlwiLFwieW91cnNlbHZlc1wiLFwieW91dGhcIl0scGU9ezQ6WzAsNF0sNTpbNSw2XSw2Ols3LDhdLDc6WzksMTBdLDg6WzExLDEyXSw5OlsxMywxNV0sMTA6WzE2LE51bWJlci5QT1NJVElWRV9JTkZJTklUWV0sTmFOOltOdW1iZXIuTmFOLE51bWJlci5OYU5dfTtmdW5jdGlvbiBoZShuKXt2YXIgZSxhO3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQ/KGE9LjE1NzkqKGU9KG4uZGlmZmljdWx0V29yZHx8MCkvbi53b3JkKSoxMDArLjA0OTYqbi53b3JkL24uc2VudGVuY2UsZT4uMDUmJihhKz0zLjYzNjUpLGEpOk51bWJlci5OYU59ZnVuY3Rpb24gZ2Uobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5zeWxsYWJsZT8yMDYuODM1LW4ud29yZC9uLnNlbnRlbmNlKjEuMDE1LW4uc3lsbGFibGUvbi53b3JkKjg0LjY6TnVtYmVyLk5hTn1mdW5jdGlvbiB5ZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPy40KihuLndvcmQvbi5zZW50ZW5jZSsobi5jb21wbGV4UG9seXNpbGxhYmljV29yZHx8MCkvbi53b3JkKjEwMCk6TnVtYmVyLk5hTn1mdW5jdGlvbiBiZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZT8zLjEyOTErMS4wNDMqTWF0aC5zcXJ0KChuLnBvbHlzaWxsYWJpY1dvcmR8fDApKigzMC9uLnNlbnRlbmNlKSk6TnVtYmVyLk5hTn12YXIgRGU9W1wiYVwiLFwiYWJsZVwiLFwiYWJvdXRcIixcImFib3ZlXCIsXCJhY3Jvc3NcIixcImFjdFwiLFwiYWRkXCIsXCJhZnJhaWRcIixcImFmdGVyXCIsXCJhZnRlcm5vb25cIixcImFnYWluXCIsXCJhZ2FpbnN0XCIsXCJhZ29cIixcImFpclwiLFwiYWlycGxhbmVcIixcImFsYXJtXCIsXCJhbGxcIixcImFsbW9zdFwiLFwiYWxvbmVcIixcImFsb25nXCIsXCJhbHJlYWR5XCIsXCJhbHNvXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbW9uZ1wiLFwiYW5cIixcImFuZFwiLFwiYW5ncnlcIixcImFuaW1hbFwiLFwiYW5vdGhlclwiLFwiYW5zd2VyXCIsXCJhbnlcIixcImFueW9uZVwiLFwiYXBwZWFyXCIsXCJhcHBsZVwiLFwiYXJlXCIsXCJhcm1cIixcImFyb3VuZFwiLFwiYXJyb3dcIixcImFzXCIsXCJhc2tcIixcImFzbGVlcFwiLFwiYXRcIixcImF0ZVwiLFwiYXR0ZW50aW9uXCIsXCJhdW50XCIsXCJhd2FrZVwiLFwiYXdheVwiLFwiYlwiLFwiYmFieVwiLFwiYmFja1wiLFwiYmFkXCIsXCJiYWdcIixcImJhbGxcIixcImJhbGxvb25cIixcImJhbmdcIixcImJhbmtcIixcImJhcmtcIixcImJhcm5cIixcImJhc2tldFwiLFwiYmVcIixcImJlYW5cIixcImJlYXJcIixcImJlYXRcIixcImJlYXV0aWZ1bFwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlZFwiLFwiYmVlXCIsXCJiZWVuXCIsXCJiZWZvcmVcIixcImJlZ2FuXCIsXCJiZWdpblwiLFwiYmVoaW5kXCIsXCJiZWxpZXZlXCIsXCJiZWxsXCIsXCJiZWxvbmdcIixcImJlbmRcIixcImJlbnRcIixcImJlc2lkZVwiLFwiYmVzdFwiLFwiYmV0dGVyXCIsXCJiZXR3ZWVuXCIsXCJiaWdcIixcImJpcmRcIixcImJpcnRoZGF5XCIsXCJiaXRcIixcImJpdGVcIixcImJsYWNrXCIsXCJibGFua2V0XCIsXCJibGV3XCIsXCJibG9ja1wiLFwiYmxvd1wiLFwiYmx1ZVwiLFwiYm9hcmRcIixcImJvYXRcIixcImJvb2tcIixcImJvb3RcIixcImJvcm5cIixcImJvcnJvd1wiLFwiYm90aFwiLFwiYm90aGVyXCIsXCJib3R0bGVcIixcImJvdHRvbVwiLFwiYm91Z2h0XCIsXCJib3dcIixcImJveFwiLFwiYm95XCIsXCJicmFuY2hcIixcImJyYXZlXCIsXCJicmVhZFwiLFwiYnJlYWtcIixcImJyZWFrZmFzdFwiLFwiYnJlYXRoXCIsXCJicmlja1wiLFwiYnJpZGdlXCIsXCJicmlnaHRcIixcImJyaW5nXCIsXCJicm9rZVwiLFwiYnJva2VuXCIsXCJicm90aGVyXCIsXCJicm91Z2h0XCIsXCJicm93blwiLFwiYnJ1c2hcIixcImJ1aWxkXCIsXCJidW1wXCIsXCJidXJuXCIsXCJidXNcIixcImJ1c3lcIixcImJ1dFwiLFwiYnV0dGVyXCIsXCJidXR0b25cIixcImJ1eVwiLFwiYnlcIixcImNcIixcImNhYmluXCIsXCJjYWdlXCIsXCJjYWtlXCIsXCJjYWxsXCIsXCJjYW1lXCIsXCJjYW1wXCIsXCJjYW5cIixcImNhbid0XCIsXCJjYW5kbGVcIixcImNhbmR5XCIsXCJjYXBcIixcImNhcHRhaW5cIixcImNhclwiLFwiY2FyZFwiLFwiY2FyZVwiLFwiY2FyZWZ1bFwiLFwiY2Fycm90XCIsXCJjYXJyeVwiLFwiY2FzZVwiLFwiY2FzdGxlXCIsXCJjYXRcIixcImNhdGNoXCIsXCJjYXR0bGVcIixcImNhdWdodFwiLFwiY2F1c2VcIixcImNlbnRcIixcImNlcnRhaW5cIixcImNoYWlyXCIsXCJjaGFuY2VcIixcImNoYW5nZVwiLFwiY2hhc2VcIixcImNoaWNrZW5cIixcImNoaWVmXCIsXCJjaGlsZFwiLFwiY2hpbGRyZW5cIixcImNodXJjaFwiLFwiY2lyY2xlXCIsXCJjaXJjdXNcIixcImNpdHlcIixcImNsYXBcIixcImNsZWFuXCIsXCJjbGV2ZXJcIixcImNsaWZmXCIsXCJjbGltYlwiLFwiY2xvY2tcIixcImNsb3NlXCIsXCJjbG90aFwiLFwiY2xvdGhlc1wiLFwiY2xvd25cIixcImNvYXRcIixcImNvbGRcIixcImNvbG9yXCIsXCJjb21lXCIsXCJjb21mb3J0YWJsZVwiLFwiY29tcGFueVwiLFwiY29udGVzdFwiLFwiY29udGludWVcIixcImNvb2tcIixcImNvb2xcIixcImNvcm5lclwiLFwiY291bGRcIixcImNvdW50XCIsXCJjb3VudHJ5XCIsXCJjb3Vyc2VcIixcImNvdmVyXCIsXCJjb3dcIixcImNyYXdsXCIsXCJjcmVhbVwiLFwiY3J5XCIsXCJjdXBcIixcImN1cnRhaW5cIixcImN1dFwiLFwiZFwiLFwiZGFkXCIsXCJkYW5jZVwiLFwiZGFuZ2VyXCIsXCJkYW5nZXJvdXNcIixcImRhcmtcIixcImRhc2hcIixcImRhdWdodGVyXCIsXCJkYXlcIixcImRlYXJcIixcImRlY2lkZVwiLFwiZGVlcFwiLFwiZGVza1wiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZVwiLFwiZGlmZmVyZW50XCIsXCJkaWdcIixcImRpbm5lclwiLFwiZGlyZWN0aW9uXCIsXCJkaXNhcHBlYXJcIixcImRpc2FwcG9pbnRcIixcImRpc2NvdmVyXCIsXCJkaXN0YW5jZVwiLFwiZG9cIixcImRvY3RvclwiLFwiZG9lc1wiLFwiZG9nXCIsXCJkb2xsYXJcIixcImRvbid0XCIsXCJkb25lXCIsXCJkb29yXCIsXCJkb3duXCIsXCJkcmFnb25cIixcImRyZWFtXCIsXCJkcmVzc1wiLFwiZHJpbmtcIixcImRyaXZlXCIsXCJkcm9wXCIsXCJkcm92ZVwiLFwiZHJ5XCIsXCJkdWNrXCIsXCJkdXJpbmdcIixcImR1c3RcIixcImVcIixcImVhY2hcIixcImVhZ2VyXCIsXCJlYXJcIixcImVhcmx5XCIsXCJlYXJuXCIsXCJlYXJ0aFwiLFwiZWFzeVwiLFwiZWF0XCIsXCJlZGdlXCIsXCJlZ2dcIixcImVpZ2h0XCIsXCJlaWdodGVlblwiLFwiZWl0aGVyXCIsXCJlbGVwaGFudFwiLFwiZWxzZVwiLFwiZW1wdHlcIixcImVuZFwiLFwiZW5lbXlcIixcImVub3VnaFwiLFwiZW50ZXJcIixcImV2ZW5cIixcImV2ZXJcIixcImV2ZXJ5XCIsXCJldmVyeXRoaW5nXCIsXCJleGFjdFwiLFwiZXhjZXB0XCIsXCJleGNpdGVcIixcImV4Y2xhaW1cIixcImV4cGxhaW5cIixcImV5ZVwiLFwiZmFjZVwiLFwiZmFjdFwiLFwiZmFpclwiLFwiZmFsbFwiLFwiZmFtaWx5XCIsXCJmYXJcIixcImZhcm1cIixcImZhcm1lclwiLFwiZmFydGhlclwiLFwiZmFzdFwiLFwiZmF0XCIsXCJmYXRoZXJcIixcImZlYXRoZXJcIixcImZlZWRcIixcImZlZWxcIixcImZlZXRcIixcImZlbGxcIixcImZlbGxvd1wiLFwiZmVsdFwiLFwiZmVuY2VcIixcImZld1wiLFwiZmllbGRcIixcImZpZXJjZVwiLFwiZmlnaHRcIixcImZpZ3VyZVwiLFwiZmlsbFwiLFwiZmluYWxcIixcImZpbmRcIixcImZpbmVcIixcImZpbmdlclwiLFwiZmluaXNoXCIsXCJmaXJlXCIsXCJmaXJzdFwiLFwiZmlzaFwiLFwiZml2ZVwiLFwiZmxhZ1wiLFwiZmxhc2hcIixcImZsYXRcIixcImZsZXdcIixcImZsb29yXCIsXCJmbG93ZXJcIixcImZseVwiLFwiZm9sbG93XCIsXCJmb29kXCIsXCJmb3JcIixcImZvcmVzdFwiLFwiZm9yZ2V0XCIsXCJmb3J0aFwiLFwiZm91bmRcIixcImZvdXJcIixcImZvdXJ0aFwiLFwiZm94XCIsXCJmcmVzaFwiLFwiZnJpZW5kXCIsXCJmcmlnaHRlblwiLFwiZnJvZ1wiLFwiZnJvbVwiLFwiZnJvbnRcIixcImZydWl0XCIsXCJmdWxsXCIsXCJmdW5cIixcImZ1bm55XCIsXCJmdXJcIixcImdcIixcImdhbWVcIixcImdhcmRlblwiLFwiZ2FzcFwiLFwiZ2F0ZVwiLFwiZ2F2ZVwiLFwiZ2V0XCIsXCJnaWFudFwiLFwiZ2lmdFwiLFwiZ2lybFwiLFwiZ2l2ZVwiLFwiZ2xhZFwiLFwiZ2xhc3NcIixcImdvXCIsXCJnb2F0XCIsXCJnb25lXCIsXCJnb29kXCIsXCJnb3RcIixcImdyYW5kZmF0aGVyXCIsXCJncmFuZG1vdGhlclwiLFwiZ3Jhc3NcIixcImdyYXlcIixcImdyZWF0XCIsXCJncmVlblwiLFwiZ3Jld1wiLFwiZ3JpblwiLFwiZ3JvdW5kXCIsXCJncm91cFwiLFwiZ3Jvd1wiLFwiZ3Jvd2xcIixcImd1ZXNzXCIsXCJndW5cIixcImhcIixcImhhZFwiLFwiaGFpclwiLFwiaGFsZlwiLFwiaGFsbFwiLFwiaGFuZFwiLFwiaGFuZGxlXCIsXCJoYW5nXCIsXCJoYXBwZW5cIixcImhhcHBpbmVzc1wiLFwiaGFwcHlcIixcImhhcmRcIixcImhhcm1cIixcImhhc1wiLFwiaGF0XCIsXCJoYXRlXCIsXCJoYXZlXCIsXCJoZVwiLFwiaGUnc1wiLFwiaGVhZFwiLFwiaGVhclwiLFwiaGVhcmRcIixcImhlYXZ5XCIsXCJoZWxkXCIsXCJoZWxsb1wiLFwiaGVscFwiLFwiaGVuXCIsXCJoZXJcIixcImhlcmVcIixcImhlcnNlbGZcIixcImhpZFwiLFwiaGlkZVwiLFwiaGlnaFwiLFwiaGlsbFwiLFwiaGltXCIsXCJoaW1zZWxmXCIsXCJoaXNcIixcImhpdFwiLFwiaG9sZFwiLFwiaG9sZVwiLFwiaG9saWRheVwiLFwiaG9tZVwiLFwiaG9uZXlcIixcImhvcFwiLFwiaG9yblwiLFwiaG9yc2VcIixcImhvdFwiLFwiaG91clwiLFwiaG91c2VcIixcImhvd1wiLFwiaG93bFwiLFwiaHVtXCIsXCJodW5kcmVkXCIsXCJodW5nXCIsXCJodW5ncnlcIixcImh1bnRcIixcImh1cnJ5XCIsXCJodXJ0XCIsXCJodXNiYW5kXCIsXCJpXCIsXCJpJ2xsXCIsXCJpJ21cIixcImljZVwiLFwiaWRlYVwiLFwiaWZcIixcImltYWdpbmVcIixcImltcG9ydGFudFwiLFwiaW5cIixcImluY2hcIixcImluZGVlZFwiLFwiaW5zaWRlXCIsXCJpbnN0ZWFkXCIsXCJpbnRvXCIsXCJpbnZpdGVcIixcImlzXCIsXCJpdFwiLFwiaXQnc1wiLFwiaXRzXCIsXCJqXCIsXCJqYWNrZXRcIixcImphclwiLFwiamV0XCIsXCJqb2JcIixcImpvaW5cIixcImpva2VcIixcImpveVwiLFwianVtcFwiLFwianVzdFwiLFwia1wiLFwia2VlcFwiLFwia2VwdFwiLFwia2V5XCIsXCJraWNrXCIsXCJraWxsXCIsXCJraW5kXCIsXCJraW5nXCIsXCJraXRjaGVuXCIsXCJraXR0ZW5cIixcImtuZWVcIixcImtuZXdcIixcImtub2NrXCIsXCJrbm93XCIsXCJsXCIsXCJsYWRkZXJcIixcImxhZHlcIixcImxhaWRcIixcImxha2VcIixcImxhbmRcIixcImxhcmdlXCIsXCJsYXN0XCIsXCJsYXRlXCIsXCJsYXVnaFwiLFwibGF5XCIsXCJsYXp5XCIsXCJsZWFkXCIsXCJsZWFwXCIsXCJsZWFyblwiLFwibGVhc3RcIixcImxlYXZlXCIsXCJsZWZ0XCIsXCJsZWdcIixcImxlc3NcIixcImxldFwiLFwibGV0J3NcIixcImxldHRlclwiLFwibGlja1wiLFwibGlmdFwiLFwibGlnaHRcIixcImxpa2VcIixcImxpbmVcIixcImxpb25cIixcImxpc3RcIixcImxpc3RlblwiLFwibGl0dGxlXCIsXCJsaXZlXCIsXCJsb2FkXCIsXCJsb25nXCIsXCJsb29rXCIsXCJsb3N0XCIsXCJsb3RcIixcImxvdWRcIixcImxvdmVcIixcImxvd1wiLFwibHVja1wiLFwibHVtcFwiLFwibHVuY2hcIixcIm1cIixcIm1hY2hpbmVcIixcIm1hZGVcIixcIm1hZ2ljXCIsXCJtYWlsXCIsXCJtYWtlXCIsXCJtYW5cIixcIm1hbnlcIixcIm1hcmNoXCIsXCJtYXJrXCIsXCJtYXJrZXRcIixcIm1hc3RlclwiLFwibWF0dGVyXCIsXCJtYXlcIixcIm1heWJlXCIsXCJtZVwiLFwibWVhblwiLFwibWVhbnRcIixcIm1lYXRcIixcIm1lZXRcIixcIm1lbHRcIixcIm1lblwiLFwibWVycnlcIixcIm1ldFwiLFwibWlkZGxlXCIsXCJtaWdodFwiLFwibWlsZVwiLFwibWlsa1wiLFwibWlsa21hblwiLFwibWluZFwiLFwibWluZVwiLFwibWludXRlXCIsXCJtaXNzXCIsXCJtaXN0YWtlXCIsXCJtb21lbnRcIixcIm1vbmV5XCIsXCJtb25rZXlcIixcIm1vbnRoXCIsXCJtb3JlXCIsXCJtb3JuaW5nXCIsXCJtb3N0XCIsXCJtb3RoZXJcIixcIm1vdW50YWluXCIsXCJtb3VzZVwiLFwibW91dGhcIixcIm1vdmVcIixcIm11Y2hcIixcIm11ZFwiLFwibXVzaWNcIixcIm11c3RcIixcIm15XCIsXCJuXCIsXCJuYW1lXCIsXCJuZWFyXCIsXCJuZWNrXCIsXCJuZWVkXCIsXCJuZWVkbGVcIixcIm5laWdoYm9yXCIsXCJuZWlnaGJvcmhvb2RcIixcIm5lc3RcIixcIm5ldmVyXCIsXCJuZXdcIixcIm5leHRcIixcIm5pYmJsZVwiLFwibmljZVwiLFwibmlnaHRcIixcIm5pbmVcIixcIm5vXCIsXCJub2RcIixcIm5vaXNlXCIsXCJub25lXCIsXCJub3J0aFwiLFwibm9zZVwiLFwibm90XCIsXCJub3RlXCIsXCJub3RoaW5nXCIsXCJub3RpY2VcIixcIm5vd1wiLFwibnVtYmVyXCIsXCJvXCIsXCJvY2VhblwiLFwib2ZcIixcIm9mZlwiLFwib2ZmZXJcIixcIm9mdGVuXCIsXCJvaFwiLFwib2xkXCIsXCJvblwiLFwib25jZVwiLFwib25lXCIsXCJvbmx5XCIsXCJvcGVuXCIsXCJvclwiLFwib3JhbmdlXCIsXCJvcmRlclwiLFwib3RoZXJcIixcIm91clwiLFwib3V0XCIsXCJvdXRzaWRlXCIsXCJvdmVyXCIsXCJvd2xcIixcIm93blwiLFwicFwiLFwicGFja1wiLFwicGFpZFwiLFwicGFpbFwiLFwicGFpbnRcIixcInBhaXJcIixcInBhbGFjZVwiLFwicGFuXCIsXCJwYXBlclwiLFwicGFyYWRlXCIsXCJwYXJlbnRcIixcInBhcmtcIixcInBhcnRcIixcInBhcnR5XCIsXCJwYXNzXCIsXCJwYXN0XCIsXCJwYXN0dXJlXCIsXCJwYXRoXCIsXCJwYXdcIixcInBheVwiLFwicGVhbnV0XCIsXCJwZWVrXCIsXCJwZW5cIixcInBlbm55XCIsXCJwZW9wbGVcIixcInBlcmZlY3RcIixcInBlcmhhcHNcIixcInBlcnNvblwiLFwicGV0XCIsXCJwaWNrXCIsXCJwaWNrZXRcIixcInBpY25pY1wiLFwicGljdHVyZVwiLFwicGllXCIsXCJwaWVjZVwiLFwicGlnXCIsXCJwaWxlXCIsXCJwaW5cIixcInBsYWNlXCIsXCJwbGFuXCIsXCJwbGFudFwiLFwicGxheVwiLFwicGxlYXNhbnRcIixcInBsZWFzZVwiLFwicGxlbnR5XCIsXCJwbG93XCIsXCJwb2ludFwiLFwicG9rZVwiLFwicG9sZVwiLFwicG9saWNlbWFuXCIsXCJwb25kXCIsXCJwb29yXCIsXCJwb3BcIixcInBvc3RtYW5cIixcInBvdFwiLFwicG90YXRvXCIsXCJwb3VuZFwiLFwicG91clwiLFwicHJhY3RpY2VcIixcInByZXBhcmVcIixcInByZXNlbnRcIixcInByZXRlbmRcIixcInByZXR0eVwiLFwicHJpbmNlc3NcIixcInByaXplXCIsXCJwcm9iYWJseVwiLFwicHJvYmxlbVwiLFwicHJvbWlzZVwiLFwicHJvdGVjdFwiLFwicHJvdWRcIixcInB1ZmZcIixcInB1bGxcIixcInB1cHB5XCIsXCJwdXNoXCIsXCJwdXRcIixcInFcIixcInF1ZWVuXCIsXCJxdWVlclwiLFwicXVpY2tcIixcInF1aWV0XCIsXCJxdWl0ZVwiLFwiclwiLFwicmFiYml0XCIsXCJyYWNjb29uXCIsXCJyYWNlXCIsXCJyYWRpb1wiLFwicmFnXCIsXCJyYWluXCIsXCJyYWlzZVwiLFwicmFuXCIsXCJyYW5jaFwiLFwicmFuZ1wiLFwicmVhY2hcIixcInJlYWRcIixcInJlYWR5XCIsXCJyZWFsXCIsXCJyZWRcIixcInJlZnVzZVwiLFwicmVtZW1iZXJcIixcInJlcGx5XCIsXCJyZXN0XCIsXCJyZXR1cm5cIixcInJld2FyZFwiLFwicmljaFwiLFwicmlkZVwiLFwicmlnaHRcIixcInJpbmdcIixcInJpdmVyXCIsXCJyb2FkXCIsXCJyb2FyXCIsXCJyb2NrXCIsXCJyb2RlXCIsXCJyb2xsXCIsXCJyb29mXCIsXCJyb29tXCIsXCJyb3BlXCIsXCJyb3VuZFwiLFwicm93XCIsXCJydWJcIixcInJ1bGVcIixcInJ1blwiLFwicnVzaFwiLFwic1wiLFwic2FkXCIsXCJzYWZlXCIsXCJzYWlkXCIsXCJzYWlsXCIsXCJzYWxlXCIsXCJzYWx0XCIsXCJzYW1lXCIsXCJzYW5kXCIsXCJzYW5nXCIsXCJzYXRcIixcInNhdmVcIixcInNhd1wiLFwic2F5XCIsXCJzY2FyZVwiLFwic2Nob29sXCIsXCJzY29sZFwiLFwic2NyYXRjaFwiLFwic2NyZWFtXCIsXCJzZWFcIixcInNlYXRcIixcInNlY29uZFwiLFwic2VjcmV0XCIsXCJzZWVcIixcInNlZWRcIixcInNlZW1cIixcInNlZW5cIixcInNlbGxcIixcInNlbmRcIixcInNlbnRcIixcInNldmVuXCIsXCJzZXZlcmFsXCIsXCJzZXdcIixcInNoYWRvd1wiLFwic2hha2VcIixcInNoYWxsXCIsXCJzaGFwZVwiLFwic2hlXCIsXCJzaGVlcFwiLFwic2hlbGxcIixcInNoaW5lXCIsXCJzaGlwXCIsXCJzaG9lXCIsXCJzaG9uZVwiLFwic2hvb2tcIixcInNob290XCIsXCJzaG9wXCIsXCJzaG9yZVwiLFwic2hvcnRcIixcInNob3RcIixcInNob3VsZFwiLFwic2hvd1wiLFwic2lja1wiLFwic2lkZVwiLFwic2lnaHRcIixcInNpZ25cIixcInNpZ25hbFwiLFwic2lsZW50XCIsXCJzaWxseVwiLFwic2lsdmVyXCIsXCJzaW5jZVwiLFwic2luZ1wiLFwic2lzdGVyXCIsXCJzaXRcIixcInNpeFwiLFwic2l6ZVwiLFwic2tpcFwiLFwic2t5XCIsXCJzbGVkXCIsXCJzbGVlcFwiLFwic2xpZFwiLFwic2xpZGVcIixcInNsb3dcIixcInNtYWxsXCIsXCJzbWFydFwiLFwic21lbGxcIixcInNtaWxlXCIsXCJzbW9rZVwiLFwic25hcFwiLFwic25pZmZcIixcInNub3dcIixcInNvXCIsXCJzb2Z0XCIsXCJzb2xkXCIsXCJzb21lXCIsXCJzb21ldGhpbmdcIixcInNvbWV0aW1lc1wiLFwic29uXCIsXCJzb25nXCIsXCJzb29uXCIsXCJzb3JyeVwiLFwic291bmRcIixcInNwZWFrXCIsXCJzcGVjaWFsXCIsXCJzcGVuZFwiLFwic3BpbGxcIixcInNwbGFzaFwiLFwic3Bva2VcIixcInNwb3RcIixcInNwcmVhZFwiLFwic3ByaW5nXCIsXCJzcXVpcnJlbFwiLFwic3RhbmRcIixcInN0YXJcIixcInN0YXJ0XCIsXCJzdGF0aW9uXCIsXCJzdGF5XCIsXCJzdGVwXCIsXCJzdGlja1wiLFwic3RpbGxcIixcInN0b25lXCIsXCJzdG9vZFwiLFwic3RvcFwiLFwic3RvcmVcIixcInN0b3J5XCIsXCJzdHJhaWdodFwiLFwic3RyYW5nZVwiLFwic3RyZWV0XCIsXCJzdHJldGNoXCIsXCJzdHJpa2VcIixcInN0cm9uZ1wiLFwic3VjaFwiLFwic3VkZGVuXCIsXCJzdWdhclwiLFwic3VpdFwiLFwic3VtbWVyXCIsXCJzdW5cIixcInN1cHBlclwiLFwic3VwcG9zZVwiLFwic3VyZVwiLFwic3VycHJpc2VcIixcInN3YWxsb3dcIixcInN3ZWV0XCIsXCJzd2ltXCIsXCJzd2luZ1wiLFwidFwiLFwidGFibGVcIixcInRhaWxcIixcInRha2VcIixcInRhbGtcIixcInRhbGxcIixcInRhcFwiLFwidGFzdGVcIixcInRlYWNoXCIsXCJ0ZWFjaGVyXCIsXCJ0ZWFtXCIsXCJ0ZWFyXCIsXCJ0ZWV0aFwiLFwidGVsZXBob25lXCIsXCJ0ZWxsXCIsXCJ0ZW5cIixcInRlbnRcIixcInRoYW5cIixcInRoYW5rXCIsXCJ0aGF0XCIsXCJ0aGF0J3NcIixcInRoZVwiLFwidGhlaXJcIixcInRoZW1cIixcInRoZW5cIixcInRoZXJlXCIsXCJ0aGVzZVwiLFwidGhleVwiLFwidGhpY2tcIixcInRoaW5cIixcInRoaW5nXCIsXCJ0aGlua1wiLFwidGhpcmRcIixcInRoaXNcIixcInRob3NlXCIsXCJ0aG91Z2hcIixcInRob3VnaHRcIixcInRocmVlXCIsXCJ0aHJld1wiLFwidGhyb3VnaFwiLFwidGhyb3dcIixcInRpZVwiLFwidGlnZXJcIixcInRpZ2h0XCIsXCJ0aW1lXCIsXCJ0aW55XCIsXCJ0aXBcIixcInRpcmVcIixcInRvXCIsXCJ0b2RheVwiLFwidG9lXCIsXCJ0b2dldGhlclwiLFwidG9sZFwiLFwidG9tb3Jyb3dcIixcInRvb1wiLFwidG9va1wiLFwidG9vdGhcIixcInRvcFwiLFwidG91Y2hcIixcInRvd2FyZFwiLFwidG93ZXJcIixcInRvd25cIixcInRveVwiLFwidHJhY2tcIixcInRyYWZmaWNcIixcInRyYWluXCIsXCJ0cmFwXCIsXCJ0cmVlXCIsXCJ0cmlja1wiLFwidHJpcFwiLFwidHJvdFwiLFwidHJ1Y2tcIixcInRydWVcIixcInRydW5rXCIsXCJ0cnlcIixcInR1cmtleVwiLFwidHVyblwiLFwidHVydGxlXCIsXCJ0d2VsdmVcIixcInR3aW5cIixcInR3b1wiLFwidVwiLFwidWdseVwiLFwidW5jbGVcIixcInVuZGVyXCIsXCJ1bmhhcHB5XCIsXCJ1bnRpbFwiLFwidXBcIixcInVwb25cIixcInVwc3RhaXJzXCIsXCJ1c1wiLFwidXNlXCIsXCJ1c3VhbFwiLFwidlwiLFwidmFsbGV5XCIsXCJ2ZWdldGFibGVcIixcInZlcnlcIixcInZpbGxhZ2VcIixcInZpc2l0XCIsXCJ2b2ljZVwiLFwid1wiLFwid2FnXCIsXCJ3YWdvblwiLFwid2FpdFwiLFwid2FrZVwiLFwid2Fsa1wiLFwid2FudFwiLFwid2FyXCIsXCJ3YXJtXCIsXCJ3YXNcIixcIndhc2hcIixcIndhc3RlXCIsXCJ3YXRjaFwiLFwid2F0ZXJcIixcIndhdmVcIixcIndheVwiLFwid2VcIixcIndlYXJcIixcIndlYXRoZXJcIixcIndlZWtcIixcIndlbGxcIixcIndlbnRcIixcIndlcmVcIixcIndldFwiLFwid2hhdFwiLFwid2hlZWxcIixcIndoZW5cIixcIndoZXJlXCIsXCJ3aGljaFwiLFwid2hpbGVcIixcIndoaXNwZXJcIixcIndoaXN0bGVcIixcIndoaXRlXCIsXCJ3aG9cIixcIndob2xlXCIsXCJ3aG9zZVwiLFwid2h5XCIsXCJ3aWRlXCIsXCJ3aWZlXCIsXCJ3aWxsXCIsXCJ3aW5cIixcIndpbmRcIixcIndpbmRvd1wiLFwid2luZ1wiLFwid2lua1wiLFwid2ludGVyXCIsXCJ3aXJlXCIsXCJ3aXNlXCIsXCJ3aXNoXCIsXCJ3aXRoXCIsXCJ3aXRob3V0XCIsXCJ3b2tlXCIsXCJ3b2xmXCIsXCJ3b21hblwiLFwid29tZW5cIixcIndvbid0XCIsXCJ3b25kZXJcIixcIndvb2RcIixcIndvcmRcIixcIndvcmVcIixcIndvcmtcIixcIndvcmxkXCIsXCJ3b3JtXCIsXCJ3b3JyeVwiLFwid29ydGhcIixcIndvdWxkXCIsXCJ3cm9uZ1wiLFwieFwiLFwieVwiLFwieWFyZFwiLFwieWVhclwiLFwieWVsbFwiLFwieWVsbG93XCIsXCJ5ZXNcIixcInlldFwiLFwieW91XCIsXCJ5b3VuZ1wiLFwieW91clwiLFwielwiLFwiem9vXCJdO2Z1bmN0aW9uIGZlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQ/LjY1OSsuMTIxKm4ud29yZC9uLnNlbnRlbmNlKy4wODIqKG4udW5mYW1pbGlhcldvcmR8fDApL24ud29yZCoxMDA6TnVtYmVyLk5hTn12YXIgR2U9YSg0NTApLHdlPWEoNSksdmU9e2FiYWxvbmU6NCxhYmFyZTozLGFiYnJ1enplc2U6NCxhYmVkOjIsYWJvcmlnaW5lOjUsYWJydXp6ZXNlOjQsYWNyZWFnZTozLGFkYW1lOjMsYWRpZXU6MixhZG9iZTozLGFuZW1vbmU6NCxhbnlvbmU6MyxhcGFjaGU6MyxhcGhyb2RpdGU6NCxhcG9zdHJvcGhlOjQsYXJpYWRuZTo0LGNhZmU6MixjYWxsaW9wZTo0LGNhdGFzdHJvcGhlOjQsY2hpbGU6MixjaGxvZToyLGNpcmNlOjIsY295b3RlOjMsZGFwaG5lOjIsZXBpdG9tZTo0LGV1cnlkaWNlOjQsZXV0ZXJwZTozLGV2ZXJ5OjIsZXZlcnl3aGVyZTozLGZvcmV2ZXI6MyxnZXRoc2VtYW5lOjQsZ3VhY2Ftb2xlOjQsaGVybWlvbmU6NCxoeXBlcmJvbGU6NCxqZXNzZToyLGp1a2Vib3g6MixrYXJhdGU6MyxtYWNoZXRlOjMsbWF5YmU6MixuYWl2ZToyLG5ld2x5d2VkOjMscGVuZWxvcGU6NCxwZW9wbGU6MixwZXJzZXBob25lOjQscGhvZWJlOjIscHVsc2U6MSxxdWV1ZToxLHJlY2lwZTozLHJpdmVyYmVkOjMsc2VzYW1lOjMsc2hvcmVsaW5lOjIsc2ltaWxlOjMsc251ZmZsZXVwYWd1czo1LHNvbWV0aW1lczoyLHN5bmNvcGU6Myx0YW1hbGU6Myx3YXRlcmJlZDozLHdlZG5lc2RheToyLHlvc2VtaXRlOjQsem9lOjJ9LGtlPXt9Lmhhc093blByb3BlcnR5LFJlPW5ldyBSZWdFeHAoW1wiYXdlKCR8ZHxzbylcIixcImNpYSg/Omx8JClcIixcInRpYVwiLFwiY2l1c1wiLFwiY2lvdXNcIixcIlteYWVpb3VdZ2l1XCIsXCJbYWVpb3V5XVteYWVpb3V5XWlvblwiLFwiaW91XCIsXCJzaWEkXCIsXCJlb3VzJFwiLFwiW29hXWd1ZSRcIixcIi5bXmFlaXVveWNnbHRkYl17Mix9ZWQkXCIsXCIuZWx5JFwiLFwiXmp1YVwiLFwidWFpXCIsXCJlYXVcIixcIl5idXNpJFwiLFwiKD86W2FlaW91eV0oPzpcIitbXCJbYmNmZ2tsbW5wcnN2d3h5el1cIixcImNoXCIsXCJkZ1wiLFwiZ1tobl1cIixcImxjaFwiLFwibFtsdl1cIixcIm1tXCIsXCJuY2hcIixcIm5bY2duXVwiLFwicltiY25zdl1cIixcInNxdVwiLFwic1tjaGtsc11cIixcInRoXCJdLmpvaW4oXCJ8XCIpK1wiKWVkJClcIixcIig/OlthZWlvdXldKD86XCIrW1wiW2JkZmtsbW5wcnN0dnldXCIsXCJjaFwiLFwiZ1tobl1cIixcImxjaFwiLFwibFtsdl1cIixcIm1tXCIsXCJuY2hcIixcIm5uXCIsXCJyW25zdl1cIixcInNxdVwiLFwic1tja2xzdF1cIixcInRoXCJdLmpvaW4oXCJ8XCIpK1wiKWVzJClcIl0uam9pbihcInxcIiksXCJnXCIpLFllPW5ldyBSZWdFeHAoXCJbYWVpb3V5XSg/OlwiK1tcIltiY2RmZ2tsbW5wcnN0dnl6XVwiLFwiY2hcIixcImRnXCIsXCJnW2huXVwiLFwibFtsdl1cIixcIm1tXCIsXCJuW2NnbnNdXCIsXCJyW2Nuc3ZdXCIsXCJzcXVcIixcInNbY2tsc3RdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillJFwiLFwiZ1wiKSxBZT1uZXcgUmVnRXhwKFwiKD86XCIrW1wiKFteYWVpb3V5XSlcXFxcMWxcIixcIlteYWVpb3V5XWllKD86cnxzP3QpXCIsXCJbYWVpb3V5bV1ibFwiLFwiZW9cIixcImlzbVwiLFwiYXNtXCIsXCJ0aG1cIixcImRudFwiLFwic250XCIsXCJ1aXR5XCIsXCJkZWFcIixcImdlYW5cIixcIm9hXCIsXCJ1YVwiLFwicmVhY3Q/XCIsXCJvcmJlZFwiLFwic2hyZWRcIixcImVpbmdzP1wiLFwiW2FlaW91eV1zaD9lW3JzXVwiXS5qb2luKFwifFwiKStcIikkXCIsXCJnXCIpLFBlPW5ldyBSZWdFeHAoW1wiY3JlYXQoPyF1KVwiLFwiW15ncV11YVteYXVpZW9dXCIsXCJbYWVpb3VdezN9XCIsXCJeKD86aWF8bWN8Y29hW2RnbHhdLilcIixcIl5yZShhcHB8ZXN8aW18dXMpXCIsXCIodGh8ZCllaXN0XCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxDZT1uZXcgUmVnRXhwKFtcIlteYWVpb3VdeVthZV1cIixcIltebF1saWVuXCIsXCJyaWV0XCIsXCJkaWVuXCIsXCJpdVwiLFwiaW9cIixcImlpXCIsXCJ1ZW5cIixcIlthZWlsb3R1XXJlYWxcIixcInJlYWxbYWVpbG90dV1cIixcImllbGxcIixcImVvW15hZWlvdV1cIixcIlthZWlvdV15W2FlaW91XVwiXS5qb2luKFwifFwiKSxcImdcIiksVGU9L1tec11pYS8seGU9bmV3IFJlZ0V4cChbXCJeKD86XCIrW1widW5cIixcImZvcmVcIixcIndhcmVcIixcIm5vbmU/XCIsXCJvdXRcIixcInBvc3RcIixcInN1YlwiLFwicHJlXCIsXCJwcm9cIixcImRpc1wiLFwic2lkZVwiLFwic29tZVwiXS5qb2luKFwifFwiKStcIilcIixcIig/OlwiK1tcImx5XCIsXCJsZXNzXCIsXCJzb21lXCIsXCJmdWxcIixcImVycz9cIixcIm5lc3NcIixcImNpYW5zP1wiLFwibWVudHM/XCIsXCJldHRlcz9cIixcInZpbGxlcz9cIixcInNoaXBzP1wiLFwic2lkZXM/XCIsXCJwb3J0cz9cIixcInNoaXJlcz9cIixcIltnbnN0XWlvbig/OmVkfHMpP1wiXS5qb2luKFwifFwiKStcIikkXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSx6ZT1uZXcgUmVnRXhwKFtcIl4oPzpcIitbXCJhYm92ZVwiLFwiYW50aVwiLFwiYW50ZVwiLFwiY291bnRlclwiLFwiaHlwZXJcIixcImFmb3JlXCIsXCJhZ3JpXCIsXCJpbmZyYVwiLFwiaW50cmFcIixcImludGVyXCIsXCJvdmVyXCIsXCJzZW1pXCIsXCJ1bHRyYVwiLFwidW5kZXJcIixcImV4dHJhXCIsXCJkaWFcIixcIm1pY3JvXCIsXCJtZWdhXCIsXCJraWxvXCIsXCJwaWNvXCIsXCJuYW5vXCIsXCJtYWNyb1wiLFwic29tZXJcIl0uam9pbihcInxcIikrXCIpXCIsXCIoPzpmdWxseXxiZXJyeXx3b21hbnx3b21lbnxlZGx5fHVuaW9ufCgoPzpbYmNkZmdoamtsbW5wcXJzdHZ3eHpdKXxbYWVpb3VdKXllP2luZykkXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxFZT0vKGNyZWF0aW9ucz98b2xvZ3l8b2xvZ2lzdHxvbm9teXxvbm9taXN0KSQvZztmdW5jdGlvbiBCZShuKXt2YXIgZSxhLGkscix0LG89MDtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG87aWYobi5sZW5ndGg8MylyZXR1cm4gMTtpZihrZS5jYWxsKHZlLG4pKXJldHVybiB2ZVtuXTtpZihhPUdlKG4sMSksa2UuY2FsbCh2ZSxhKSlyZXR1cm4gdmVbYV07Zm9yKHI9cygxKSx0PXMoLTEpLGk9KG49bi5yZXBsYWNlKEVlLE0oMykpLnJlcGxhY2UoemUsTSgyKSkucmVwbGFjZSh4ZSxNKDEpKSkuc3BsaXQoL1teYWVpb3V5XSsvKSxlPS0xOysrZTxpLmxlbmd0aDspXCJcIiE9PWlbZV0mJm8rKztyZXR1cm4gbi5yZXBsYWNlKFJlLHQpLnJlcGxhY2UoWWUsdCksbi5yZXBsYWNlKEFlLHIpLnJlcGxhY2UoUGUscikucmVwbGFjZShDZSxyKS5yZXBsYWNlKFRlLHIpLG98fDE7ZnVuY3Rpb24gTShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbys9bixcIlwifX1mdW5jdGlvbiBzKG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbys9bixlfX19Y29uc3QgTmU9e30uaGFzT3duUHJvcGVydHksWmU9TWF0aC5mbG9vcixGZT1NYXRoLnJvdW5kLEllPU1hdGguY2VpbCxVZT1NYXRoLnNxcnQ7ZnVuY3Rpb24gamUobj17fSl7Y29uc3QgZT1uLmFnZXx8MTYsYT1uLnRocmVzaG9sZHx8LjU3MTQyODU3MTQyODU3MTQsaT1udWxsPT09bi5taW5Xb3Jkc3x8dm9pZCAwPT09bi5taW5Xb3Jkcz81Om4ubWluV29yZHM7cmV0dXJuKG4scik9PntfbihuLFwiU2VudGVuY2VOb2RlXCIsKG49Pntjb25zdCB0PXt9LG89e307bGV0IE09MCxzPTAsbD0wLGM9MCxTPTAsdT0wLGQ9MDtpZihfbihuLFwiV29yZE5vZGVcIiwobj0+e2NvbnN0IGU9cW4obiksYT1lLnRvTG93ZXJDYXNlKCksaT1mdW5jdGlvbihuKXtmb3IodmFyIGU9d2UoU3RyaW5nKG4pKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1sn4oCZXS9nLFwiXCIpLnNwbGl0KC9cXGIvZyksYT0tMSxpPTA7KythPGUubGVuZ3RoOylpKz1CZShlW2FdLnJlcGxhY2UoL1teYS16XS9nLFwiXCIpKTtyZXR1cm4gaX0oZSk7dSsrLGMrPWksZCs9ZS5sZW5ndGgsaT49MyYmKGwrKyxlLmNoYXJDb2RlQXQoMCk9PT1hLmNoYXJDb2RlQXQoMCkmJk0rKyksRGUuaW5jbHVkZXMoYSkmJiFOZS5jYWxsKHQsYSkmJih0W2FdPSEwLHMrKyksbWUuaW5jbHVkZXMoYSkmJiFOZS5jYWxsKG8sYSkmJihvW2FdPSEwLFMrKyl9KSksdT49aSl7Y29uc3QgaT17Y29tcGxleFBvbHlzaWxsYWJpY1dvcmQ6TSxwb2x5c2lsbGFiaWNXb3JkOmwsdW5mYW1pbGlhcldvcmQ6dS1zLGRpZmZpY3VsdFdvcmQ6dS1TLHN5bGxhYmxlOmMsc2VudGVuY2U6MSx3b3JkOnUsY2hhcmFjdGVyOmQsbGV0dGVyOmR9LHQ9W0xlKChwPWhlKGkpLGg9TWF0aC5mbG9vcihwKSxoPDU/aD00Omg+OSYmKGg9MTApLHBlW2hdLmNvbmNhdCgpKVsxXSksTGUodWUoaSkpLExlKGRlKGkpKSwobT1nZShpKSwyMC1aZShtLzEwKSkscWUoYmUoaSkpLExlKHllKGkpKSxMZShmZShpKSldO2xldCBvPS0xLGc9MDtmb3IoOysrbzx0Lmxlbmd0aDspdFtvXT5lJiZnKys7Y29uc3QgeT1nL3QubGVuZ3RoO2lmKHk+PWEpe2NvbnN0IGU9ZytcIi9cIit0Lmxlbmd0aDtPYmplY3QuYXNzaWduKHIubWVzc2FnZShcIkhhcmQgdG8gcmVhZCBzZW50ZW5jZSAoY29uZmlkZW5jZTogXCIrZStcIilcIixuLFwicmV0ZXh0LXJlYWRhYmlsaXR5OnJlYWRhYmlsaXR5XCIpLHthY3R1YWw6cW4obiksZXhwZWN0ZWQ6W10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZWFkYWJpbGl0eSNyZWFkbWVcIixjb25maWRlbmNlOnksY29uZmlkZW5jZUxhYmVsOmV9KX19dmFyIG0scCxoO3JldHVybiBRbn0pKX19ZnVuY3Rpb24gTGUobil7cmV0dXJuIEZlKG4rNSl9ZnVuY3Rpb24gcWUobil7cmV0dXJuIEllKFVlKG4pKzIuNSl9Y29uc3QgSGU9V24oXCJTZW50ZW5jZU5vZGVcIiksSmU9V24oXCJXaGl0ZVNwYWNlTm9kZVwiKSxPZT1cInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI7ZnVuY3Rpb24gWGUobj17fSl7bGV0IGU9bi5wcmVmZXJyZWQ7aWYoXCJuZXdsaW5lXCI9PT1lJiYoZT0wKSxudWxsIT1lJiZcInNwYWNlXCIhPT1lfHwoZT0xKSxcImRvdWJsZS1zcGFjZVwiPT09ZSYmKGU9MiksXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBvcHRpb25zLnByZWZlcnJlZGAgdG8gYmUgYCdzcGFjZSdgLCBgJ25ld2xpbmUnYCwgb3IgYSBgbnVtYmVyYFwiKTtpZihlPDB8fGU+Mil0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBgb3B0aW9ucy5wcmVmZXJyZWRgIHRvIGJlIGAnc3BhY2UnYCwgYCduZXdsaW5lJ2AsIG9yIGEgYG51bWJlcmAgYmV0d2VlbiAoaW5jbHVkaW5nKSBgMGAgYW5kIGAyYFwiKTtyZXR1cm4obixhKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49PntsZXQgaT0tMTtmb3IoOysraTxuLmNoaWxkcmVuLmxlbmd0aDspe2NvbnN0IHI9bi5jaGlsZHJlbltpXTtpZighSGUobi5jaGlsZHJlbltpLTFdKXx8IUplKHIpfHwhSGUobi5jaGlsZHJlbltpKzFdKSljb250aW51ZTtjb25zdCB0PXFuKHIpO2lmKCEvXiArJC8udGVzdCh0KSljb250aW51ZTtjb25zdCBvPXQubGVuZ3RoO2xldCBNO2lmKDA9PT1lKU09XCJFeHBlY3RlZCBhIG5ld2xpbmUgYmV0d2VlbiBzZW50ZW5jZXMsIG5vdCBgXCIrbytcImAgc3BhY2VcIisoMT09PW8/XCJcIjpcInNcIik7ZWxzZXtpZihvPT09ZSljb250aW51ZTtNPVwiRXhwZWN0ZWQgYFwiK2UrXCJgIHNwYWNlXCIrKDE9PT1lP1wiXCI6XCJzXCIpK1wiIGJldHdlZW4gc2VudGVuY2VzLCBub3QgYFwiK28rXCJgXCJ9T2JqZWN0LmFzc2lnbihhLm1lc3NhZ2UoTSxyLFtPZSwwPT09ZT9cIm5ld2xpbmVcIjoxPT09ZT9cInNwYWNlXCI6XCJkb3VibGUtc3BhY2VcIl0uam9pbihcIjpcIikpLHthY3R1YWw6dCxleHBlY3RlZDpbMD09PWU/XCJcXG5cIjoxPT09ZT9cIiBcIjpcIiAgXCJdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtc2VudGVuY2Utc3BhY2luZyNyZWFkbWVcIn0pfX0pKX19ZnVuY3Rpb24gVmUobixlKXtsZXQgYT0oXCJzdHJpbmdcIj09dHlwZW9mIG4/bjpxbihuKSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC/igJkvZyxcIidcIik7cmV0dXJuIGUmJmUuYWxsb3dEYXNoZXN8fChhPWEucmVwbGFjZSgvLS9nLFwiXCIpKSxlJiZlLmFsbG93QXBvc3Ryb3BoZXN8fChhPWEucmVwbGFjZSgvJy9nLFwiXCIpKSxhfWNvbnN0IFdlPVtcIi1cIixcIuKAk1wiLFwi4oCUXCIsXCI6XCIsXCI7XCJdLEtlPXtcIixcIjpbXCIsXCJdLFwiLVwiOltcIi1cIl0sXCLigJNcIjpbXCLigJNcIl0sXCLigJRcIjpbXCLigJRcIl0sJ1wiJzpbJ1wiJ10sXCInXCI6W1wiJ1wiXSxcIuKAmFwiOltcIuKAmVwiXSxcIuKAmlwiOltcIuKAmVwiXSxcIuKAmVwiOltcIuKAmVwiLFwi4oCaXCJdLFwi4oCcXCI6W1wi4oCdXCJdLFwi4oCdXCI6W1wi4oCdXCJdLFwi4oCeXCI6W1wi4oCdXCIsXCLigJxcIl0sXCLCq1wiOltcIsK7XCJdLFwiwrtcIjpbXCLCq1wiXSxcIuKAuVwiOltcIuKAulwiXSxcIuKAulwiOltcIuKAuVwiXSxcIihcIjpbXCIpXCJdLFwiW1wiOltcIl1cIl0sXCJ7XCI6W1wifVwiXSxcIuKfqFwiOltcIuKfqVwiXSxcIuOAjFwiOltcIuOAjVwiXX0sJGU9T2JqZWN0LmtleXMoS2UpO2Z1bmN0aW9uIFFlKG4sZSl7aWYoIW58fCFuLmNoaWxkcmVuKXRocm93IG5ldyBFcnJvcihcIlBhcmVudCBtdXN0IGJlIGEgbm9kZVwiKTtpZihudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwidHlwZVwiaW4gZSYmLTE9PT0oZT1uLmNoaWxkcmVuLmluZGV4T2YoZSkpKXRocm93IG5ldyBFcnJvcihcIk5vZGUgbXVzdCBiZSBhIGNoaWxkIG9mIGBwYXJlbnRgXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxOdW1iZXIuaXNOYU4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkluZGV4IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIEJvb2xlYW4oIW5hKG4sLTEsZSkmJl9lKG4sZSwxLFdlKXx8IW5hKG4sZSxuLmNoaWxkcmVuLmxlbmd0aCkmJl9lKG4sZSwtMSxXZSl8fGZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1fZShuLGUsLTEsJGUpO2lmKGEpcmV0dXJuIF9lKG4sZSwxLEtlW3FuKGEpXSl9KG4sZSkpfWZ1bmN0aW9uIF9lKG4sZSxhLGkpe2xldCByPWUrYTtmb3IoO3I+LTEmJnI8bi5jaGlsZHJlbi5sZW5ndGg7KXtjb25zdCBlPW4uY2hpbGRyZW5bcl07aWYoXCJXb3JkTm9kZVwiPT09ZS50eXBlfHxcIlNvdXJjZU5vZGVcIj09PWUudHlwZSlyZXR1cm47aWYoXCJXaGl0ZVNwYWNlTm9kZVwiIT09ZS50eXBlKXJldHVybiBpLmluY2x1ZGVzKHFuKGUpKT9lOnZvaWQgMDtyKz1hfX1mdW5jdGlvbiBuYShuLGUsYSl7Zm9yKDsrK2U8YTspaWYoXCJXb3JkTm9kZVwiPT09bi5jaGlsZHJlbltlXS50eXBlKXJldHVybiEwfWNvbnN0IGVhPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFhKG4sZSxhLGkpe2NvbnN0IHI9e1wiKlwiOltdfTtsZXQgdCxvLE09LTE7aWYobz1cImJvb2xlYW5cIj09dHlwZW9mIGk/aT97YWxsb3dBcG9zdHJvcGhlczohMH06e306aXx8e30sIW58fCFuLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZVwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgb2JqZWN0IGZvciBwaHJhc2VzXCIpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKDsrK008ZS5sZW5ndGg7KWwoZVtNXSk7ZWxzZSBmb3IodCBpbiBlKWVhLmNhbGwoZSx0KSYmbCh0KTtmdW5jdGlvbiBzKG4sZSxhKXtjb25zdCBpPWEuY2hpbGRyZW4scj1lLHQ9bi5zcGxpdChcIiBcIikuc2xpY2UoMSk7bGV0IE09LTE7Zm9yKGUrKzsrK008dC5sZW5ndGg7KXtmb3IoO2U8aS5sZW5ndGgmJlwiV2hpdGVTcGFjZU5vZGVcIj09PWlbZV0udHlwZTspZSsrO2lmKCFpW2VdfHxcIldvcmROb2RlXCIhPT1pW2VdLnR5cGV8fFwiKlwiIT09dFtNXSYmVmUodFtNXSxvKSE9PVZlKGlbZV0sbykpcmV0dXJuO2UrK31yZXR1cm4gaS5zbGljZShyLGUpfWZ1bmN0aW9uIGwobil7Y29uc3QgZT1WZShuLnNwbGl0KFwiIFwiLDEpWzBdLG8pO2VhLmNhbGwocixlKT9yW2VdLnB1c2gobik6cltlXT1bbl19X24obixcIldvcmROb2RlXCIsKChuLGUsaSk9Pntjb25zdCB0PWk7aWYoIXR8fG51bGw9PT1lfHwhby5hbGxvd0xpdGVyYWxzJiZRZSh0LGUpKXJldHVybjtjb25zdCBNPVZlKG4sbyksbD1yW1wiKlwiXS5jb25jYXQoZWEuY2FsbChyLE0pP3JbTV06W10pO2xldCBjPS0xO2Zvcig7KytjPGwubGVuZ3RoOyl7Y29uc3Qgbj1zKGxbY10sZSx0KTtuJiZhKG4sZSx0LGxbY10pfX0pKX1jb25zdCBpYT1bXCJhd29rZW5cIixcImF3b2tlXCIsXCJiZWF0ZW5cIixcImJlYXRcIixcImJlZ3VuXCIsXCJiZWdhblwiLFwiYmVudFwiLFwiYml0dGVuXCIsXCJiaXRcIixcImJsZWRcIixcImJsb3duXCIsXCJibGV3XCIsXCJicm9rZW5cIixcImJyb2tlXCIsXCJicm91Z2h0XCIsXCJidWlsdFwiLFwiYm91Z2h0XCIsXCJjYXVnaHRcIixcImNob3NlblwiLFwiY2hvc2VcIixcImRlYWx0XCIsXCJkb25lXCIsXCJkaWRcIixcImRyYXduXCIsXCJkcmV3XCIsXCJkcml2ZW5cIixcImRyb3ZlXCIsXCJlYXRlblwiLFwiYXRlXCIsXCJmZWRcIixcImZlbHRcIixcImZvdWdodFwiLFwiZm91bmRcIixcImZvcmJpZGRlblwiLFwiZm9yYmFkZVwiLFwiZm9yZ290dGVuXCIsXCJmb3Jnb3RcIixcImZvcmdpdmVuXCIsXCJmb3JnYXZlXCIsXCJmcm96ZW5cIixcImZyb3plXCIsXCJnb3R0ZW5cIixcImdvdFwiLFwiZ2l2ZW5cIixcImdhdmVcIixcImdyb3VuZFwiLFwiZ3JpbmRlZFwiLFwiaHVuZ1wiLFwiaGVhcmRcIixcImhpZGRlblwiLFwiaGlkXCIsXCJoaXRcIixcImhlbGRcIixcImh1cnRcIixcImtlcHRcIixcImtub3duXCIsXCJrbmV3XCIsXCJsYWlkXCIsXCJsZWRcIixcImxldFwiLFwibG9zdFwiLFwibWFkZVwiLFwibWVhbnRcIixcIm1ldFwiLFwicGFpZFwiLFwicHJvdmVuXCIsXCJwcm92ZWRcIixcInB1dFwiLFwicmVhZFwiLFwicmlkZGVuXCIsXCJyb2RlXCIsXCJydW5nXCIsXCJyYW5nXCIsXCJydW5cIixcInJhblwiLFwic2FpZFwiLFwic2VlblwiLFwic2F3XCIsXCJzb2xkXCIsXCJzZW50XCIsXCJzaGFrZW5cIixcInNob29rXCIsXCJzaGF2ZWRcIixcInNob3RcIixcInNob3duXCIsXCJzaHV0XCIsXCJzdW5nXCIsXCJzdW5rXCIsXCJzbGFpblwiLFwic2xld1wiLFwic2xpZFwiLFwic3Bva2VuXCIsXCJzcG9rZVwiLFwic3BlbnRcIixcInNwdW5cIixcInNwbGl0XCIsXCJzcHJlYWRcIixcInN0b2xlblwiLFwic3RvbGVcIixcInN0cnVja1wiLFwic3dlcHRcIixcInN3dW5nXCIsXCJ0YWtlblwiLFwidG9va1wiLFwidGF1Z2h0XCIsXCJ0b3JuXCIsXCJ0b3JlXCIsXCJ0b2xkXCIsXCJ0aG91Z2h0XCIsXCJ0aHJvd25cIixcInRocmV3XCIsXCJ1bmRlcmdvbmVcIixcInVuZGVyd2VudFwiLFwidW5kZXJzdG9vZFwiLFwidXBzZXRcIixcIndva2VuXCIsXCJ3b2tlXCIsXCJ3b3JuXCIsXCJ3b3JlXCIsXCJ3b25cIixcIndpdGhkcmF3blwiLFwid2l0aGRyZXdcIixcIndyaXR0ZW5cIixcIndyb3RlXCIsXCJiZWVuXCIsXCJib3JuXCIsXCJiZWNvbWVcIixcImJlc2V0XCIsXCJiZXRcIixcImJpZFwiLFwiYmlkZGVuXCIsXCJib3VuZFwiLFwiYnJlZFwiLFwiYnJvYWRjYXN0XCIsXCJidXJudFwiLFwiYnVyc3RcIixcImNhc3RcIixcImNsdW5nXCIsXCJjb21lXCIsXCJjb3N0XCIsXCJjcmVwdFwiLFwiY3V0XCIsXCJkdWdcIixcImRpdmVkXCIsXCJkcmVhbXRcIixcImRydW5rXCIsXCJmYWxsZW5cIixcImZpdFwiLFwiZmxlZFwiLFwiZmx1bmdcIixcImZsb3duXCIsXCJmb3JlZ29uZVwiLFwiZm9yc2FrZW5cIixcImdvbmVcIixcImdyb3duXCIsXCJrbmVsdFwiLFwia25pdFwiLFwibGVhcHRcIixcImxlYXJudFwiLFwibGVmdFwiLFwibGVudFwiLFwibGFpblwiLFwibGlnaHRlZFwiLFwibWlzc3BlbHRcIixcIm1pc3Rha2VuXCIsXCJtb3duXCIsXCJvdmVyY29tZVwiLFwib3ZlcmRvbmVcIixcIm92ZXJ0YWtlblwiLFwib3ZlcnRocm93blwiLFwicGxlZFwiLFwicXVpdFwiLFwicmlkXCIsXCJyaXNlblwiLFwic2F3blwiLFwic291Z2h0XCIsXCJzZXRcIixcInNld25cIixcInNoYXZlblwiLFwic2hvcm5cIixcInNoZWRcIixcInNob25lXCIsXCJzaG9kXCIsXCJzaHJ1bmtcIixcInNhdFwiLFwic2xlcHRcIixcInNsdW5nXCIsXCJzbGl0XCIsXCJzbWl0dGVuXCIsXCJzb3duXCIsXCJzcGVkXCIsXCJzcGlsdFwiLFwic3BpdFwiLFwic3BydW5nXCIsXCJzdG9vZFwiLFwic3R1Y2tcIixcInN0dW5nXCIsXCJzdHVua1wiLFwic3RyaWRkZW5cIixcInN0cnVuZ1wiLFwic3RyaXZlblwiLFwic3dvcm5cIixcInN3b2xsZW5cIixcInN3dW1cIixcInRocml2ZWRcIixcInRocnVzdFwiLFwidHJvZGRlblwiLFwidXBoZWxkXCIsXCJ3b3ZlblwiLFwid2VkXCIsXCJ3ZXB0XCIsXCJ3b3VuZFwiLFwid2l0aGhlbGRcIixcIndpdGhzdG9vZFwiLFwid3J1bmdcIl0scmE9XCJyZXRleHQtcGFzc2l2ZVwiLHRhPW5ldyBTZXQoW1wiYW1cIixcImFyZVwiLFwid2VyZVwiLFwiYmVpbmdcIixcImlzXCIsXCJiZWVuXCIsXCJ3YXNcIixcImJlXCJdKTtmdW5jdGlvbiBvYShuPXt9KXtjb25zdCBlPW4uaWdub3JlfHxbXSxhPWUubGVuZ3RoPjA/aWEuZmlsdGVyKChuPT4hZS5pbmNsdWRlcyhuKSkpOmlhO3JldHVybihuLGUpPT57YWEobixhLCgobixhLGkscik9Pntjb25zdCB0PWZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1XbihcIldvcmROb2RlXCIpO2lmKCFufHwhbi50eXBlfHwhbi5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgbm9kZVwiKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZTwwfHxlPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBudW1iZXIgYXMgaW5kZXhcIil9ZWxzZSBpZigoZT1uLmNoaWxkcmVuLmluZGV4T2YoZSkpPDApdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2hpbGQgbm9kZSBvciBpbmRleFwiKTtmb3IoZT5uLmNoaWxkcmVuLmxlbmd0aCYmKGU9bi5jaGlsZHJlbi5sZW5ndGgpO2UtLTspaWYoaShuLmNoaWxkcmVuW2VdLGUsbikpcmV0dXJuIG4uY2hpbGRyZW5bZV07cmV0dXJuIG51bGx9KGksYSk7dCYmdGEuaGFzKHFuKHQpLnRvTG93ZXJDYXNlKCkpJiZPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIkRvbuKAmXQgdXNlIHRoZSBwYXNzaXZlIHZvaWNlXCIse3N0YXJ0OnRlKG5bMF0pLGVuZDpvZShuW24ubGVuZ3RoLTFdKX0sW3JhLHIucmVwbGFjZSgvXFxzKy9nLFwiLVwiKS50b0xvd2VyQ2FzZSgpXS5qb2luKFwiOlwiKSkse2FjdHVhbDpxbihuKSxleHBlY3RlZDpbXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXBhc3NpdmUjcmVhZG1lXCJ9KX0pKX19Y29uc3QgTWE9e2FpbnQ6XCJhaW4ndFwiLGFyZW50OlwiYXJlbid0XCIsY291bGRudDpcImNvdWxkbid0XCIsZGlkbnQ6XCJkaWRuJ3RcIixkb2VzbnQ6XCJkb2Vzbid0XCIsZG9udDpcImRvbid0XCIsaGFkbnQ6XCJoYWRuJ3RcIixoYXNudDpcImhhc24ndFwiLGhhdmVudDpcImhhdmVuJ3RcIixoZWQ6XCJoZSdkXCIsaGVzOlwiaGUnc1wiLGhvd2Q6XCJob3cnZFwiLGhvd3M6XCJob3cnc1wiLGhvd2xsOlwiaG93J2xsXCIsSWQ6XCJJJ2RcIixJbTpcIkknbVwiLEl2ZTpcIkkndmVcIixpc250OlwiaXNuJ3RcIixtaWdodG50OlwibWlnaHRuJ3RcIixtdXN0dmU6XCJtdXN0J3ZlXCIsbXVzdG50OlwibXVzdG4ndFwiLG5lZWRudDpcIm5lZWRuJ3RcIixvY2xvY2s6XCJvJ2Nsb2NrXCIsc2hhbnQ6XCJzaGFuJ3RcIixzaGVzOlwic2hlJ3NcIixzaG91bGR2ZTpcInNob3VsZCd2ZVwiLHNob3VsZG50Olwic2hvdWxkbid0XCIsdGhhdGQ6XCJ0aGF0J2RcIix0aGF0czpcInRoYXQnc1wiLHRoZXJlZDpcInRoZXJlJ2RcIix0aGVyZXM6XCJ0aGVyZSdzXCIsdGhlcmVyZTpcInRoZXJlJ3JlXCIsdGhleWQ6XCJ0aGV5J2RcIix0aGV5bGw6XCJ0aGV5J2xsXCIsdGhleXJlOlwidGhleSdyZVwiLHRoZXl2ZTpcInRoZXkndmVcIix0aXM6XCIndGlzXCIsdHdhczpcIid0d2FzXCIsdHdlcmU6XCIndHdlcmVcIix3YXNudDpcIndhc24ndFwiLHdldmU6XCJ3ZSd2ZVwiLHdlcmVudDpcIndlcmVuJ3RcIix3aGF0bGw6XCJ3aGF0J2xsXCIsd2hhdHJlOlwid2hhdCdyZVwiLHdoYXRzOlwid2hhdCdzXCIsd2hhdHZlOlwid2hhdCd2ZVwiLHdoZW5zOlwid2hlbidzXCIsd2hlcmVzOlwid2hlcmUnc1wiLHdoZXJldmU6XCJ3aGVyZSd2ZVwiLHdob2Q6XCJ3aG8nZFwiLHdob2xsOlwid2hvJ2xsXCIsd2hvczpcIndobydzXCIsd2hvdmU6XCJ3aG8ndmVcIix3aHlzOlwid2h5J3NcIix3b3VsZHZlOlwid291bGQndmVcIix3b3VsZG50Olwid291bGRuJ3RcIix5YWxsOlwieSdhbGxcIix5b3VkOlwieW91J2RcIix5b3VsbDpcInlvdSdsbFwiLHlvdXJlOlwieW91J3JlXCIseW91dmU6XCJ5b3UndmVcIn0sc2E9XCJyZXRleHQtY29udHJhY3Rpb25zXCIsbGE9e30uaGFzT3duUHJvcGVydHksY2E9ZnVuY3Rpb24oKXtjb25zdCBuPXt9O2xldCBlO2ZvcihlIGluIE1hKWlmKGxhLmNhbGwoTWEsZSkpe2NvbnN0IGE9TWFbZV07bltlXT1hLGU9PT1lLnRvTG93ZXJDYXNlKCkmJihuW2UudG9VcHBlckNhc2UoKV09YS50b1VwcGVyQ2FzZSgpLG5bZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpXT1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSkpfXJldHVybiBufSgpO2Z1bmN0aW9uIFNhKG49e30pe2NvbnN0IGU9bi5hbGxvd0xpdGVyYWxzLGE9bi5zdHJhaWdodDtyZXR1cm4obixpKT0+e19uKG4sXCJXb3JkTm9kZVwiLCgobixyLHQpPT57Y29uc3Qgbz10LE09cW4obikscz1NLnJlcGxhY2UoL1sn4oCZXS9nLFwiXCIpO2lmKGxhLmNhbGwoY2Escykpe2xldCB0PWNhW3NdO2lmKGF8fCh0PXQucmVwbGFjZSgvJy9nLFwi4oCZXCIpKSxNPT09dHx8byYmbnVsbCE9PXImJiFlJiZRZShvLHIpKXJldHVybjtPYmplY3QuYXNzaWduKGkubWVzc2FnZShzPT09TT9cIkV4cGVjdGVkIGFuIGFwb3N0cm9waGUgaW4gYFwiK00rXCJgLCBsaWtlIHRoaXM6IGBcIit0K1wiYFwiOlwiRXhwZWN0ZWQgdGhlIGFwb3N0cm9waGUgaW4gYFwiK00rXCJgIHRvIGJlIGxpa2UgdGhpczogYFwiK3QrXCJgXCIsbixbc2EsKHM9PT1NP1wibWlzc2luZy1cIjpcIlwiKSsoYT9cInN0cmFpZ2h0LWFwb3N0cm9waGVcIjpcInNtYXJ0LWFwb3N0cm9waGVcIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOk0sZXhwZWN0ZWQ6W3RdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtY29udHJhY3Rpb25zI3JlYWRtZVwifSl9fSkpfX1jb25zdCB1YT1mdW5jdGlvbihuLGUsYSl7Y29uc3QgaT1lfHwnXCInLHI9YXx8aSx0PVtdO2xldCBvPS0xO2lmKEFycmF5LmlzQXJyYXkobikpe2Zvcig7KytvPG4ubGVuZ3RoOyl0W29dPWkrbltvXStyO3JldHVybiB0fWlmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBpK24rcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3NcIil9LGRhPXt9Lmhhc093blByb3BlcnR5LG1hPVduKFwiV29yZE5vZGVcIikscGE9V24oXCJXaGl0ZVNwYWNlTm9kZVwiKSxoYT1XbihcIlB1bmN0dWF0aW9uTm9kZVwiKSxnYT1mdW5jdGlvbihuLGUpe2NvbnN0IGE9XCJyZXRleHQtZXF1YWxpdHlcIixpPXtvcjpmdW5jdGlvbihuLGUsYSl7bGV0IGk9LTE7Zm9yKDsrK2k8bi5sZW5ndGg7KXtjb25zdCByPW5baV0sdD1yLnBhcmVudC5jaGlsZHJlbixvPW5baSsxXTtpZihvJiZvLnBhcmVudD09PXIucGFyZW50JiZvLnR5cGUhPT1yLnR5cGUpe2xldCBuPXIuZW5kO2Zvcig7KytuPG8uc3RhcnQ7KXtjb25zdCBlPXRbbl07aWYoIShwYShlKXx8bWEoZSkmJi8oYW5kfG9yKS8udGVzdChWZShlKSl8fGhhKGUpJiZcIi9cIj09PVZlKGUpKSlicmVha31pZihuPT09by5zdGFydCl7aSsrO2NvbnRpbnVlfX1zKGEscixlKX19LGJhc2ljOmZ1bmN0aW9uKG4sZSxhKXtsZXQgaT0tMTtmb3IoOysraTxuLmxlbmd0aDspcyhhLG5baV0sZSl9fSxyPXt9LHQ9W10sbz1bXSxNPVtdO3JldHVybiBmdW5jdGlvbigpe2xldCBlPS0xO2Zvcig7KytlPG4ubGVuZ3RoOyl7Y29uc3QgYT1uW2VdO2xldCBpO2ZvcihpIGluIHJbYS5pZF09YSxhLmluY29uc2lkZXJhdGUpZGEuY2FsbChhLmluY29uc2lkZXJhdGUsaSkmJihNLnB1c2goaSksdC5wdXNoKGEpLGEuYXBvc3Ryb3BoZSYmby5wdXNoKGkpKX19KCksKG49e30pPT57Y29uc3QgZT1uLmlnbm9yZXx8W10sYT1uLm5vQmluYXJ5O2xldCBzPS0xO2NvbnN0IGw9W10sYz1bXTtmb3IoOysrczxNLmxlbmd0aDspe2NvbnN0IG49TVtzXTtlLmluY2x1ZGVzKG4pfHwoby5pbmNsdWRlcyhuKT9sLnB1c2gobik6Yy5wdXNoKG4pKX1yZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBvPXt9O2xldCBzO2ZvcihzIGluIGFhKG4sYyxTKSxhYShuLGwsUywhMCksbylpZihkYS5jYWxsKG8scykpe2NvbnN0IG49cltzXTtpW1wib3JcIj09PW4udHlwZSYmYT9cImJhc2ljXCI6bi50eXBlXShvW3NdLG4sZSl9cmV0dXJuIFFuO2Z1bmN0aW9uIFMobixlLGEsaSl7Y29uc3Qgcj1NLmluZGV4T2YoaSkscz10W3JdLGw9cy5pZDtpIT09aS50b0xvd2VyQ2FzZSgpJiZxbihuKSE9PWl8fChsIGluIG98fChvW2xdPVtdKSxvW2xdLnB1c2goe3R5cGU6cy5pbmNvbnNpZGVyYXRlW2ldLHBhcmVudDphLG5vZGVzOm4sc3RhcnQ6ZSxlbmQ6ZStuLmxlbmd0aC0xfSkpfX0pKX19O2Z1bmN0aW9uIHMobixlLGkpe2NvbnN0IHI9cW4oZS5ub2Rlcyk7bGV0IHQ7aWYoaS5jb25zaWRlcmF0ZSYmKHQ9T2JqZWN0LmtleXMoaS5jb25zaWRlcmF0ZSksci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKT09PXIuY2hhckF0KDApKSl7bGV0IG49LTE7Zm9yKDsrK248dC5sZW5ndGg7KXRbbl09dFtuXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0W25dLnNsaWNlKDEpfU9iamVjdC5hc3NpZ24obi5tZXNzYWdlKHVhKHIsXCJgXCIpK1wiIG1heSBiZSBpbnNlbnNpdGl2ZVwiKyhpLmNvbmRpdGlvbj9cIiwgXCIraS5jb25kaXRpb246XCJcIikrXCIsIFwiKyh0P1widXNlIFwiK3VhKHQsXCJgXCIpLmpvaW4oXCIsIFwiKStcIiBpbnN0ZWFkXCI6XCJ0cnkgbm90IHRvIHVzZSBpdFwiKSxlLm5vZGVzWzBdLFthLGkuaWRdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnIsZXhwZWN0ZWQ6dCxub3RlOmkubm90ZSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWVxdWFsaXR5I3JlYWRtZVwifSl9fShbe2lkOlwibGVhcm5pbmctZGlzYWJsZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggbGVhcm5pbmcgZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibGVhcm5pbmcgZGlzYWJsZWRcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC5cIn0se2lkOlwiaW52YWxpZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0dXJuZWQgb2ZmXCI6XCJhXCIsXCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkaXNhYmxlZDpcImFcIixpbnZhbGlkOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGRpc2FiaWxpdHksIGZpcnN0LlwifSx7aWQ6XCJiaXJ0aC1kZWZlY3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaXJ0aCBkZWZlY3RcIjpcImFcIn0sbm90ZTpcIkFzc3VtZXMvaW1wbGllcyB0aGF0IGEgcGVyc29uIHdpdGggYSBkaXNhYmlsaXR5IGlzIGRlZmljaWVudCBvciBpbmZlcmlvciB0byBvdGhlcnMuIFdoZW4gcG9zc2libGUsIHNwZWNpZnkgdGhlIGZ1bmN0aW9uYWwgYWJpbGl0eSBvciBpdHMgcmVzdHJpY3Rpb24uIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJzdWZmZXJzLWZyb20tZGlzYWJpbGl0aWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcyBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhIGRpc2FiaWxpdHlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzIHRoYXQgYSBwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHkgaGFzIGEgcmVkdWNlZCBxdWFsaXR5IG9mIGxpZmUuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJpbnRlbGxlY3R1YWxseS1kaXNhYmxlZC1wZW9wbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImludGVsbGVjdHVhbGx5IGRpc2FibGVkIHBlb3BsZVwiOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGRpc2FiaWxpdHksIGZpcnN0LiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaW50ZWxsZWN0dWFsbHktZGlzYWJsZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnRlbGxlY3R1YWxseSBkaXNhYmxlZFwiOlwiYVwiLFwiaGFzIGludGVsbGVjdHVhbCBpc3N1ZXNcIjpcImFcIixcInN1ZmZlcnMgZnJvbSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhbiBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eVwiOlwiYVwifSxub3RlOlwiQXNzdW1lcyB0aGF0IGEgcGVyc29uIHdpdGggYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkgaGFzIGEgcmVkdWNlZCBxdWFsaXR5IG9mIGxpZmUuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJudXRzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntydWRlOlwiYVwiLG1hbGljaW91czpcImFcIixtZWFuOlwiYVwiLGRpc2d1c3Rpbmc6XCJhXCIsaW5jcmVkaWJsZTpcImFcIix2aWxlOlwiYVwiLFwicGVyc29uIHdpdGggc3ltcHRvbXMgb2YgbWVudGFsIGlsbG5lc3NcIjpcImFcIixcInBlcnNvbiB3aXRoIG1lbnRhbCBpbGxuZXNzXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBzeW1wdG9tcyBvZiBhIG1lbnRhbCBkaXNvcmRlclwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBtZW50YWwgZGlzb3JkZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmF0c2hpdDpcImFcIixwc3ljaG86XCJhXCIsY3Jhenk6XCJhXCIsZGVsaXJpb3VzOlwiYVwiLGluc2FuZTpcImFcIixpbnNhbml0eTpcImFcIixsb29ueTpcImFcIixsdW5hY3k6XCJhXCIsbHVuYXRpYzpcImFcIixcIm1lbnRhbGx5IGlsbFwiOlwiYVwiLHBzeWNob3BhdGhvbG9neTpcImFcIixcIm1lbnRhbCBkZWZlY3RpdmVcIjpcImFcIixtb3JvbjpcImFcIixtb3JvbmljOlwiYVwiLG51dHM6XCJhXCIsXCJtZW50YWwgY2FzZVwiOlwiYVwiLG1lbnRhbDpcImFcIn0sbm90ZTpcIkRlc2NyaWJlIHRoZSBiZWhhdmlvciBvciBpbGxuZXNzIHdpdGhvdXQgZGVyb2dhdG9yeSB3b3Jkcy4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImluc2FuZWx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbmNyZWRpYmx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNhbmVseTpcImFcIn0sbm90ZTpcIkRlc2NyaWJlIHRoZSBiZWhhdmlvciBvciBpbGxuZXNzIHdpdGhvdXQgZGVyb2dhdG9yeSB3b3Jkcy5cIn0se2lkOlwic2FuZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y29ycmVjdDpcImFcIixhZGVxdWF0ZTpcImFcIixzdWZmaWNpZW50OlwiYVwiLGNvbnNpc3RlbnQ6XCJhXCIsdmFsaWQ6XCJhXCIsY29oZXJlbnQ6XCJhXCIsc2Vuc2libGU6XCJhXCIscmVhc29uYWJsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FuZTpcImFcIn0sbm90ZTpcIldoZW4gZGVzY3JpYmluZyBhIG1hdGhlbWF0aWNhbCBvciBwcm9ncmFtbWF0aWMgdmFsdWUsIHVzaW5nIHRoZSB3b3JkIOKAnHNhbmXigJ0gbmVlZGxlc3NseSBpbnZva2VzIHRoZSB0b3BpYyBvZiBtZW50YWwgaGVhbHRoLiAgQ29uc2lkZXIgdXNpbmcgYSBkb21haW4tc3BlY2lmaWMgb3IgbmV1dHJhbCB0ZXJtIGluc3RlYWQuXCJ9LHtpZDpcInNhbml0eS1jaGVja1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2hlY2s6XCJhXCIsYXNzZXJ0aW9uOlwiYVwiLHZhbGlkYXRpb246XCJhXCIsXCJzbW9rZSB0ZXN0XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2FuaXR5IGNoZWNrXCI6XCJhXCJ9LG5vdGU6XCJXaGVuIGRlc2NyaWJpbmcgYSBtYXRoZW1hdGljYWwgb3IgcHJvZ3JhbW1hdGljIHZhbHVlLCB1c2luZyB0aGUgcGhyYXNlIOKAnHNhbml0eSBjaGVja+KAnSBuZWVkbGVzc2x5IGludm9rZXMgdGhlIHRvcGljIG9mIG1lbnRhbCBoZWFsdGguICBDb25zaWRlciB1c2luZyBzaW1wbHkg4oCcY2hlY2vigJ0sIG9yIGEgZG9tYWluLXNwZWNpZmljIG9yIG5ldXRyYWwgdGVybSwgaW5zdGVhZC5cIn0se2lkOlwiYmlwb2xhclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Zmx1Y3R1YXRpbmc6XCJhXCIsXCJwZXJzb24gd2l0aCBiaXBvbGFyIGRpc29yZGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpcG9sYXI6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic2NoaXpvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2NoaXpvcGhyZW5pYzpcImFcIixzY2hpem86XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwibWFuaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggc2NoaXpvcGhyZW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBzY2hpem9waHJlbmlhXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBzY2hpem9waHJlbmlhXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBzY2hpem9waHJlbmlhXCI6XCJhXCIsbWFuaWM6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzIGEgcGVyc29uIHdpdGggc2NoaXpvcGhyZW5pYSBleHBlcmllbmNlcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaGFuZGljYXBwZWQtcGFya2luZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhY2Nlc3NpYmxlIHBhcmtpbmdcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJoYW5kaWNhcHBlZCBwYXJraW5nXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImhhbmRpY2FwcGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgaGFuZGljYXBcIjpcImFcIixhY2Nlc3NpYmxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5kaWNhcHBlZDpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFtcHV0ZWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYW4gYW1wdXRhdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbXB1dGVlOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGNvbmRpdGlvbiwgZmlyc3QuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJnaW1wXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgbGltcFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjcmlwcGxlOlwiYVwiLGNyaXBwbGVkOlwiYVwiLGdpbXA6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgc3BlY2lmaWMgZGlzYWJpbGl0eS5cIn0se2lkOlwibW9uZ29sb2lkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIERvd24gU3luZHJvbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW9uZ29sb2lkOlwiYVwifX0se2lkOlwic3Ryb2tlLXZpY3RpbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJpbmRpdmlkdWFsIHdobyBoYXMgaGFkIGEgc3Ryb2tlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3Ryb2tlIHZpY3RpbVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBzdHJva2VcIjpcImFcIixcInZpY3RpbSBvZiBhIHN0cm9rZVwiOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGNvbmRpdGlvbiwgZmlyc3QuXCJ9LHtpZDpcIm11bHRpcGxlLXNjbGVyb3Npcy12aWN0aW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCIsXCJ2aWN0aW0gb2YgbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCIsXCJtdWx0aXBsZSBzY2xlcm9zaXMgdmljdGltXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBtdWx0aXBsZSBzY2xlcm9zaXNcIjpcImFcIn19LHtpZDpcInN1ZmZlcnMtZnJvbS1tZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIGhhcyBtdXNjdWxhciBkeXN0cm9waHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJzIGZyb20gbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBtdXNjdWxhciBkeXN0cm9waHlcIjpcImFcIixcInN1ZmZlcnMgZnJvbSBNRFwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggTURcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIGEgcGVyc29uJ3MgY29uZGl0aW9uIGFzIGEgc3RhdGUsIG5vdCBhcyBhbiBhZmZsaWN0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlKVwifSx7aWQ6XCJmYW1pbHktYnVyZGVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIndpdGggZmFtaWx5IHN1cHBvcnQgbmVlZHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYW1pbHkgYnVyZGVuXCI6XCJhXCJ9fSx7aWQ6XCJhc3lsdW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicHN5Y2hpYXRyaWMgaG9zcGl0YWxcIjpcImFcIixcIm1lbnRhbCBoZWFsdGggaG9zcGl0YWxcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXN5bHVtOlwiYVwifX0se2lkOlwiYmVkbGFtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjaGFvczpcImFcIixoZWN0aWM6XCJhXCIscGFuZGVtb25pdW06XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JlZGxhbTpcImFcIixtYWRob3VzZTpcImFcIixcImxvb255IGJpblwiOlwiYVwifX0se2lkOlwiZG93bnMtc3luZHJvbWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiRG93biBTeW5kcm9tZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRvd25zIHN5bmRyb21lXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbWVkaWEuc3BlY2lhbG9seW1waWNzLm9yZy9zb2kvZmlsZXMvcHJlc3Mta2l0LzIwMTRfRmFjdFNoZWV0X0ZpbmFsLnBkZlwifSx7aWQ6XCJyZXRhcmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbGx5OlwiYVwiLGR1bGxhcmQ6XCJhXCIsXCJwZXJzb24gd2l0aCBEb3duIFN5bmRyb21lXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBkZXZlbG9wbWVudGFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLGRlbGF5OlwiYVwiLFwiaG9sZCBiYWNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JldGFyZDpcImFcIixyZXRhcmRlZDpcImFcIixcInNob3J0IGJ1c1wiOlwiYVwifX0se2lkOlwicmV0YXJkc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2lsbGllczpcImFcIixkdWxsYXJkczpcImFcIixcInBlb3BsZSB3aXRoIGRldmVsb3BtZW50YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBEb3du4oCZcyBTeW5kcm9tZVwiOlwiYVwiLGRlbGF5czpcImFcIixcImhvbGRzIGJhY2tcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmV0YXJkczpcImFcIn19LHtpZDpcInBzeWNob3RpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIHBzeWNob3RpYyBjb25kaXRpb25cIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3Npc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwc3ljaG90aWM6XCJhXCIsXCJzdWZmZXJzIGZyb20gcHN5Y2hvc2lzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBwc3ljaG9zaXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIHBzeWNob3Npc1wiOlwiYVwiLFwidmljdGltIG9mIHBzeWNob3Npc1wiOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi5cIn0se2lkOlwibGFtZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Ym9yaW5nOlwiYVwiLGR1bGw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbWU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImFpZHMtdmljdGltXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIEFJRFNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJpbmcgZnJvbSBhaWRzXCI6XCJhXCIsXCJzdWZmZXIgZnJvbSBhaWRzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gYWlkc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYWlkc1wiOlwiYVwiLFwidmljdGltIG9mIGFpZHNcIjpcImFcIixcImFpZHMgdmljdGltXCI6XCJhXCJ9fSx7aWQ6XCJ3aGVlbGNoYWlyLWJvdW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInVzZXMgYSB3aGVlbGNoYWlyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29uZmluZWQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJib3VuZCB0byBhIHdoZWVsY2hhaXJcIjpcImFcIixcInJlc3RyaWN0ZWQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJ3aGVlbGNoYWlyIGJvdW5kXCI6XCJhXCJ9fSx7aWQ6XCJzcGVjaWFsLW9seW1waWFuc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZXM6XCJhXCIsXCJTcGVjaWFsIE9seW1waWNzIGF0aGxldGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3BlY2lhbCBvbHltcGlhbnNcIjpcImFcIixcInNwZWNpYWwgb2x5bXBpYyBhdGhsZXRlc1wiOlwiYVwifSxub3RlOlwiV2hlbiBwb3NzaWJsZSwgdXNlIHRoZSBleGFjdCBkaXNjaXBsaW5lIG9mIHNwb3J0LiAoc291cmNlOiBodHRwczovL21lZGlhLnNwZWNpYWxvbHltcGljcy5vcmcvc29pL2ZpbGVzL3ByZXNzLWtpdC8yMDE0X0ZhY3RTaGVldF9GaW5hbC5wZGYpXCJ9LHtpZDpcImFibGVib2RpZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wibm9uLWRpc2FibGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FibGVib2RpZWQ6XCJhXCJ9LG5vdGU6XCJDYW4gaW1wbHkgdGhhdCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgbGFjayB0aGUgYWJpbGl0eSB0byB1c2UgdGhlaXIgYm9kaWVzIHdlbGwuIFNvbWV0aW1lcyBgdHlwaWNhbGAgY2FuIGJlIHVzZWQuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhZGRpY3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBkcnVnIGFkZGljdGlvblwiOlwiYVwiLFwicGVyc29uIHJlY292ZXJpbmcgZnJvbSBhIGRydWcgYWRkaWN0aW9uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FkZGljdDpcImFcIixqdW5raWU6XCJhXCJ9LG5vdGU6XCJBZGRpY3Rpb24gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFkZGljdHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggYSBkcnVnIGFkZGljdGlvblwiOlwiYVwiLFwicGVvcGxlIHJlY292ZXJpbmcgZnJvbSBhIGRydWcgYWRkaWN0aW9uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FkZGljdHM6XCJhXCIsanVua2llczpcImFcIn0sbm90ZTpcIkFkZGljdGlvbiBpcyBhIG5ldXJvYmlvbG9naWNhbCBkaXNlYXNlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiYWxjb2hvbGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNvbWVvbmUgd2l0aCBhbiBhbGNvaG9sIHByb2JsZW1cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWxjb2hvbGljOlwiYVwiLFwiYWxjb2hvbCBhYnVzZXJcIjpcImFcIn0sbm90ZTpcIkFsY29ob2xpc20gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImRlYWZtdXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkZWFmOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRlYWYgYW5kIGR1bWJcIjpcImFcIixkZWFmbXV0ZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic2VuaWxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGRlbWVudGlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RlbWVudGVkOlwiYVwiLHNlbmlsZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiZGVwcmVzc2VkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzYWQ6XCJhXCIsYmx1ZTpcImFcIixcImJ1bW1lZCBvdXRcIjpcImFcIixcInBlcnNvbiB3aXRoIHNlYXNvbmFsIGFmZmVjdGl2ZSBkaXNvcmRlclwiOlwiYVwiLFwicGVyc29uIHdpdGggcHN5Y2hvdGljIGRlcHJlc3Npb25cIjpcImFcIixcInBlcnNvbiB3aXRoIHBvc3RwYXJ0dW0gZGVwcmVzc2lvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkZXByZXNzZWQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImR3YXJmXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGR3YXJmaXNtXCI6XCJhXCIsXCJsaXR0bGUgcGVyc29uXCI6XCJhXCIsXCJsaXR0bGUgcGVvcGxlXCI6XCJhXCIsTFA6XCJhXCIsXCJwZXJzb24gb2Ygc2hvcnQgc3RhdHVyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInZlcnRpY2FsbHkgY2hhbGxlbmdlZFwiOlwiYVwiLG1pZGdldDpcImFcIixcInNtYWxsIHBlcnNvblwiOlwiYVwiLGR3YXJmOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLyxodHRwczovL3d3dy5scGFvbmxpbmUub3JnL2ZhcS0jTWlkZ2V0XCJ9LHtpZDpcImR5c2xleGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGR5c2xleGlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2R5c2xleGljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJlcGlsZXB0aWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggZXBpbGVwc3lcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXBpbGVwdGljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJoZWFyaW5nLWltcGFpcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcmQgb2YgaGVhcmluZ1wiOlwiYVwiLFwicGFydGlhbGx5IGRlYWZcIjpcImFcIixcInBhcnRpYWwgaGVhcmluZyBsb3NzXCI6XCJhXCIsZGVhZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJoZWFyaW5nIGltcGFpcmVkXCI6XCJhXCIsXCJoZWFyaW5nIGltcGFpcm1lbnRcIjpcImFcIn0sbm90ZTpcIldoZW4gcG9zc2libGUsIGFzayB0aGUgcGVyc29uIHdoYXQgdGhleSBwcmVmZXIuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJ2aWN0aW0tb2YtcG9saW9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BvbGlvOlwiYVwiLFwicGVyc29uIHdobyBoYWQgcG9saW9cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbmZhbnRpbGUgcGFyYWx5c2lzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gcG9saW9cIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIHBvbGlvXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhIHBvbGlvXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBwb2xpb1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBwb2xpb1wiOlwiYVwiLFwidmljdGltIG9mIHBvbGlvXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInZpY3RpbS1vZi1hbi1pbmp1cnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VzdGFpbiBhbiBpbmp1cnlcIjpcImFcIixcInJlY2VpdmUgYW4gaW5qdXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVyIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhbiBpbmp1cnlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGFuIGluanVyeVwiOlwiYVwiLFwidmljdGltIG9mIGFuIGluanVyeVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJ2aWN0aW0tb2YtaW5qdXJpZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VzdGFpbiBpbmp1cmllc1wiOlwiYVwiLFwicmVjZWl2ZSBpbmp1cmllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlciBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gaW5qdXJpZXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBpbmp1cmllc1wiOlwiYVwiLFwidmljdGltIG9mIGluanVyaWVzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInBhcmFwbGVnaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcGFyYXBsZWdpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwYXJhcGxlZ2ljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJxdWFkcmlwbGVnaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcXVhZHJpcGxlZ2lhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1YWRyaXBsZWdpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3BhelwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBjZXJlYnJhbCBwYWxzeVwiOlwiYVwiLHR3aXRjaDpcImFcIixmbGluY2g6XCJhXCIsaGVjdGljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGF6OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJzcGFzdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGNlcmVicmFsIHBhbHN5XCI6XCJhXCIsdHdpdGNoOlwiYVwiLGZsaW5jaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bhc3RpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3RhbW1lcmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c3R1dHRlcmluZzpcImFcIixcImRpc2ZsdWVuY3kgb2Ygc3BlZWNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0YW1tZXJpbmc6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInN0dXR0ZXJlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIHN0dXR0ZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0dXR0ZXJlcjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwidG91cmV0dGVzLXN5bmRyb21lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIlRvdXJldHRlIHN5bmRyb21lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widG91cmV0dGVzIHN5bmRyb21lXCI6XCJhXCIsXCJ0b3VyZXR0ZXMgZGlzb3JkZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicmVoYWItY2VudGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyZWF0bWVudCBjZW50ZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJyZWhhYiBjZW50ZXJcIjpcImFcIixcImRldG94IGNlbnRlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJyZWhhYlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJlYXRtZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZWhhYjpcImFcIixkZXRveDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic29jaW9wYXRoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgcGVyc29uYWxpdHkgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3BhdGhpYyBwZXJzb25hbGl0eVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzb2Npb3BhdGg6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic29jaW9wYXRoc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZW9wbGUgd2l0aCBwc3ljaG9wYXRoaWMgcGVyc29uYWxpdGllc1wiOlwiYVwiLFwicGVvcGxlIHdpdGggYSBwZXJzb25hbGl0eSBkaXNvcmRlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzb2Npb3BhdGhzOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImR1bWJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHNwZWVjaGxlc3M6XCJhXCIsc2lsZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntkdW1iOlwiYVwifSxub3RlOlwiRHVtYiBoZXJlIGlzIHVzZWQgaW4gMiBkaWZmZXJlbnQgY29udGV4dHMgLCB0aGUgaW5hYmlsaXR5IHRvIHRhbGsgb3IgYXMgYSBjdXJzZSB3b3JkLiAoc291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbClcIn0se2lkOlwid2Fja29cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHVuaW50ZWxsaWdlbnQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NpbXBsZXRvbjpcImFcIixzdHVwaWQ6XCJhXCIsd2Fja286XCJhXCIsd2hhY2tvOlwiYVwiLFwibG93IGlxXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHA6Ly93d3cubW1vbmplanIuY29tLzIwMTQvMDIvZGVjb25zdHJ1Y3Rpbmctc3R1cGlkLmh0bWxcIn0se2lkOlwicGFuaWMtYXR0YWNrXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZpdCBvZiB0ZXJyb3JcIjpcImFcIixzY2FyZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJwYW5pYyBhdHRhY2tcIjpcImFcIn19LHtpZDpcImJvbnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RoaW46XCJhXCIsc2xpbTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YW5vcmV4aWM6XCJhXCIsYm9ueTpcImFcIn19LHtpZDpcIm9jZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYW4gYW54aWV0eSBkaXNvcmRlclwiOlwiYVwiLG9ic2Vzc2l2ZTpcImFcIixwZWRhbnRpYzpcImFcIixuaWdnbHk6XCJhXCIscGlja3k6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25ldXJvdGljOlwiYVwiLG9jZDpcImFcIixcIm8uYy5kXCI6XCJhXCIsXCJvLmMuZC5cIjpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uIChzb3VyY2U6IGh0dHBzOi8vZW5nbGlzaC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjQ3NTUwLylcIn0se2lkOlwiaW5zb21uaWFcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Jlc3RsZXNzbmVzczpcImFcIixzbGVlcGxlc3NuZXNzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYTpcImFcIn19LHtpZDpcImluc29tbmlhY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIGhhcyBpbnNvbW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYWM6XCJhXCJ9fSx7aWQ6XCJpbnNvbW5pYWNzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aG8gaGF2ZSBpbnNvbW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYWNzOlwiYVwifX0se2lkOlwiYmFycmVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntlbXB0eTpcImFcIixzdGVyaWxlOlwiYVwiLGluZmVydGlsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmFycmVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJkZWFmLXRvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjYXJlbGVzczpcImFcIixoZWFydGxlc3M6XCJhXCIsaW5kaWZmZXJlbnQ6XCJhXCIsaW5zZW5zaXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmxpbmQgdG9cIjpcImFcIixcImJsaW5kIGV5ZSB0b1wiOlwiYVwiLFwiYmxpbmRlZCBieVwiOlwiYVwiLFwiZGVhZiB0b1wiOlwiYVwiLFwiZGVhZiBlYXIgdG9cIjpcImFcIixcImRlYWZlbmVkIGJ5XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImNyZXRpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y3JlZXA6XCJhXCIsZm9vbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y3JldGluOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJkYWZ0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthYnN1cmQ6XCJhXCIsZm9vbGlzaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFmdDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiaWRpb3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHNpbGx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZWVibGVtaW5kZWQ6XCJhXCIsXCJmZWVibGUgbWluZGVkXCI6XCJhXCIsaWRpb3Q6XCJhXCIsaW1iZWNpbGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImhhcmVsaXBwZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBjbGVmdC1saXAgYW5kIHBhbGF0ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYXJlbGlwcGVkOlwiYVwiLGNsZWZ0bGlwcGVkOlwiYVwifSxub3RlOlwiU29tZXRpbWVzIGl0J3MgY2xlZnQgbGlwIG9yIHBhbGF0ZSwgbm90IGJvdGguIFNwZWNpZnkgd2hlbiBwb3NzaWJsZS4gKHNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWwpXCJ9LHtpZDpcImhhcmVsaXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY2xlZnQtbGlwIGFuZCBwYWxhdGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFyZWxpcDpcImFcIixcImhhcmUgbGlwXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcIm1hbmlhY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsZW50aHVzaWFzdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFuaWFjOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJidWNrdGVldGhcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcHJvbWluZW50IHRlZXRoXCI6XCJhXCIsXCJwcm9taW5lbnQgdGVldGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVja3Rvb3RoZWQ6XCJhXCIsYnVja3RlZXRoOlwiYVwifX0se2lkOlwic3BlY2lhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaGFsbGVuZ2VkOlwiYVwiLGRpZmZhYmlsaXR5OlwiYVwiLFwiZGlmZmVyZW50bHkgYWJsZWRcIjpcImFcIixoYW5kaWNhcGFibGU6XCJhXCIsc3BlY2lhbDpcImFcIixcInNwZWNpYWwgbmVlZHNcIjpcImFcIixcInNwZWNpYWxseSBhYmxlZFwiOlwiYVwifSxub3RlOlwiRXVwaGVtaXNtcyBmb3IgZGlzYWJpbGl0aWVzIGNhbiBiZSBpbmZhbnRpbGl6aW5nLiAoc291cmNlOiBodHRwOi8vY2RybnlzLm9yZy9ibG9nL2Rpc2FiaWxpdHktZGlhbG9ndWUvdGhlLWRpc2FiaWxpdHktZGlhbG9ndWUtNC1kaXNhYmlsaXR5LWV1cGhlbWlzbXMtdGhhdC1uZWVkLXRvLWJpdGUtdGhlLWR1c3QvLGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sKVwifSx7aWQ6XCJsaWJ0YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXNhZ3JlZWFibGU6XCJhXCIsdW5lZHVjYXRlZDpcImFcIixpZ25vcmFudDpcImFcIixuYWl2ZTpcImFcIixpbmNvbnNpZGVyYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmdWNrdGFyZDpcImFcIixsaWJ0YXJkOlwiYVwiLGNvbnRhcmQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImFkZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzb3JnYW5pemVkOlwiYVwiLGRpc3RyYWN0ZWQ6XCJhXCIsZW5lcmdldGljOlwiYVwiLGh5cGVyYWN0aXZlOlwiYVwiLGltcGV0dW91czpcImFcIixpbXB1bHNpdmU6XCJhXCIsaW5hdHRlbnRpdmU6XCJhXCIscmVzdGxlc3M6XCJhXCIsdW5mb2N1c2VkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntBREQ6XCJhXCIsYWRoZDpcImFcIixcImEuZC5kLlwiOlwiYVwiLFwiYS5kLmguZC5cIjpcImFcIn19LHtpZDpcImR1bW15XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRlc3QgZG91YmxlXCI6XCJhXCIscGxhY2Vob2xkZXI6XCJhXCIsZmFrZTpcImFcIixzdHViOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkdW1teXZhcmlhYmxlOlwiYVwiLGR1bW15dmFsdWU6XCJhXCIsZHVtbXlvYmplY3Q6XCJhXCIsZHVtbXk6XCJhXCJ9LG5vdGU6XCJEdW1teSBjYW4gcmVmZXIgdG8gdGhlIGluYWJpbGl0eSB0byB0YWxrIG9yIGJlIHVzZWQgYXMgYSBkZXJvZ2F0b3J5IHdvcmQgbWVhbmluZyBzdHVwaWQuIEluIGNvbXB1dGVyIHByb2dyYW1taW5nIGl0IGlzIHVzZWQgd2hlcmUgYSB2YWx1ZSBvciBiZWhhdmlvciBpcyB1bmltcG9ydGFudC4gVGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIHVzZSBjYXNlcyBhbHNvLlwifSx7aWQ6XCJiaW5nZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZW50aHVzaWFzdGljOlwiYVwiLHNwcmVlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaW5nZTpcImFcIn0sbm90ZTpcIkJpbmdlIG1pZ2h0IGJlIGluc2Vuc2l0aXZlIHRvd2FyZHMgZm9sa3Mgd2l0aCBlYXRpbmcgb3IgZHJpbmtpbmcgZGlzb3JkZXJzIChzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtZXF1YWxpdHkvaXNzdWVzLzExMClcIn0se2lkOlwib2J2aW91c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntvYnZpb3VzOlwiYVwiLG9idmlvdXNseTpcImFcIn0sbm90ZTpcIk5vdCBldmVyeXRoaW5nIGlzIGFzIG9idmlvdXMgYXMgeW91IG1pZ2h0IHRoaW5rLiBBbmQgaWYgaXQgaXNu4oCZdCBvYnZpb3VzIHRvIHRoZSByZWFkZXIsIGl0IGNhbiBodXJ0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJqdXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2p1c3Q6XCJhXCJ9LG5vdGU6XCJOb3QgZXZlcnl0aGluZyBpcyBhcyBlYXN5IGFzIHlvdSBtaWdodCB0aGluay4gQW5kIGlmIGl0IGlzbuKAmXQgZWFzeSBmb3IgdGhlIHJlYWRlciwgaXQgY2FuIGh1cnQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImJhc2ljYWxseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntiYXNpY2FsbHk6XCJhXCJ9LG5vdGU6XCJJdOKAmXMgcHJvYmFibHkgbm90IHRoYXQgYmFzaWMuIElmIHlvdeKAmXJlIGdvaW5nIHRvIGV4cGxhaW4gYSBjb25mdXNpbmcgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBhIGNsZWFyZXIgbmV4dCBzZW50ZW5jZSwgd2h5IG5vdCBkcm9wIHRoZSBmb3JtZXIgYW5kIG9ubHkgdXNlIHRoZSBsYXR0ZXI/IChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcInNpbXBsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntzaW1wbGU6XCJhXCIsc2ltcGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IHNpbXBsZS4gRXZlbiBpZiBpdCBpcywgeW91IHByb2JhYmx5IGRvbuKAmXQgbmVlZCB0byBzcGVjaWZpY2FsbHkgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJlYXN5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2Vhc3k6XCJhXCIsZWFzaWx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IGVhc3kuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwib2YtY291cnNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wib2YgY291cnNlXCI6XCJhXCJ9LG5vdGU6XCJJZiBpdOKAmXMgc2VsZi1ldmlkZW50IHRoZW4gbWF5YmUgeW91IGRvbuKAmXQgbmVlZCB0byBkZXNjcmliZSBpdC4gSWYgaXQgaXNu4oCZdCwgZG9u4oCZdCBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImNsZWFybHlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7Y2xlYXJseTpcImFcIn0sbm90ZTpcIklmIGl04oCZcyBzZWxmLWV2aWRlbnQgdGhlbiBtYXliZSB5b3UgZG9u4oCZdCBuZWVkIHRvIGRlc2NyaWJlIGl0LiBJZiBpdCBpc27igJl0LCBkb27igJl0IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwiZXZlcnlvbmUta25vd3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7XCJldmVyeW9uZSBrbm93c1wiOlwiYVwifSxub3RlOlwiSWYgaXTigJlzIHNlbGYtZXZpZGVudCB0aGVuIG1heWJlIHlvdSBkb27igJl0IG5lZWQgdG8gZGVzY3JpYmUgaXQuIElmIGl0IGlzbuKAmXQsIGRvbuKAmXQgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJzdHJhaWdodGZvcndhcmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7XCJzdHJhaWdodCBmb3J3YXJkXCI6XCJhXCIsc3RyYWlnaHRmb3J3YXJkOlwiYVwiLFwic3RyYWlnaHQgZm9yd2FyZGx5XCI6XCJhXCIsc3RyYWlnaHRmb3J3YXJkbHk6XCJhXCJ9LG5vdGU6XCJJdOKAmXMgcHJvYmFibHkgbm90IHRoYXQgc3RyYWlnaHQgZm9yd2FyZC4gRXZlbiBpZiBpdCBpcywgeW91IHByb2JhYmx5IGRvbuKAmXQgbmVlZCB0byBzcGVjaWZpY2FsbHkgc2F5IGl0LlwifSx7aWQ6XCJoZXItaGltXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RoZWlyOlwiYVwiLHRoZWlyczpcImFcIix0aGVtOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXI6XCJmZW1hbGVcIixoZXJzOlwiZmVtYWxlXCIsaGltOlwibWFsZVwiLGhpczpcIm1hbGVcIn0sY29uZGl0aW9uOlwid2hlbiByZWZlcnJpbmcgdG8gYSBwZXJzb25cIn0se2lkOlwiaGUtc2hlXCIsdHlwZTpcIm9yXCIsYXBvc3Ryb3BoZTohMCxjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGhleTpcImFcIixpdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hlOlwiZmVtYWxlXCIsaGU6XCJtYWxlXCIsXCJzaGUnZFwiOlwiZmVtYWxlXCIsXCJoZSdkXCI6XCJtYWxlXCIsXCJzaGUnbGxcIjpcImZlbWFsZVwiLFwiaGUnbGxcIjpcIm1hbGVcIixcInNoZSdzXCI6XCJmZW1hbGVcIixcImhlJ3NcIjpcIm1hbGVcIn19LHtpZDpcImhlcnNlbGYtaGltc2VsZlwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0aGVtc2VsdmVzOlwiYVwiLHRoZWlyc2VsZjpcImFcIixzZWxmOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXJzZWxmOlwiZmVtYWxlXCIsaGltc2VsZjpcIm1hbGVcIn19LHtpZDpcImJveS1naXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2tpZDpcImFcIixjaGlsZDpcImFcIix5b3V0aDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybDpcImZlbWFsZVwiLGJveTpcIm1hbGVcIn0sY29uZGl0aW9uOlwid2hlbiByZWZlcnJpbmcgdG8gYSBwZXJzb25cIn0se2lkOlwiZ2Fscy1tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVvcGxlOlwiYVwiLHBlcnNvbnM6XCJhXCIsZm9sa3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWVuOlwiZmVtYWxlXCIsZ2lybHM6XCJmZW1hbGVcIixnYWxzOlwiZmVtYWxlXCIsbGFkaWVzOlwiZmVtYWxlXCIsbWFuOlwibWFsZVwiLGJveXM6XCJtYWxlXCIsbWVuOlwibWFsZVwiLGd1eXM6XCJtYWxlXCIsZHVkZXM6XCJtYWxlXCIsZ2VudHM6XCJtYWxlXCIsZ2VudGxlbWVuOlwibWFsZVwifX0se2lkOlwiZ2FsLWd1eVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwZXJzb246XCJhXCIsZnJpZW5kOlwiYVwiLHBhbDpcImFcIixmb2xrOlwiYVwiLGluZGl2aWR1YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWFuOlwiZmVtYWxlXCIsZ2FsOlwiZmVtYWxlXCIsbGFkeTpcImZlbWFsZVwiLGJhYmU6XCJmZW1hbGVcIixiaW1ibzpcImZlbWFsZVwiLGNoaWNrOlwiZmVtYWxlXCIsZ3V5OlwibWFsZVwiLGxhZDpcIm1hbGVcIixmZWxsb3c6XCJtYWxlXCIsZHVkZTpcIm1hbGVcIixicm86XCJtYWxlXCIsZ2VudGxlbWFuOlwibWFsZVwifX0se2lkOlwiZmF0aGVybGFuZC1tb3RoZXJsYW5kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibmF0aXZlIGxhbmRcIjpcImFcIixob21lbGFuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW90aGVybGFuZDpcImZlbWFsZVwiLGZhdGhlcmxhbmQ6XCJtYWxlXCJ9fSx7aWQ6XCJmYXRoZXItdG9uZ3VlLW1vdGhlci10b25ndWVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJuYXRpdmUgdG9uZ3VlXCI6XCJhXCIsXCJuYXRpdmUgbGFuZ3VhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtb3RoZXIgdG9uZ3VlXCI6XCJmZW1hbGVcIixcImZhdGhlciB0b25ndWVcIjpcIm1hbGVcIn19LHtpZDpcImZyZXNobWVuLWZyZXNod29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdC15ZWFyIHN0dWRlbnRzXCI6XCJhXCIsZnJlc2hlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZXNod29tZW46XCJmZW1hbGVcIixmcmVzaG1lbjpcIm1hbGVcIn19LHtpZDpcImdhcmJhZ2VtYW4tZ2FyYmFnZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZ2FyYmFnZSBjb2xsZWN0b3JcIjpcImFcIixcIndhc3RlIGNvbGxlY3RvclwiOlwiYVwiLFwidHJhc2ggY29sbGVjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dhcmJhZ2V3b21hbjpcImZlbWFsZVwiLGdhcmJhZ2VtYW46XCJtYWxlXCJ9fSx7aWQ6XCJnYXJiYWdlbWVuLWdhcmJhZ2V3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImdhcmJhZ2UgY29sbGVjdG9yc1wiOlwiYVwiLFwid2FzdGUgY29sbGVjdG9yc1wiOlwiYVwiLFwidHJhc2ggY29sbGVjdG9yc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnYXJiYWdld29tZW46XCJmZW1hbGVcIixnYXJiYWdlbWVuOlwibWFsZVwifX0se2lkOlwiY2hhaXJtYW4tY2hhaXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGFpcjpcImFcIixoZWFkOlwiYVwiLGNoYWlycGVyc29uOlwiYVwiLGNvb3JkaW5hdG9yOlwiYVwiLFwiY29tbWl0dGVlIGhlYWRcIjpcImFcIixtb2RlcmF0b3I6XCJhXCIsXCJwcmVzaWRpbmcgb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaGFpcndvbWFuOlwiZmVtYWxlXCIsY2hhaXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb21taXR0ZWUtbWFuLWNvbW1pdHRlZS13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvbW1pdHRlZSBtZW1iZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXR0ZWUgd29tYW5cIjpcImZlbWFsZVwiLFwiY29tbWl0dGVlIG1hblwiOlwibWFsZVwifX0se2lkOlwiY293Ym95LWNvd2dpcmxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y293aGFuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y293Z2lybDpcImZlbWFsZVwiLGNvd2JveTpcIm1hbGVcIn19LHtpZDpcImNvd2JveXMtY293Z2lybHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y293aGFuZHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Nvd2dpcmxzOlwiZmVtYWxlXCIsY293Ym95czpcIm1hbGVcIn19LHtpZDpcImNhdHRsZW1hbi1jYXR0bGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSByYW5jaGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdHRsZXdvbWFuOlwiZmVtYWxlXCIsY2F0dGxlbWFuOlwibWFsZVwifX0se2lkOlwiY2F0dGxlbWVuLWNhdHRsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY2F0dGxlIHJhbmNoZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdHRsZXdvbWVuOlwiZmVtYWxlXCIsY2F0dGxlbWVuOlwibWFsZVwifX0se2lkOlwiY2hhaXJtZW4tY2hhaXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGFpcnM6XCJhXCIsY2hhaXJwZXJzb25zOlwiYVwiLGNvb3JkaW5hdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhaXJ3b21lbjpcImZlbWFsZVwiLGNoYWlybWVuOlwibWFsZVwifX0se2lkOlwicG9zdG1hbi1wb3N0d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJtYWlsIGNhcnJpZXJcIjpcImFcIixcImxldHRlciBjYXJyaWVyXCI6XCJhXCIsXCJwb3N0YWwgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Bvc3R3b21hbjpcImZlbWFsZVwiLG1haWx3b21hbjpcImZlbWFsZVwiLHBvc3RtYW46XCJtYWxlXCIsbWFpbG1hbjpcIm1hbGVcIn19LHtpZDpcInBvc3RtZW4tcG9zdHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWFpbCBjYXJyaWVyc1wiOlwiYVwiLFwibGV0dGVyIGNhcnJpZXJzXCI6XCJhXCIsXCJwb3N0YWwgd29ya2Vyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb3N0d29tZW46XCJmZW1hbGVcIixtYWlsd29tZW46XCJmZW1hbGVcIixwb3N0bWVuOlwibWFsZVwiLG1haWxtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjaGljay1jb3AtcG9saWNlbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljZXI6XCJhXCIsXCJwb2xpY2Ugb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb2xpY2V3b21hbjpcImZlbWFsZVwiLHBvbGljZW1hbjpcIm1hbGVcIixcImNoaWNrIGNvcFwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJwb2xpY2VtZW4tcG9saWNld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7b2ZmaWNlcnM6XCJhXCIsXCJwb2xpY2Ugb2ZmaWNlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9saWNld29tZW46XCJmZW1hbGVcIixwb2xpY2VtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGV3YXJkLXN0ZXdhcmRlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmbGlnaHQgYXR0ZW5kYW50XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXdhcmRlc3M6XCJmZW1hbGVcIixzdGV3YXJkOlwibWFsZVwifX0se2lkOlwic3Rld2FyZGVzc2VzLXN0ZXdhcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmxpZ2h0IGF0dGVuZGFudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Rld2FyZGVzc2VzOlwiZmVtYWxlXCIsc3Rld2FyZHM6XCJtYWxlXCJ9fSx7aWQ6XCJjb25ncmVzc21hbi1jb25ncmVzc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWVtYmVyIG9mIGNvbmdyZXNzXCI6XCJhXCIsXCJjb25ncmVzcyBwZXJzb25cIjpcImFcIixsZWdpc2xhdG9yOlwiYVwiLHJlcHJlc2VudGF0aXZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb25ncmVzc3dvbWFuOlwiZmVtYWxlXCIsY29uZ3Jlc3NtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb25ncmVzc21lbi1jb25ncmVzc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWVtYmVycyBvZiBjb25ncmVzc1wiOlwiYVwiLFwiY29uZ3Jlc3MgcGVyc29uc1wiOlwiYVwiLGxlZ2lzbGF0b3JzOlwiYVwiLHJlcHJlc2VudGF0aXZlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y29uZ3Jlc3N3b21lbjpcImZlbWFsZVwiLGNvbmdyZXNzbWVuOlwibWFsZVwifX0se2lkOlwiZmlyZW1hbi1maXJld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJlIGZpZ2h0ZXJcIjpcImFcIixcImZpcmUgb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmaXJld29tYW46XCJmZW1hbGVcIixmaXJlbWFuOlwibWFsZVwifX0se2lkOlwiZmlyZW1lbi1maXJld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJlIGZpZ2h0ZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZpcmV3b21lbjpcImZlbWFsZVwiLGZpcmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJmaXNoZXJtYW4tZmlzaGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmlzaGVyOlwiYVwiLFwiY3JldyBtZW1iZXJcIjpcImFcIixmaXNoZXJmb2xrOlwiYVwiLGFuZ2xlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlzaGVyd29tYW46XCJmZW1hbGVcIixmaXNoZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJmaXNoZXJtZW4tZmlzaGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmlzaGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlzaGVyd29tZW46XCJmZW1hbGVcIixmaXNoZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJicm90aGVyaG9vZC1zaXN0ZXJob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2tpbnNoaXA6XCJhXCIsY29tbXVuaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaXN0ZXJob29kOlwiZmVtYWxlXCIsYnJvdGhlcmhvb2Q6XCJtYWxlXCJ9fSx7aWQ6XCJjb21tb24tZ2lybC1jb21tb24tbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY29tbW9uIHBlcnNvblwiOlwiYVwiLFwiYXZlcmFnZSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21tb24gZ2lybFwiOlwiZmVtYWxlXCIsXCJjb21tb24gbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzYWxhcnltYW4tc2FsYXJ5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJidXNpbmVzcyBleGVjdXRpdmVcIjpcImFcIixlbnRyZXByZW5ldXI6XCJhXCIsXCJidXNpbmVzcyBwZXJzb25cIjpcImFcIixwcm9mZXNzaW9uYWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2J1c2luZXNzd29tYW46XCJmZW1hbGVcIixzYWxhcnl3b21hbjpcImZlbWFsZVwiLGJ1c2luZXNzbWFuOlwibWFsZVwiLHNhbGFyeW1hbjpcIm1hbGVcIn19LHtpZDpcInNhbGFyeW1lbi1zYWxhcnl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImJ1c2luZXNzIGV4ZWN1dGl2ZXNcIjpcImFcIixlbnRyZXByZW5ldXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntidXNpbmVzc3dvbWVuOlwiZmVtYWxlXCIsc2FsYXJ5d29tZW46XCJmZW1hbGVcIixcImNhcmVlciBnaXJsXCI6XCJmZW1hbGVcIixcImNhcmVlciB3b21hblwiOlwiZmVtYWxlXCIsYnVzaW5lc3NtZW46XCJtYWxlXCIsc2FsYXJ5bWVuOlwibWFsZVwifX0se2lkOlwiamFuaXRvci1qYW5pdHJlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlYW5lcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjbGVhbmluZyBsYWR5XCI6XCJmZW1hbGVcIixcImNsZWFuaW5nIGdpcmxcIjpcImZlbWFsZVwiLFwiY2xlYW5pbmcgd29tYW5cIjpcImZlbWFsZVwiLGphbml0cmVzczpcImZlbWFsZVwiLFwiY2xlYW5pbmcgbWFuXCI6XCJtYWxlXCIsXCJjbGVhbmluZyBib3lcIjpcIm1hbGVcIixqYW5pdG9yOlwibWFsZVwifX0se2lkOlwiamFuaXRvcnMtamFuaXRyZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlYW5lcnM6XCJhXCIsaG91c2VrZWVwaW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNsZWFuaW5nIGxhZGllc1wiOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBnaXJsc1wiOlwiZmVtYWxlXCIsamFuaXRyZXNzZXM6XCJmZW1hbGVcIixcImNsZWFuaW5nIG1lblwiOlwibWFsZVwiLGphbml0b3JzOlwibWFsZVwifX0se2lkOlwiZGVsaXZlcnktYm95LWRlbGl2ZXJ5LWdpcmxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y291cmllcjpcImFcIixtZXNzZW5nZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZGVsaXZlcnkgZ2lybFwiOlwiZmVtYWxlXCIsXCJkZWxpdmVyeSBib3lcIjpcIm1hbGVcIn19LHtpZDpcImZvcmVtYW4tZm9yZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3N1cGVydmlzb3I6XCJhXCIsXCJzaGlmdCBib3NzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmV3b21hbjpcImZlbWFsZVwiLGZvcmVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJmcm9udG1hbiwtZnJvbnQtbWFuLWZyb250d29tYW4sLWZyb250LXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2xlYWQ6XCJhXCIsZnJvbnQ6XCJhXCIsZmlndXJlaGVhZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmcm9udHdvbWFuLCBmcm9udCB3b21hblwiOlwiZmVtYWxlXCIsXCJmcm9udG1hbiwgZnJvbnQgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcm9udC1tZW4sLWZyb250bWVuLWZyb250LXdvbWVuLC1mcm9udHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZpZ3VyZWhlYWRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZyb250IHdvbWVuLCBmcm9udHdvbWVuXCI6XCJmZW1hbGVcIixcImZyb250IG1lbiwgZnJvbnRtZW5cIjpcIm1hbGVcIn19LHtpZDpcImZvcmVtZW4tZm9yZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3N1cGVydmlzb3JzOlwiYVwiLFwic2hpZnQgYm9zc2VzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmV3b21lbjpcImZlbWFsZVwiLGZvcmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJpbnN1cmFuY2UtbWFuLWluc3VyYW5jZS13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImluc3VyYW5jZSBhZ2VudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluc3VyYW5jZSB3b21hblwiOlwiZmVtYWxlXCIsXCJpbnN1cmFuY2UgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJpbnN1cmFuY2UtbWVuLWluc3VyYW5jZS13b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImluc3VyYW5jZSBhZ2VudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2Ugd29tZW5cIjpcImZlbWFsZVwiLFwiaW5zdXJhbmNlIG1lblwiOlwibWFsZVwifX0se2lkOlwibGFuZGxhZHktbGFuZGxvcmRcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvcHJpZXRvcjpcImFcIixcImJ1aWxkaW5nIG1hbmFnZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFuZGxhZHk6XCJmZW1hbGVcIixsYW5kbG9yZDpcIm1hbGVcIn19LHtpZDpcImxhbmRsYWRpZXMtbGFuZGxvcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb3ByaWV0b3JzOlwiYVwiLFwiYnVpbGRpbmcgbWFuYWdlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFuZGxhZGllczpcImZlbWFsZVwiLGxhbmRsb3JkczpcIm1hbGVcIn19LHtpZDpcImFsdW1uYS1hbHVtbnVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYWR1YXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbHVtbmE6XCJmZW1hbGVcIixhbHVtbnVzOlwibWFsZVwifX0se2lkOlwiYWx1bW5hZS1hbHVtbmlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhZHVhdGVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbHVtbmFlOlwiZmVtYWxlXCIsYWx1bW5pOlwibWFsZVwifX0se2lkOlwibmV3c21hbi1uZXdzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YW5jaG9yOlwiYVwiLGpvdXJuYWxpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25ld3N3b21hbjpcImZlbWFsZVwiLG5ld3NwYXBlcndvbWFuOlwiZmVtYWxlXCIsYW5jaG9yd29tYW46XCJmZW1hbGVcIixuZXdzbWFuOlwibWFsZVwiLG5ld3NwYXBlcm1hbjpcIm1hbGVcIixhbmNob3JtYW46XCJtYWxlXCJ9fSx7aWQ6XCJuZXdzbWVuLW5ld3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNob3JzOlwiYVwiLGpvdXJuYWxpc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXdzd29tZW46XCJmZW1hbGVcIixuZXdzcGFwZXJ3b21lbjpcImZlbWFsZVwiLGFuY2hvcndvbWVuOlwiZmVtYWxlXCIsbmV3c21lbjpcIm1hbGVcIixuZXdzcGFwZXJtZW46XCJtYWxlXCIsYW5jaG9ybWVuOlwibWFsZVwifX0se2lkOlwicmVwYWlybWFuLXJlcGFpcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3JlcGFpcmVyOlwiYVwiLHRlY2huaWNpYW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JlcGFpcndvbWFuOlwiZmVtYWxlXCIscmVwYWlybWFuOlwibWFsZVwifX0se2lkOlwicmVwYWlybWVuLXJlcGFpcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RlY2huaWNpYW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXBhaXJ3b21lbjpcImZlbWFsZVwiLHJlcGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcInNhbGVzbGFkeS1zYWxlc21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzYWxlc3BlcnNvbjpcImFcIixcInNhbGVzIGNsZXJrXCI6XCJhXCIsXCJzYWxlcyByZXBcIjpcImFcIixcInNhbGVzIGFnZW50XCI6XCJhXCIsXCJzYWxlcyBhdHRlbmRhbnRcIjpcImFcIixzZWxsZXI6XCJhXCIsXCJzaG9wIGFzc2lzdGFudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYWxlc3dvbWFuOlwiZmVtYWxlXCIsXCJzYWxlcyB3b21hblwiOlwiZmVtYWxlXCIsc2FsZXNsYWR5OlwiZmVtYWxlXCIsc2FsZXNtYW46XCJtYWxlXCIsXCJzYWxlcyBtYW5cIjpcIm1hbGVcIn19LHtpZDpcInNhbGVzbWVuLXNhbGVzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzYWxlcyBjbGVya3NcIjpcImFcIixcInNhbGVzIHJlcHNcIjpcImFcIixcInNhbGVzIGFnZW50c1wiOlwiYVwiLHNlbGxlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbGVzd29tZW46XCJmZW1hbGVcIixcInNhbGVzIHdvbWVuXCI6XCJmZW1hbGVcIixzYWxlc2xhZGllczpcImZlbWFsZVwiLHNhbGVzbWVuOlwibWFsZVwiLFwic2FsZXMgbWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzZXJ2aWNlbWFuLXNlcnZpY2V3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzb2xkaWVyOlwiYVwiLFwic2VydmljZSByZXByZXNlbnRhdGl2ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXJ2aWNld29tYW46XCJmZW1hbGVcIixzZXJ2aWNlbWFuOlwibWFsZVwifX0se2lkOlwic2VydmljZW1lbi1zZXJ2aWNld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c29sZGllcnM6XCJhXCIsXCJzZXJ2aWNlIHJlcHJlc2VudGF0aXZlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXJ2aWNld29tZW46XCJmZW1hbGVcIixzZXJ2aWNlbWVuOlwibWFsZVwifX0se2lkOlwid2FpdGVyLXdhaXRyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NlcnZlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2FpdHJlc3M6XCJmZW1hbGVcIix3YWl0ZXI6XCJtYWxlXCJ9fSx7aWQ6XCJ3YWl0ZXJzLXdhaXRyZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2VydmVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2FpdHJlc3NlczpcImZlbWFsZVwiLHdhaXRlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJ3b3JrbWFuLXdvcmt3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3b3JrZXI6XCJhXCIsXCJ3YWdlIGVhcm5lclwiOlwiYVwiLHRheHBheWVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b3Jrd29tYW46XCJmZW1hbGVcIixcIndvcmtpbmcgd29tYW5cIjpcImZlbWFsZVwiLHdvcmttYW46XCJtYWxlXCIsXCJ3b3JraW5nIG1hblwiOlwibWFsZVwifX0se2lkOlwid29ya21lbi13b3Jrd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d29ya2VyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya3dvbWVuOlwiZmVtYWxlXCIsd29ya21lbjpcIm1hbGVcIn19LHtpZDpcImFjdG9yLWFjdHJlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVyZm9ybWVyOlwiYVwiLHN0YXI6XCJhXCIsYXJ0aXN0OlwiYVwiLGVudGVydGFpbmVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthY3RyZXNzOlwiZmVtYWxlXCIsYWN0b3I6XCJtYWxlXCJ9fSx7aWQ6XCJhY3RvcnMtYWN0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BlcmZvcm1lcnM6XCJhXCIsc3RhcnM6XCJhXCIsYXJ0aXN0czpcImFcIixlbnRlcnRhaW5lcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FjdHJlc3NlczpcImZlbWFsZVwiLGFjdG9yczpcIm1hbGVcIn19LHtpZDpcImFpcmNyZXd3b21hbi1haXJtYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGlsb3Q6XCJhXCIsYXZpYXRvcjpcImFcIixhaXJzdGFmZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWlyY3Jld3dvbWFuOlwiZmVtYWxlXCIsXCJhaXJjcmV3IHdvbWFuXCI6XCJmZW1hbGVcIixhaXJjcmV3bWFuOlwibWFsZVwiLGFpcm1hbjpcIm1hbGVcIn19LHtpZDpcImFpcmNyZXd3b21lbi1haXJtZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGlsb3RzOlwiYVwiLGF2aWF0b3JzOlwiYVwiLGFpcnN0YWZmOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthaXJjcmV3d29tZW46XCJmZW1hbGVcIixcImFpcmNyZXcgd29tZW5cIjpcImZlbWFsZVwiLGFpcmNyZXdtZW46XCJtYWxlXCIsYWlybWVuOlwibWFsZVwifX0se2lkOlwiYWxkZXJtYW4tYWxkZXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhYmluZXQgbWVtYmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FsZGVyd29tYW46XCJmZW1hbGVcIixhbGRlcm1hbjpcIm1hbGVcIn19LHtpZDpcImFsZGVybWVuLWFsZGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2FiaW5ldDpcImFcIixcImNhYmluZXQgbWVtYmVyc1wiOlwiYVwiLGFsZGVycGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbGRlcndvbWVuOlwiZmVtYWxlXCIsYWxkZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJhc3NlbWJseW1hbi1hc3NlbWJseXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYXNzZW1ibHkgcGVyc29uXCI6XCJhXCIsXCJhc3NlbWJseSB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXNzZW1ibHl3b21hbjpcImZlbWFsZVwiLGFzc2VtYmx5bWFuOlwibWFsZVwifX0se2lkOlwiYXVudC11bmNsZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntyZWxhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7a2luc3dvbWFuOlwiZmVtYWxlXCIsYXVudDpcImZlbWFsZVwiLGtpbnNtYW46XCJtYWxlXCIsdW5jbGU6XCJtYWxlXCJ9fSx7aWQ6XCJhdW50cy11bmNsZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVsYXRpdmVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntraW5zd29tZW46XCJmZW1hbGVcIixhdW50czpcImZlbWFsZVwiLGtpbnNtZW46XCJtYWxlXCIsdW5jbGVzOlwibWFsZVwifX0se2lkOlwiYm9vZ2V5bWFuLWJvb2dleXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dleXdvbWFuOlwiZmVtYWxlXCIsYm9vZ2V5bWFuOlwibWFsZVwifX0se2lkOlwiYm9vZ2llbWFuLWJvb2dpZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dpZXdvbWFuOlwiZmVtYWxlXCIsYm9vZ2llbWFuOlwibWFsZVwifX0se2lkOlwiYm9nZXltYW4tYm9nZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JvZ2V5d29tYW46XCJmZW1hbGVcIixib2dleW1hbjpcIm1hbGVcIn19LHtpZDpcImJvZ2llbWFuLWJvZ2lld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dpZXdvbWFuOlwiZmVtYWxlXCIsYm9naWVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJib29naWVtZW4tYm9vZ2lld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9vZ2V5bW9uc3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dpZXdvbWVuOlwiZmVtYWxlXCIsYm9vZ2llbWVuOlwibWFsZVwifX0se2lkOlwiYm9naWVtZW4tYm9naWV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib2dleW1vbnN0ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dpZXdvbWVuOlwiZmVtYWxlXCIsYm9naWVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJib25kc21hbi1ib25kc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JvbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9uZHN3b21hbjpcImZlbWFsZVwiLGJvbmRzbWFuOlwibWFsZVwifX0se2lkOlwiYm9uZHNtZW4tYm9uZHN3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib25kZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib25kc3dvbWVuOlwiZmVtYWxlXCIsYm9uZHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJodXNiYW5kLXdpZmVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFydG5lcjpcImFcIixcInNpZ25pZmljYW50IG90aGVyXCI6XCJhXCIsc3BvdXNlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aWZlOlwiZmVtYWxlXCIsaHVzYmFuZDpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImh1c2JhbmRzLXdpdmVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXJzOlwiYVwiLFwic2lnbmlmaWNhbnQgb3RoZXJzXCI6XCJhXCIsc3BvdXNlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2l2ZXM6XCJmZW1hbGVcIixodXNiYW5kczpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImJveWZyaWVuZC1naXJsZnJpZW5kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXI6XCJhXCIsZnJpZW5kOlwiYVwiLFwic2lnbmlmaWNhbnQgb3RoZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGZyaWVuZDpcImZlbWFsZVwiLGJveWZyaWVuZDpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImJveWZyaWVuZHMtZ2lybGZyaWVuZHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFydG5lcnM6XCJhXCIsZnJpZW5kczpcImFcIixcInNpZ25pZmljYW50IG90aGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaXJsZnJpZW5kczpcImZlbWFsZVwiLGJveWZyaWVuZHM6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lob29kLWdpcmxob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkaG9vZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGhvb2Q6XCJmZW1hbGVcIixib3lob29kOlwibWFsZVwifX0se2lkOlwiYm95aXNoLWdpcmx5XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkaXNoOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaXJseTpcImZlbWFsZVwiLGdpcmxpc2g6XCJmZW1hbGVcIixib3lpc2g6XCJtYWxlXCJ9fSx7aWQ6XCJqb3VybmV5bWFuLWpvdXJuZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntqb3VybmV5cGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqb3VybmV5d29tYW46XCJmZW1hbGVcIixqb3VybmV5bWFuOlwibWFsZVwifX0se2lkOlwiam91cm5leW1lbi1qb3VybmV5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7am91cm5leXBlcnNvbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2pvdXJuZXl3b21lbjpcImZlbWFsZVwiLGpvdXJuZXltZW46XCJtYWxlXCJ9fSx7aWQ6XCJnb2RmYXRoZXItZ29kbW90aGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dvZHBhcmVudDpcImFcIixlbGRlcjpcImFcIixwYXRyb246XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dvZG1vdGhlcjpcImZlbWFsZVwiLHBhdHJvbmVzczpcImZlbWFsZVwiLGdvZGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZGF1Z2h0ZXItZ3JhbmRzb25cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRjaGlsZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRkYXVnaHRlcjpcImZlbWFsZVwiLGdyYW5kc29uOlwibWFsZVwifX0se2lkOlwiZ3JhbmRkYXVnaHRlcnMtZ3JhbmRzb25zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kY2hpbGRyZW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kZGF1Z2h0ZXJzOlwiZmVtYWxlXCIsZ3JhbmRzb25zOlwibWFsZVwifX0se2lkOlwiZm9yZWZhdGhlci1mb3JlbW90aGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2VzdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3JlbW90aGVyOlwiZmVtYWxlXCIsZm9yZWZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImZvcmVmYXRoZXJzLWZvcmVtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2VzdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Zm9yZW1vdGhlcnM6XCJmZW1hbGVcIixmb3JlZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcImdyYW1wcy1ncmFubnlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRwYXJlbnQ6XCJhXCIsYW5jZXN0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5ueTpcImZlbWFsZVwiLGdyYW5kbWE6XCJmZW1hbGVcIixncmFuZG1vdGhlcjpcImZlbWFsZVwiLGdyYW5kcGFwcHk6XCJtYWxlXCIsZ3JhbmRkYWRkeTpcIm1hbGVcIixncmFtcHM6XCJtYWxlXCIsZ3JhbmRwYTpcIm1hbGVcIixncmFuZGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZmF0aGVycy1ncmFuZG1vdGhlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRwYXJlbnRzOlwiYVwiLGFuY2VzdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRtb3RoZXJzOlwiZmVtYWxlXCIsZ3JhbmRmYXRoZXJzOlwibWFsZVwifX0se2lkOlwiYnJpZGUtZ3Jvb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BvdXNlOlwiYVwiLG5ld2x5d2VkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnticmlkZTpcImZlbWFsZVwiLGdyb29tOlwibWFsZVwifX0se2lkOlwiYnJvdGhlci1zaXN0ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2libGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2lzdGVyOlwiZmVtYWxlXCIsYnJvdGhlcjpcIm1hbGVcIn19LHtpZDpcImJyb3RoZXJzLXNpc3RlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2libGluZ3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Npc3RlcnM6XCJmZW1hbGVcIixicm90aGVyczpcIm1hbGVcIn19LHtpZDpcImNhbWVyYW1hbi1jYW1lcmF3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhbWVyYSBvcGVyYXRvclwiOlwiYVwiLFwiY2FtZXJhIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYW1lcmF3b21hbjpcImZlbWFsZVwiLGNhbWVyYW1hbjpcIm1hbGVcIn19LHtpZDpcImNhbWVyYW1lbi1jYW1lcmF3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhbWVyYSBvcGVyYXRvcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2FtZXJhd29tZW46XCJmZW1hbGVcIixjYW1lcmFtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjYXZlbWFuLWNhdmV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0cm9nbG9keXRlOlwiYVwiLGhvbWluaWRhZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2F2ZXdvbWFuOlwiZmVtYWxlXCIsY2F2ZW1hbjpcIm1hbGVcIn19LHtpZDpcImNhdmVtZW4tY2F2ZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Ryb2dsb2R5dGFlOlwiYVwiLHRyb2dsb2R5dGk6XCJhXCIsdHJvZ2xvZHl0ZXM6XCJhXCIsaG9taW5pZHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdmV3b21lbjpcImZlbWFsZVwiLGNhdmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjbGVyZ3ltYW4tY2xlcmd5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlcmd5cGVyc29uOlwiYVwiLGNsZXJneTpcImFcIixjbGVyaWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NsZXJneXdvbWFuOlwiZmVtYWxlXCIsY2xlcmd5bWFuOlwibWFsZVwifX0se2lkOlwiY2xlcmd5bWVuLWNsZXJneXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZXJnaWVzOlwiYVwiLGNsZXJpY3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NsZXJneXdvbWVuOlwiZmVtYWxlXCIsY2xlcmd5bWVuOlwibWFsZVwifX0se2lkOlwiY291bmNpbG1hbi1jb3VuY2lsd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb3VuY2lsIG1lbWJlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3VuY2lsd29tYW46XCJmZW1hbGVcIixjb3VuY2lsbWFuOlwibWFsZVwifX0se2lkOlwiY291bmNpbG1lbi1jb3VuY2lsd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb3VuY2lsIG1lbWJlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bmNpbHdvbWVuOlwiZmVtYWxlXCIsY291bmNpbG1lbjpcIm1hbGVcIn19LHtpZDpcImNvdW50cnltYW4tY291bnRyeXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bnRyeSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bnRyeXdvbWFuOlwiZmVtYWxlXCIsY291bnRyeW1hbjpcIm1hbGVcIn19LHtpZDpcImNvdW50cnltZW4tY291bnRyeXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bnRyeSBmb2xrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW50cnl3b21lbjpcImZlbWFsZVwiLGNvdW50cnltZW46XCJtYWxlXCJ9fSx7aWQ6XCJoYW5keW1hbi1oYW5keXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FydGlzYW46XCJhXCIsY3JhZnRzcGVyc29uOlwiYVwiLFwic2tpbGxlZCB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZHl3b21hbjpcImZlbWFsZVwiLGNyYWZ0c3dvbWFuOlwiZmVtYWxlXCIsaGFuZHltYW46XCJtYWxlXCIsY3JhZnRzbWFuOlwibWFsZVwifX0se2lkOlwiaG9zdC1ob3N0ZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3ByZXNlbnRlcjpcImFcIixlbnRlcnRhaW5lcjpcImFcIixlbWNlZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG9zdGVzczpcImZlbWFsZVwiLGhvc3Q6XCJtYWxlXCJ9fSx7aWQ6XCJob3N0ZXNzZXMtaG9zdHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJlc2VudGVyczpcImFcIixlbnRlcnRhaW5lcnM6XCJhXCIsZW1jZWVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3N0ZXNzZXM6XCJmZW1hbGVcIixob3N0czpcIm1hbGVcIn19LHtpZDpcImhhbmR5bWVuLWhhbmR5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXJ0aXNhbnM6XCJhXCIsY3JhZnRzcGVyc29uczpcImFcIixcInNraWxsZWQgd29ya2Vyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5keXdvbWVuOlwiZmVtYWxlXCIsY3JhZnRzd29tZW46XCJmZW1hbGVcIixoYW5keW1lbjpcIm1hbGVcIixjcmFmdHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJoYW5nbWFuLWhhbmd3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntndWlsbG90aW5lOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nd29tYW46XCJmZW1hbGVcIixoYW5nbWFuOlwibWFsZVwifX0se2lkOlwiaGFuZ21lbi1oYW5nd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3VpbGxvdGluZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmd3b21lbjpcImZlbWFsZVwiLGhhbmdtZW46XCJtYWxlXCJ9fSx7aWQ6XCJoZW5jaG1hbi1oZW5jaHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpZGVraWNrOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZW5jaHdvbWFuOlwiZmVtYWxlXCIsaGVuY2htYW46XCJtYWxlXCJ9fSx7aWQ6XCJoZW5jaG1lbi1oZW5jaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpZGVraWNrczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVuY2h3b21lbjpcImZlbWFsZVwiLGhlbmNobWVuOlwibWFsZVwifX0se2lkOlwiaGVyby1oZXJvaW5lXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wicm9sZS1tb2RlbFwiOlwiYVwiLG1lbnRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyb2luZTpcImZlbWFsZVwiLGhlcm86XCJtYWxlXCJ9fSx7aWQ6XCJoZXJvZXMtaGVyb2luZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJyb2xlLW1vZGVsc1wiOlwiYVwiLG1lbnRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyb2luZXM6XCJmZW1hbGVcIixoZXJvZXM6XCJtYWxlXCJ9fSx7aWQ6XCJtYXRlcm5hbC1wYXRlcm5hbFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJlbnRhbDpcImFcIix3YXJtOlwiYVwiLGludGltYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXRlcm5hbDpcImZlbWFsZVwiLHBhdGVybmFsOlwibWFsZVwiLGZyYXRlcm5hbDpcIm1hbGVcIn19LHtpZDpcIm1hdGVybml0eS1wYXRlcm5pdHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hdGVybml0eTpcImZlbWFsZVwiLHBhdGVybml0eTpcIm1hbGVcIn19LHtpZDpcImRhZHMtbW9tc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJlbnRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW1hczpcImZlbWFsZVwiLG1vdGhlcnM6XCJmZW1hbGVcIixtb21zOlwiZmVtYWxlXCIsbXVtczpcImZlbWFsZVwiLG1vbW1hczpcImZlbWFsZVwiLG1vbW1pZXM6XCJmZW1hbGVcIixwYXBhczpcIm1hbGVcIixmYXRoZXJzOlwibWFsZVwiLGRhZHM6XCJtYWxlXCIsZGFkZGllczpcIm1hbGVcIn19LHtpZDpcImRhZC1tb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW1hOlwiZmVtYWxlXCIsbW90aGVyOlwiZmVtYWxlXCIsbW9tOlwiZmVtYWxlXCIsbXVtOlwiZmVtYWxlXCIsbW9tbWE6XCJmZW1hbGVcIixtb21teTpcImZlbWFsZVwiLHBhcGE6XCJtYWxlXCIsZmF0aGVyOlwibWFsZVwiLGRhZDpcIm1hbGVcIixwb3A6XCJtYWxlXCIsZGFkZHk6XCJtYWxlXCJ9fSx7aWQ6XCJkYXVnaHRlci1zb25cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hpbGQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhdWdodGVyOlwiZmVtYWxlXCIsc29uOlwibWFsZVwifX0se2lkOlwiZGF1Z2h0ZXJzLXNvbnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hpbGRyZW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhdWdodGVyczpcImZlbWFsZVwiLHNvbnM6XCJtYWxlXCJ9fSx7aWQ6XCJkb29ybWFuLWRvb3J3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjb25jaWVyZ2U6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Rvb3J3b21hbjpcImZlbWFsZVwiLGRvb3JtYW46XCJtYWxlXCJ9fSx7aWQ6XCJkb29ybWVuLWRvb3J3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjb25jaWVyZ2VzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkb29yd29tZW46XCJmZW1hbGVcIixkb29ybWVuOlwibWFsZVwifX0se2lkOlwiZmVtaW5pbi1tYW5seVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbmx5OlwiYVwiLG1hdHVyZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtaW5pbjpcImZlbWFsZVwiLGR1ZGVseTpcIm1hbGVcIixtYW5seTpcIm1hbGVcIn19LHtpZDpcImZlbWFsZXMtbWFsZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZW1hbGVzOlwiZmVtYWxlXCIsbWFsZXM6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nLXF1ZWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3J1bGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbXByZXNzOlwiZmVtYWxlXCIscXVlZW46XCJmZW1hbGVcIixlbXBlcm9yOlwibWFsZVwiLGtpbmc6XCJtYWxlXCJ9fSx7aWQ6XCJraW5ncy1xdWVlbnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cnVsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbXByZXNzZXM6XCJmZW1hbGVcIixxdWVlbnM6XCJmZW1hbGVcIixlbXBlcm9yczpcIm1hbGVcIixraW5nczpcIm1hbGVcIn19LHtpZDpcImtpbmdzaXplLXF1ZWVuc2l6ZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntqdW1ibzpcImFcIixnaWdhbnRpYzpcImFcIn0saW5jb25zaWRlcmF0ZTp7cXVlZW5zaXplOlwiZmVtYWxlXCIsa2luZ3NpemU6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nbWFrZXItcXVlZW5tYWtlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInBvd2VyIGJlaGluZCB0aGUgdGhyb25lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1ZWVubWFrZXI6XCJmZW1hbGVcIixraW5nbWFrZXI6XCJtYWxlXCJ9fSx7aWQ6XCJsYXltYW4tbGF5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2l2aWxpYW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xheXdvbWFuOlwiZmVtYWxlXCIsbGF5bWFuOlwibWFsZVwifX0se2lkOlwibGF5bWVuLWxheXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NpdmlsaWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGF5d29tZW46XCJmZW1hbGVcIixsYXltZW46XCJtYWxlXCJ9fSx7aWQ6XCJkYW1lLWxvcmRcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7b2ZmaWNpYWw6XCJhXCIsb3duZXI6XCJhXCIsZXhwZXJ0OlwiYVwiLHN1cGVyaW9yOlwiYVwiLGNoaWVmOlwiYVwiLHJ1bGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYW1lOlwiZmVtYWxlXCIsbG9yZDpcIm1hbGVcIn19LHtpZDpcImRhbWVzLWxvcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljaWFsczpcImFcIixjaGllZnM6XCJhXCIscnVsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYW1lczpcImZlbWFsZVwiLGxvcmRzOlwibWFsZVwifX0se2lkOlwibWFuaG9vZC13b21hbmhvb2RcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YWR1bHRob29kOlwiYVwiLHBlcnNvbmhvb2Q6XCJhXCIsbWF0dXJpdHk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWFuaG9vZDpcImZlbWFsZVwiLG1hc2N1bGluaXR5OlwibWFsZVwiLG1hbmhvb2Q6XCJtYWxlXCJ9fSx7aWQ6XCJmZW1pbmluaXR5LW1hbmxpbmVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtaW5pbml0eTpcImZlbWFsZVwiLG1hbmxpbmVzczpcIm1hbGVcIn19LHtpZDpcIm1hcmtzbWFuLW1hcmtzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2hvb3RlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFya3N3b21hbjpcImZlbWFsZVwiLG1hcmtzbWFuOlwibWFsZVwifX0se2lkOlwibWFya3NtZW4tbWFya3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaG9vdGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFya3N3b21lbjpcImZlbWFsZVwiLG1hcmtzbWVuOlwibWFsZVwifX0se2lkOlwibWlkZGxlbWFuLW1pZGRsZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ludGVybWVkaWFyeTpcImFcIixcImdvLWJldHdlZW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlkZGxld29tYW46XCJmZW1hbGVcIixtaWRkbGVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWRkbGVtZW4tbWlkZGxld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aW50ZXJtZWRpYXJpZXM6XCJhXCIsXCJnby1iZXR3ZWVuc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttaWRkbGV3b21lbjpcImZlbWFsZVwiLG1pZGRsZW1lbjpcIm1hbGVcIn19LHtpZDpcIm1pbGttYW4tbWlsa3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWlsayBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlsa3dvbWFuOlwiZmVtYWxlXCIsbWlsa21hbjpcIm1hbGVcIn19LHtpZDpcIm1pbGttZW4tbWlsa3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWlsayBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlsa3dvbWVuOlwiZmVtYWxlXCIsbWlsa21lbjpcIm1hbGVcIn19LHtpZDpcIm5lcGhldy1uaWVjZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntuaWJsaW5nOlwiYVwiLFwic2libGluZ+KAmXMgY2hpbGRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bmllY2U6XCJmZW1hbGVcIixuZXBoZXc6XCJtYWxlXCJ9fSx7aWQ6XCJuZXBoZXdzLW5pZWNlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntuaWJsaW5nczpcImFcIixcInNpYmxpbmfigJlzIGNoaWxkcmVuXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25pZWNlczpcImZlbWFsZVwiLG5lcGhld3M6XCJtYWxlXCJ9fSx7aWQ6XCJub2JsZW1hbi1ub2JsZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vYmxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntub2JsZXdvbWFuOlwiZmVtYWxlXCIsbm9ibGVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJub2JsZW1lbi1ub2JsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vYmxlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bm9ibGV3b21lbjpcImZlbWFsZVwiLG5vYmxlbWVuOlwibWFsZVwifX0se2lkOlwib21idWRzbWFuLW9tYnVkc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vdGFyeTpcImFcIixcImNvbnN1bWVyIGFkdm9jYXRlXCI6XCJhXCIsXCJ0cm91YmxlIHNob290ZXJcIjpcImFcIixvbXNidWRwZXJzb246XCJhXCIsbWVkaWF0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29tYnVkc3dvbWFuOlwiZmVtYWxlXCIsb21idWRzbWFuOlwibWFsZVwifX0se2lkOlwib21idWRzbWVuLW9tYnVkc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vdGFyaWVzOlwiYVwiLG9tc2J1ZHBlcnNvbnM6XCJhXCIsb21zYnVkcGVvcGxlOlwiYVwiLG1lZGlhdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7b21idWRzd29tZW46XCJmZW1hbGVcIixvbWJ1ZHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJwcmluY2UtcHJpbmNlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aGVpcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHJpbmNlc3M6XCJmZW1hbGVcIixwcmluY2U6XCJtYWxlXCJ9fSx7aWQ6XCJwcmluY2VzLXByaW5jZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aGVpcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW5jZXNzZXM6XCJmZW1hbGVcIixwcmluY2VzOlwibWFsZVwifX0se2lkOlwic2FuZG1hbi1zYW5kd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFpcnk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbmR3b21hbjpcImZlbWFsZVwiLHNhbmRtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzYW5kbWVuLXNhbmR3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYWlyaWVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYW5kd29tZW46XCJmZW1hbGVcIixzYW5kbWVuOlwibWFsZVwifX0se2lkOlwic2hvd21hbi1zaG93d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvbW90ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nob3d3b21hbjpcImZlbWFsZVwiLHNob3dtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzaG93bWVuLXNob3d3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcm9tb3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nob3d3b21lbjpcImZlbWFsZVwiLFwic2hvdyB3b21lblwiOlwiZmVtYWxlXCIsc2hvd21lbjpcIm1hbGVcIn19LHtpZDpcInNwYWNlbWFuLXNwYWNld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXN0cm9uYXV0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFjZXdvbWFuOlwiZmVtYWxlXCIsc3BhY2VtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcGFjZW1lbi1zcGFjZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FzdHJvbmF1dHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NwYWNld29tZW46XCJmZW1hbGVcIixzcGFjZW1lbjpcIm1hbGVcIn19LHtpZDpcInNwb2tlc21hbi1zcG9rZXN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzcGVha2VyOlwiYVwiLHNwb2tlc3BlcnNvbjpcImFcIixyZXByZXNlbnRhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bva2Vzd29tYW46XCJmZW1hbGVcIixzcG9rZXNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9rZXNtZW4tc3Bva2Vzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BlYWtlcnM6XCJhXCIsc3Bva2VzcGVyc29uczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bva2Vzd29tZW46XCJmZW1hbGVcIixzcG9rZXNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9ydHNtYW4tc3BvcnRzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZTpcImFcIixcInNwb3J0cyBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzd29tYW46XCJmZW1hbGVcIixzcG9ydHNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9ydHNtZW4tc3BvcnRzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZXM6XCJhXCIsXCJzcG9ydHMgcGVyc29uc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcG9ydHN3b21lbjpcImZlbWFsZVwiLHNwb3J0c21lbjpcIm1hbGVcIn19LHtpZDpcInN0YXRlc21hbi1zdGF0ZXN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzZW5hdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGF0ZXN3b21hbjpcImZlbWFsZVwiLHN0YXRlc21hbjpcIm1hbGVcIn19LHtpZDpcInN0ZXBicm90aGVyLXN0ZXBzaXN0ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXNpYmxpbmdcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcHNpc3RlcjpcImZlbWFsZVwiLHN0ZXBicm90aGVyOlwibWFsZVwifX0se2lkOlwic3RlcGJyb3RoZXJzLXN0ZXBzaXN0ZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1zaWJsaW5nc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGVwc2lzdGVyczpcImZlbWFsZVwiLHN0ZXBicm90aGVyczpcIm1hbGVcIn19LHtpZDpcInN0ZXBkYWQtc3RlcG1vbVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0ZXAtcGFyZW50XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBtb206XCJmZW1hbGVcIixzdGVwbW90aGVyOlwiZmVtYWxlXCIsc3RlcGRhZDpcIm1hbGVcIixzdGVwZmF0aGVyOlwibWFsZVwifX0se2lkOlwic3RlcGZhdGhlcnMtc3RlcG1vdGhlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXBhcmVudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcG1vdGhlcnM6XCJmZW1hbGVcIixzdGVwZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcInN1cGVybWFuLXN1cGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGl0YW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N1cGVyd29tYW46XCJmZW1hbGVcIixzdXBlcm1hbjpcIm1hbGVcIn19LHtpZDpcInN1cGVybWVuLXN1cGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGl0YW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdXBlcndvbWVuOlwiZmVtYWxlXCIsc3VwZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJ1bm1hbmx5LXVud29tYW5seVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntpbmh1bWFuZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7dW53b21hbmx5OlwiZmVtYWxlXCIsdW53b21lbmx5OlwiZmVtYWxlXCIsdW5tYW5seTpcIm1hbGVcIix1bm1lbmx5OlwibWFsZVwifX0se2lkOlwid2F0Y2htYW4td2F0Y2h3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3YXRjaGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3YXRjaHdvbWFuOlwiZmVtYWxlXCIsd2F0Y2htYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3YXRjaG1lbi13YXRjaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3dhdGNoZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3YXRjaHdvbWVuOlwiZmVtYWxlXCIsd2F0Y2htZW46XCJtYWxlXCJ9fSx7aWQ6XCJ3ZWF0aGVybWFuLXdlYXRoZXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndlYXRoZXIgZm9yZWNhc3RlclwiOlwiYVwiLG1ldGVvcm9sb2dpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dlYXRoZXJ3b21hbjpcImZlbWFsZVwiLHdlYXRoZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3ZWF0aGVybWVuLXdlYXRoZXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndlYXRoZXIgZm9yZWNhc3RlcnNcIjpcImFcIixtZXRlb3JvbG9naXN0czpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2VhdGhlcndvbWVuOlwiZmVtYWxlXCIsd2VhdGhlcm1lbjpcIm1hbGVcIn19LHtpZDpcIndpZG93LXdpZG93ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YmVyZWF2ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dpZG93OlwiZmVtYWxlXCIsd2lkb3dzOlwiZmVtYWxlXCIsd2lkb3dlcjpcIm1hbGVcIix3aWRvd2VyczpcIm1hbGVcIn19LHtpZDpcIm93bi1tYW4tb3duLXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wib3duIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm93biB3b21hblwiOlwiZmVtYWxlXCIsXCJvd24gbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcmVuY2htZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZyZW5jaDpcImFcIixcInRoZSBmcmVuY2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnJlbmNobWVuOlwibWFsZVwifX0se2lkOlwibGFkeWxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7Y291cnRlb3VzOlwiYVwiLGN1bHR1cmVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYWR5bGlrZTpcImZlbWFsZVwifX0se2lkOlwibGlrZS1hLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVzb2x1dGVseTpcImFcIixicmF2ZWx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxpa2UgYSBtYW5cIjpcIm1hbGVcIn19LHtpZDpcIm1haWRlbi1uYW1lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYmlydGggbmFtZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1haWRlbiBuYW1lXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1haWRlbi12b3lhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCB2b3lhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gdm95YWdlXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1haWRlbi1mbGlnaHRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCBmbGlnaHRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gZmxpZ2h0XCI6XCJmZW1hbGVcIn19LHtpZDpcIm1hbi1lbm91Z2hcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3Ryb25nIGVub3VnaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBlbm91Z2hcIjpcIm1hbGVcIn19LHtpZDpcIm9uZXVwbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7dXBzdGFnaW5nOlwiYVwiLGNvbXBldGl0aXZlbmVzczpcImFcIn0saW5jb25zaWRlcmF0ZTp7b25ldXBtYW5zaGlwOlwibWFsZVwifX0se2lkOlwibXJzLVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1zLlwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1pc3MuXCI6XCJmZW1hbGVcIixcIm1ycy5cIjpcImZlbWFsZVwifX0se2lkOlwibWFubWFkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7bWFudWZhY3R1cmVkOlwiYVwiLGFydGlmaWNpYWw6XCJhXCIsc3ludGhldGljOlwiYVwiLFwibWFjaGluZS1tYWRlXCI6XCJhXCIsY29uc3RydWN0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbm1hZGU6XCJtYWxlXCJ9fSx7aWQ6XCJtYW4tb2YtYWN0aW9uXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntkeW5hbW86XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIGFjdGlvblwiOlwibWFsZVwifX0se2lkOlwibWFuLW9mLWxldHRlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NjaG9sYXI6XCJhXCIsd3JpdGVyOlwiYVwiLFwibGl0ZXJhcnkgZmlndXJlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIGxldHRlcnNcIjpcIm1hbGVcIn19LHtpZDpcIm1hbi1vZi10aGUtd29ybGRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NvcGhpc3RpY2F0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gb2YgdGhlIHdvcmxkXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmZWxsb3dzaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjYW1hcmFkZXJpZTpcImFcIixjb21tdW5pdHk6XCJhXCIsb3JnYW5pemF0aW9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZWxsb3dzaGlwOlwibWFsZVwifX0se2lkOlwiZnJlc2htYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QteWVhciBzdHVkZW50XCI6XCJhXCIsZnJlc2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnJlc2htYW46XCJtYWxlXCIsZnJlc2h3b21hbjpcIm1hbGVcIn19LHtpZDpcIndvcmttYW5zaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInF1YWxpdHkgY29uc3RydWN0aW9uXCI6XCJhXCIsZXhwZXJ0aXNlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b3JrbWFuc2hpcDpcIm1hbGVcIn19LHtpZDpcImhvdXNld2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntob21lbWFrZXI6XCJhXCIsaG9tZXdvcmtlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG91c2V3aWZlOlwiZmVtYWxlXCJ9fSx7aWQ6XCJob3VzZXdpdmVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2hvbWVtYWtlcnM6XCJhXCIsaG9tZXdvcmtlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvdXNld2l2ZXM6XCJmZW1hbGVcIn19LHtpZDpcIm1vdGhlcmx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2xvdmluZzpcImFcIix3YXJtOlwiYVwiLG51cnR1cmluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW90aGVybHk6XCJmZW1hbGVcIn19LHtpZDpcIm1hbnBvd2VyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImh1bWFuIHJlc291cmNlc1wiOlwiYVwiLHdvcmtmb3JjZTpcImFcIixwZXJzb25uZWw6XCJhXCIsc3RhZmY6XCJhXCIsbGFib3I6XCJhXCIsXCJsYWJvciBmb3JjZVwiOlwiYVwiLHN0YWZmaW5nOlwiYVwiLFwiY29tYmF0IHBlcnNvbm5lbFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5wb3dlcjpcIm1hbGVcIn19LHtpZDpcIm1hc3Rlci1vZi1jZXJlbW9uaWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntlbWNlZTpcImFcIixtb2RlcmF0b3I6XCJhXCIsY29udmVub3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIG9mIGNlcmVtb25pZXNcIjpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcmZ1bFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2tpbGxlZDpcImFcIixhdXRob3JpdGF0aXZlOlwiYVwiLGNvbW1hbmRpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcmZ1bDpcIm1hbGVcIn19LHtpZDpcIm1hc3Rlcm1pbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dlbml1czpcImFcIixjcmVhdG9yOlwiYVwiLGluc3RpZ2F0b3I6XCJhXCIsb3ZlcnNlZTpcImFcIixsYXVuY2g6XCJhXCIsb3JpZ2luYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJtaW5kOlwibWFsZVwifX0se2lkOlwibWFzdGVycGllY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wid29yayBvZiBnZW5pdXNcIjpcImFcIixcImNoZWYgZOKAmW9ldXZyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJwaWVjZTpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnBsYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Zpc2lvbjpcImFcIixcImNvbXByZWhlbnNpdmUgcGxhblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJwbGFuOlwibWFsZVwifX0se2lkOlwibWFzdGVyc3Ryb2tlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInRydW1wIGNhcmRcIjpcImFcIixcInN0cm9rZSBvZiBnZW5pdXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVyc3Ryb2tlOlwibWFsZVwifX0se2lkOlwibWFkbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYW5hdGljOlwiYVwiLHplYWxvdDpcImFcIixlbnRodXNpYXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWRtYW46XCJtYWxlXCIsXCJtYWQgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYWRtZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZhbmF0aWNzOlwiYVwiLHplYWxvdHM6XCJhXCIsZW50aHVzaWFzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hZG1lbjpcIm1hbGVcIixcIm1hZCBtZW5cIjpcIm1hbGVcIn19LHtpZDpcIm1hbmtpbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2h1bWFua2luZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFua2luZDpcIm1hbGVcIn19LHtpZDpcIm1hbmhvdXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgaG91clwiOlwiYVwiLFwiaG91ciBvZiB3b3JrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmhvdXI6XCJtYWxlXCIsXCJtYW4gaG91clwiOlwibWFsZVwifX0se2lkOlwibWFuaG91cnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgaG91cnNcIjpcImFcIixcImhvdXJzIG9mIHdvcmtcIjpcImFcIixcImhvdXJzIG9mIGxhYm9yXCI6XCJhXCIsaG91cnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmhvdXJzOlwibWFsZVwiLFwibWFuIGhvdXJzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5uZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3N0YWZmZWQ6XCJhXCIsY3Jld2VkOlwiYVwiLHBpbG90ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbm5lZDpcImFcIn0sbm90ZTpcIlVzaW5nIGdlbmRlciBuZXV0cmFsIGxhbmd1YWdlIG1lYW5zIHVzZXJzIHdpbGwgaGVscCB0byBicmVhayB1cCBnZW5kZXIgc3RlcmVvdHlwZXMuXCJ9LHtpZDpcInVubWFubmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyb2JvdGljOlwiYVwiLGF1dG9tYXRlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7dW5tYW5uZWQ6XCJhXCJ9LG5vdGU6XCJVc2luZyBnZW5kZXIgbmV1dHJhbCBsYW5ndWFnZSBtZWFucyB1c2VycyB3aWxsIGhlbHAgdG8gYnJlYWsgdXAgZ2VuZGVyIHN0ZXJlb3R5cGVzLlwifSx7aWQ6XCJtb2FuaW5nXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt3aGluaW5nOlwiYVwiLGNvbXBsYWluaW5nOlwiYVwiLGNyeWluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7Yml0Y2hpbmc6XCJhXCIsbW9hbmluZzpcImFcIn19LHtpZDpcIm1vYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3doaW5lOlwiYVwiLGNvbXBsYWluOlwiYVwiLGNyeTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Yml0Y2g6XCJhXCIsbW9hbjpcImFcIn19LHtpZDpcIndpZmViZWF0ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGFuayB0b3BcIjpcImFcIixcInNsZWV2ZWxlc3MgdW5kZXJzaGlydFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndpZmUgYmVhdGVyXCI6XCJhXCIsd2lmZWJlYXRlcjpcImFcIn19LHtpZDpcImFuY2llbnQtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFuY2llbnQgY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJhbmNpZW50IHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImFuY2llbnQgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXV0aG9yZXNzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthdXRob3I6XCJhXCIsd3JpdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthdXRob3Jlc3M6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS1ob3VzZXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBjb25zdW1lclwiOlwiYVwiLFwiYXZlcmFnZSBob3VzZWhvbGRcIjpcImFcIixcImF2ZXJhZ2UgaG9tZW1ha2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBob3VzZXdpZmVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJhdmVyYWdlLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhdmVyYWdlIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS13b3JraW5nLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhdmVyYWdlIHdhZ2UgZWFybmVyXCI6XCJhXCIsXCJhdmVyYWdlIHRheHBheWVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYXZlcmFnZSB3b3JraW5nIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2aWF0cml4XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthdmlhdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthdmlhdHJpeDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJicm90aGVyaG9vZC1vZi1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGh1bWFuIGZhbWlseVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJyb3RoZXJob29kIG9mIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImNhbGVuZGFyLWdpcmxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e21vZGVsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNhbGVuZGFyIGdpcmxcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjYWxsLWdpcmxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2VzY29ydDpcImFcIixwcm9zdGl0dXRlOlwiYVwiLFwic2V4IHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNhbGwgZ2lybFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImNodXJjaG1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2xlcmljOlwiYVwiLFwicHJhY3RpY2luZyBDaHJpc3RpYW5cIjpcImFcIixcInBpbGxhciBvZiB0aGUgQ2h1cmNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NodXJjaG1hbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJlbmdsaXNoLW1hc3RlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlbmdsaXNoIGNvb3JkaW5hdG9yXCI6XCJhXCIsXCJzZW5pb3IgdGVhY2hlciBvZiBlbmdsaXNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZW5nbGlzaCBtYXN0ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJlbmdsaXNobWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBlbmdsaXNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2VuZ2xpc2htZW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZXhlY3V0cml4XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntleGVjdXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXhlY3V0cml4OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImZhdGhlci1vZi0qXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZvdW5kZXIgb2ZcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYXRoZXIgb2YgKlwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImZvdW5kaW5nLWZhdGhlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0aGUgZm91bmRlcnNcIjpcImFcIixcImZvdW5kaW5nIGxlYWRlcnNcIjpcImFcIixmb3JlYmVhcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZm91bmRpbmcgZmF0aGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaG91c2VtYWlkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhvdXNlIHdvcmtlclwiOlwiYVwiLFwiZG9tZXN0aWMgaGVscFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3VzZW1haWQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaW5kdXN0cmlhbC1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaW5kdXN0cmlhbCBjaXZpbGl6YXRpb25cIjpcImFcIixcImluZHVzdHJpYWwgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5kdXN0cmlhbCBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJsYWR5LWRvY3RvclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZG9jdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxhZHkgZG9jdG9yXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibGVhZGluZy1sYWR5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntsZWFkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxlYWRpbmcgbGFkeVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dmlyZ2luOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWlkZW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFpZGVuLXJhY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QgcmFjZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1haWRlbiByYWNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFpZGVuLXNwZWVjaFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCBzcGVlY2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gc3BlZWNoXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLWEtZGVza1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzdGFmZiBhIGRlc2tcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gYSBkZXNrXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLWluLXRoZS1zdHJlZXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wib3JkaW5hcnkgY2l0aXplblwiOlwiYVwiLFwidHlwaWNhbCBwZXJzb25cIjpcImFcIixcImF2ZXJhZ2UgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIGluIHRoZSBzdHJlZXRcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tb2YtdGhlLWxhbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zhcm1lcjpcImFcIixcInJ1cmFsIHdvcmtlclwiOlwiYVwiLGdyYXppZXI6XCJhXCIsbGFuZG93bmVyOlwiYVwiLFwicnVyYWwgY29tbXVuaXR5XCI6XCJhXCIsXCJjb3VudHJ5IHBlb3BsZVwiOlwiYVwiLFwiY291bnRyeSBmb2xrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIHRoZSBsYW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFucy1iZXN0LWZyaWVuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIGZhaXRoZnVsIGRvZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbnMgYmVzdCBmcmllbmRcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tdGhlLWJvb3RoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIHRoZSBib290aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiB0aGUgYm9vdGhcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tdGhlLXBob25lc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhbnN3ZXIgdGhlIHBob25lc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiB0aGUgcGhvbmVzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuc2l6ZWQtdGFza1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIGRlbWFuZGluZyB0YXNrXCI6XCJhXCIsXCJhIGJpZyBqb2JcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW5zaXplZCB0YXNrXCI6XCJhXCIsXCJtYW4gc2l6ZWQgdGFza1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hc3Rlci1rZXlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGFzcyBrZXlcIjpcImFcIixvcmlnaW5hbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYXN0ZXIga2V5XCI6XCJhXCIsXCJtYXN0ZXIgY29weVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hc3Rlci1wbGFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdyYW5kIHNjaGVtZVwiOlwiYVwiLFwiZ3VpZGluZyBwcmluY2lwbGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIHBsYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXItdGhlLWFydFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiZWNvbWUgc2tpbGxlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciB0aGUgYXJ0XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWVuLW9mLXNjaWVuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NjaWVudGlzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWVuIG9mIHNjaWVuY2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtaWR3aWZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJpcnRoaW5nIG51cnNlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pZHdpZmU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibW9kZXJuLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJtb2Rlcm4gY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJtb2Rlcm4gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibW9kZXJuIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm5vLW1hbnMtbGFuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ1bm9jY3VwaWVkIHRlcnJpdG9yeVwiOlwiYVwiLHdhc3RlbGFuZDpcImFcIixkZWF0aHRyYXA6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibm8gbWFucyBsYW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwib2ZmaWNlLWdpcmxzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFkbWluaXN0cmF0aXZlIHN0YWZmXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wib2ZmaWNlIGdpcmxzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwicG9ldGVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cG9ldDpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9ldGVzczpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJyYWlsd2F5bWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInJhaWx3YXkgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JhaWx3YXltYW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwic3BvcnRzbWFubGlrZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFpcjpcImFcIixzcG9ydGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzbWFubGlrZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzcG9ydHNtYW5zaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYWlybmVzczpcImFcIixcImdvb2QgaHVtb3JcIjpcImFcIixcInNlbnNlIG9mIGZhaXIgcGxheVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcG9ydHNtYW5zaGlwOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInN0YXRlc21hbmxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RpcGxvbWF0aWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0YXRlc21hbmxpa2U6XCJhXCIsXCJzdGF0ZXNtYW4gbGlrZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInN0b2NrbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSB3b3JrZXJcIjpcImFcIixmYXJtaGFuZDpcImFcIixkcm92ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0b2NrbWFuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInRyYWRlc21hbnMtZW50cmFuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic2VydmljZSBlbnRyYW5jZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRyYWRlc21hbnMgZW50cmFuY2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ0YXgtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRheCBjb21taXNzaW9uZXJcIjpcImFcIixcInRheCBvZmZpY2VcIjpcImFcIixcInRheCBjb2xsZWN0b3JcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ0YXggbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwidXNoZXJldHRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt1c2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dXNoZXJldHRlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvbWFuLWxhd3llclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bGF3eWVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvbWFuIGxhd3llclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvbWFuLXBhaW50ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BhaW50ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wid29tYW4gcGFpbnRlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvcmtpbmctd2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ3YWdlIG9yIHNhbGFyeSBlYXJuaW5nIHdvbWFuXCI6XCJhXCIsXCJ0d28taW5jb21lIGZhbWlseVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvcmtpbmcgbW90aGVyXCI6XCJhXCIsXCJ3b3JraW5nIHdpZmVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJob21vc2V4dWFsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntnYXk6XCJhXCIsXCJnYXkgbWFuXCI6XCJhXCIsbGVzYmlhbjpcImFcIixcImdheSBwZXJzb24vcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvbW9zZXh1YWw6XCJhXCJ9LG5vdGU6XCJUaGlzIHRlcm0gaGFzIGEgY2xpbmljYWwgaGlzdG9yeSBhbmQgaXMgdXNlZCB0byBpbXBseSBMR0JUUSsgcGVvcGxlIGFyZSBkaXNlYXNlZCBvciBwc3ljaG9sb2dpY2FsbHkvZW1vdGlvbmFsbHkgZGlzb3JkZXJlZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiaG9tb3NleHVhbC1yZWxhdGlvbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3JlbGF0aW9uc2hpcDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIHJlbGF0aW9uc1wiOlwiYVwiLFwiaG9tb3NleHVhbCByZWxhdGlvbnNoaXBcIjpcImFcIn0sbm90ZTpcIkF2b2lkIGxhYmVsaW5nIHNvbWV0aGluZyBhcyBMR0JUUSsgdW5sZXNzIHlvdSB3b3VsZCBjYWxsIHRoZSBzYW1lIHRoaW5nIOKAnHN0cmFpZ2h04oCdIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJob21vc2V4dWFsLWNvdXBsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y291cGxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImhvbW9zZXh1YWwgY291cGxlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBsYWJlbGluZyBzb21ldGhpbmcgYXMgTEdCVFErIHVubGVzcyB5b3Ugd291bGQgY2FsbCB0aGUgc2FtZSB0aGluZyDigJxzdHJhaWdodOKAnSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwic2V4dWFsLXByZWZlcmVuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic2V4dWFsIG9yaWVudGF0aW9uXCI6XCJhXCIsb3JpZW50YXRpb246XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2V4dWFsIHByZWZlcmVuY2VcIjpcImFcIn0sbm90ZTpcIkltcGxpZXMgdGhhdCBiZWluZyBMR0JUUSsgaXMgYSBjaG9pY2UgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImdheS1saWZlc3R5bGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ2F5IGxpdmVzXCI6XCJhXCIsXCJnYXkvbGVzYmlhbiBsaXZlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImdheSBsaWZlc3R5bGVcIjpcImFcIixcImhvbW9zZXh1YWwgbGlmZXN0eWxlXCI6XCJhXCJ9LG5vdGU6XCJJbXBsaWVzIHRoYXQgYmVpbmcgTEdCVFErIGlzIGEgY2hvaWNlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJnYXktYWdlbmRhXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBpc3N1ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJnYXkgYWdlbmRhXCI6XCJhXCIsXCJob21vc2V4dWFsIGFnZW5kYVwiOlwiYVwifSxub3RlOlwiVXNlZCBieSBhbnRpLUxHQlRRKyBleHRyZW1pc3RzIHRvIGNyZWF0ZSBhIGNsaW1hdGUgb2YgZmVhciBhcm91bmQgTEdCVFErIGlzc3VlcyAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiZ2F5LXJpZ2h0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlcXVhbCByaWdodHNcIjpcImFcIixcImNpdmlsIHJpZ2h0cyBmb3IgZ2F5IHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNwZWNpYWwgcmlnaHRzXCI6XCJhXCIsXCJnYXkgcmlnaHRzXCI6XCJhXCJ9LG5vdGU6XCJMR0JUUSsgcmlnaHRzIGFyZSBodW1hbiByaWdodHMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwiZmFnXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntnYXk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZhZzpcImFcIixmYWdnb3Q6XCJhXCIsZHlrZTpcImFcIixob21vOlwiYVwiLHNvZG9taXRlOlwiYVwifSxub3RlOlwiRGVyb2dhdG9yeSB0ZXJtcyBmb3IgTEdCVFErIHBlb3BsZSBhcmUgb2ZmZW5zaXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJiaVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YmlzZXh1YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgc2xhbmcgc2hvcnRoYW5kIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcImhvbW9zZXh1YWwtbWFycmlhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ2F5IG1hcnJpYWdlXCI6XCJhXCIsXCJzYW1lLXNleCBtYXJyaWFnZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImhvbW9zZXh1YWwgbWFycmlhZ2VcIjpcImFcIn0sbm90ZTpcIkhvbW9zZXh1YWwgaGFzIGEgY2xpbmljYWwgaGlzdG9yeSBhbmQgaXMgdXNlZCB0byBpbXBseSBMR0JUUSsgcGVvcGxlIGFyZSBkaXNlYXNlZCBvciBwc3ljaG9sb2dpY2FsbHkvZW1vdGlvbmFsbHkgZGlzb3JkZXJlZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3N0eWxlKVwifSx7aWQ6XCJ0cmFubnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFubnk6XCJhXCJ9LG5vdGU6XCJEZXJvZ2F0b3J5IHRlcm1zIGZvciBMR0JUUSsgcGVvcGxlIGFyZSBvZmZlbnNpdmUgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwidHJhbnN2ZXN0aXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNyb3NzLWRyZXNzZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbnN2ZXN0aXRlOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgb3V0ZGF0ZWQgLyBvZmZlbnNpdmUgdGVybXMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwic2V4Y2hhbmdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2l0aW9uOlwiYVwiLFwiZ2VuZGVyIGNvbmZpcm1hdGlvbiBzdXJnZXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NleGNoYW5nZTpcImFcIixcInNleCBjaGFuZ2VcIjpcImFcIn0sbm90ZTpcIkF2b2lkIG92ZXJlbXBoYXNpemluZyBzdXJnZXJ5IHdoZW4gZGlzY3Vzc2luZyB0cmFuc2dlbmRlciBwZW9wbGUgb3IgdGhlIHByb2Nlc3Mgb2YgdHJhbnNpdGlvbiAtIGl04oCZcyBub3QgYSBuZWNlc3NhcnkgY29tcG9uZW50IChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInNleC1jaGFuZ2Utb3BlcmF0aW9uXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNleCByZWFzc2lnbm1lbnQgc3VyZ2VyeVwiOlwiYVwiLFwiZ2VuZGVyIGNvbmZpcm1hdGlvbiBzdXJnZXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2V4IGNoYW5nZSBvcGVyYXRpb25cIjpcImFcIn0sbm90ZTpcIlNoaWZ0IGZvY3VzIGF3YXkgZnJvbSB0aGUgYXNzaWduZWQgc2V4IGFuZCB0b3dhcmRzIHRoZSBpZGVudGlmaWVkIGdlbmRlciAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHJhbnNnZW5kZXIgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyczpcImFcIn0sbm90ZTpcIlRyYW5zZ2VuZGVyIHNob3VsZCBiZSB1c2VkIGFzIGFuIGFkamVjdGl2ZSwgbm90IGFzIGEgbm91biAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbnNnZW5kZXJlZDpcImFcIn0sbm90ZTpcIlRyYW5zZ2VuZGVyIGlzIGFscmVhZHkgYW4gYWRqZWN0aXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInRyYW5zZ2VuZGVyaXNtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJlaW5nIHRyYW5zZ2VuZGVyXCI6XCJhXCIsXCJ0aGUgbW92ZW1lbnQgZm9yIHRyYW5zZ2VuZGVyIGVxdWFsaXR5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyaXNtOlwiYVwifSxub3RlOlwiVGhpcyBpcyBhIHRlcm0gdXNlZCBieSBhbnRpLXRyYW5zZ2VuZGVyIGFjdGl2aXN0cyB0byBkZWh1bWFuaXplIHRyYW5zZ2VuZGVyIHBlb3BsZSBhbmQgcmVkdWNlIHdobyB0aGV5IGFyZSB0byBhIGNvbmRpdGlvbiAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJib3JuLWEtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFzc2lnbmVkIG1hbGUgYXQgYmlydGhcIjpcImFcIixcImRlc2lnbmF0ZWQgbWFsZSBhdCBiaXJ0aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJpb2xvZ2ljYWxseSBtYWxlXCI6XCJhXCIsXCJib3JuIGEgbWFuXCI6XCJhXCIsXCJnZW5ldGljYWxseSBtYWxlXCI6XCJhXCJ9LG5vdGU6XCJBc3NpZ25lZCBiaXJ0aCBnZW5kZXIgaXMgY29tcGxpY2F0ZWQ7IGdlbmRlciBpZGVudGl0eSBpcyBtb3JlIHRoYW4gd2hhdCB5b3VyIHBhcmVudHMgZGVjaWRlZCB5b3Ugd2VyZSBhdCBiaXJ0aFwifSx7aWQ6XCJib3JuLWEtd29tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXNzaWduZWQgZmVtYWxlIGF0IGJpcnRoXCI6XCJhXCIsXCJkZXNpZ25hdGVkIGZlbWFsZSBhdCBiaXJ0aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJpb2xvZ2ljYWxseSBmZW1hbGVcIjpcImFcIixcImJvcm4gYSB3b21hblwiOlwiYVwiLFwiZ2VuZXRpY2FsbHkgZmVtYWxlXCI6XCJhXCJ9LG5vdGU6XCJBc3NpZ25lZCBiaXJ0aCBnZW5kZXIgaXMgY29tcGxpY2F0ZWQ7IGdlbmRlciBpZGVudGl0eSBpcyBtb3JlIHRoYW4gd2hhdCB5b3VyIHBhcmVudHMgZGVjaWRlZCB5b3Ugd2VyZSBhdCBiaXJ0aFwifSx7aWQ6XCJiYXRocm9vbS1iaWxsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm5vbi1kaXNjcmltaW5hdGlvbiBsYXdcIjpcImFcIixcIm5vbi1kaXNjcmltaW5hdGlvbiBvcmRpbmFuY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiYXRocm9vbSBiaWxsXCI6XCJhXCJ9LG5vdGU6XCJBIHRlcm0gY3JlYXRlZCBhbmQgdXNlZCBieSBmYXItcmlnaHQgZXh0cmVtaXN0cyB0byBvcHBvc2Ugbm9uZGlzY3JpbWluYXRpb24gbGF3cyB0aGF0IHByb3RlY3QgdHJhbnNnZW5kZXIgcGVvcGxlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcImhlcm1hcGhyb2RpdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbnRlcnNleDpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVybWFwaHJvZGl0aWM6XCJhXCIscHNldWRvaGVybWFwaHJvZGl0aWM6XCJhXCIsXCJwc2V1ZG8gaGVybWFwaHJvZGl0aWNcIjpcImFcIn0sbm90ZTpcIlRoZXNlIHRlcm1zIGFyZSBzdGlnbWF0aXppbmcgdG8gcGF0aWVudHMgYW5kIHRoZWlyIGZhbWlsaWVzIGJlY2F1c2UgaW50ZXJzZXggc3RhdHVzIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgbWVyZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGNlcnRhaW4gZ29uYWRhbCB0aXNzdWVzIChzb3VyY2U6IGh0dHA6Ly93d3cuaXNuYS5vcmcvbm9kZS85NzkpXCJ9LHtpZDpcImhlcm1hcGhyb2RpdGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBpcyBpbnRlcnNleFwiOlwiYVwiLHBlcnNvbjpcImFcIixcImludGVyc2V4IHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXJtYXBocm9kaXRlOlwiYVwiLHBzZXVkb2hlcm1hcGhyb2RpdGU6XCJhXCIsXCJwc2V1ZG8gaGVybWFwaHJvZGl0ZVwiOlwiYVwifSxub3RlOlwiVGhlc2UgdGVybXMgYXJlIHN0aWdtYXRpemluZyB0byBwYXRpZW50cyBhbmQgdGhlaXIgZmFtaWxpZXMgYmVjYXVzZSBpbnRlcnNleCBzdGF0dXMgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSBtZXJlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgY2VydGFpbiBnb25hZGFsIHRpc3N1ZXMgKHNvdXJjZTogaHR0cDovL3d3dy5pc25hLm9yZy9ub2RlLzk3OSlcIn0se2lkOlwiaGVzaGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHJhbnNnZW5kZXIgcGVyc29uXCI6XCJhXCIscGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaGVtYWxlOlwiYVwiLFwic2hlIG1hbGVcIjpcImFcIixoZXNoZTpcImFcIixzaGVoZTpcImFcIn0sbm90ZTpcIlRoaXMgd29yZCBkZWh1bWFuaXplcyB0cmFuc2dlbmRlciBwZW9wbGUgKHNvdXJjZTogaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL2Fza3RyYW5zZ2VuZGVyL2NvbW1lbnRzLzIzd2JxMS9pc190aGVfdGVybV9zaGVtYWxlX3NlZW5fYXNfb2ZmZW5zaXZlLylcIn0se2lkOlwiZ2VuZGVyLXByb25vdW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Byb25vdW46XCJhXCIscHJvbm91bnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicHJlZmVycmVkIHByb25vdW5cIjpcImFcIixcInByZWZlcnJlZCBwcm9ub3Vuc1wiOlwiYVwiLFwiZ2VuZGVyIHByb25vdW5cIjpcImFcIixcImdlbmRlciBwcm9ub3Vuc1wiOlwiYVwifSxub3RlOlwiUHJlZmVycmVkIHByb25vdW4gc291bmRzIGxpa2UgaXQgaXMgb3B0aW9uYWwgdG8gdXNlIHNvbWVvbmUncyBjb3JyZWN0IHByb25vdW4gKHNvdXJjZTogaHR0cHM6Ly93d3cuc2VsZmRlZmluZWQuYXBwL2RlZmluaXRpb25zL3Byb25vdW5zLylcIn0se2lkOlwiaXNsYW1pc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e211c2xpbTpcImFcIixcInBlcnNvbiBvZiBJc2xhbWljIGZhaXRoXCI6XCJhXCIsZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsXCJmb2xsb3dlciBvZiBpc2xhbVwiOlwiYVwiLFwiZm9sbG93ZXIgb2YgdGhlIGlzbGFtaWMgZmFpdGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aXNsYW1pc3Q6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LnVzbmV3cy5jb20vbmV3cy9uZXdzZ3JhbS9hcnRpY2xlcy8yMDEzLzA0LzA0L3RoZS1hc3NvY2lhdGVkLXByZXNzLXJldmlzZXMtaXNsYW1pc3QtYW5vdGhlci1wb2xpdGljYWxseS1jaGFyZ2VkLXRlcm1cIn0se2lkOlwiaXNsYW1pc3RzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttdXNsaW1zOlwiYVwiLFwicGVvcGxlIG9mIElzbGFtaWMgZmFpdGhcIjpcImFcIixmYW5hdGljczpcImFcIix6ZWFsb3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpc2xhbWlzdHM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LnVzbmV3cy5jb20vbmV3cy9uZXdzZ3JhbS9hcnRpY2xlcy8yMDEzLzA0LzA0L3RoZS1hc3NvY2lhdGVkLXByZXNzLXJldmlzZXMtaXNsYW1pc3QtYW5vdGhlci1wb2xpdGljYWxseS1jaGFyZ2VkLXRlcm1cIn0se2lkOlwibWFzdGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcmltYXJ5OlwiYVwiLGxlYWQ6XCJhXCIsaHViOlwiYVwiLHJlZmVyZW5jZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVyOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYG1hc3RlcmA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcIm1hc3RlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3ByaW1hcmllczpcImFcIixodWJzOlwiYVwiLHJlZmVyZW5jZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcnM6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0aGUgdGVybSBgbWFzdGVyYDsgdGhlc2Ugc3VnZ2VzdGlvbnMgYXJlIGZvciB0aGUgY29tcHV0ZXIgdGVybSwgYnV0IHRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciBjYXNlcyB0b29cIn0se2lkOlwic2xhdmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NlY29uZGFyeTpcImFcIix3b3JrZXI6XCJhXCIscmVwbGljYTpcImFcIixub2RlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzbGF2ZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBzbGF2ZWA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcInNsYXZlc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2Vjb25kYXJpZXM6XCJhXCIsd29ya2VyczpcImFcIixyZXBsaWNhczpcImFcIixub2RlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2xhdmVzOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYHNsYXZlYDsgdGhlc2Ugc3VnZ2VzdGlvbnMgYXJlIGZvciB0aGUgY29tcHV0ZXIgdGVybSwgYnV0IHRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciBjYXNlcyB0b29cIn0se2lkOlwiYmxhY2toYXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widW5ldGhpY2FsIGhhY2tlclwiOlwiYVwiLFwibWFsaWNpb3VzIGFjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNraGF0OlwiYVwifX0se2lkOlwid2hpdGVoYXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZXRoaWNhbCBoYWNrZXJcIjpcImFcIixcInNlY3VyaXR5IHJlc2VhcmNoZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVoYXQ6XCJhXCJ9fSx7aWQ6XCJlc2tpbW9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0ludWl0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntlc2tpbW86XCJhXCJ9fSx7aWQ6XCJlc2tpbW9zXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntJbnVpdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Vza2ltb3M6XCJhXCJ9fSx7aWQ6XCJvcmllbnRhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJBc2lhbiBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7b3JpZW50YWw6XCJhXCJ9fSx7aWQ6XCJvcmllbnRhbHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiQXNpYW4gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29yaWVudGFsczpcImFcIn19LHtpZDpcIm5vbndoaXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiBvZiBjb2xvclwiOlwiYVwiLFwicGVvcGxlIG9mIGNvbG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25vbndoaXRlOlwiYVwiLFwibm9uIHdoaXRlXCI6XCJhXCJ9fSx7aWQ6XCJnaGV0dG9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Byb2plY3RzOlwiYVwiLHVyYmFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaGV0dG86XCJhXCJ9fSx7aWQ6XCJyZWRza2luXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIk5hdGl2ZSBBbWVyaWNhblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInJlZCBpbmRpYW5cIjpcImFcIixwb2NhaG9udGFzOlwiYVwiLHJlZHNraW46XCJhXCJ9fSx7aWQ6XCJyZWRza2luc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJOYXRpdmUgQW1lcmljYW4gUGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicmVkIGluZGlhbnNcIjpcImFcIixyZWRza2luczpcImFcIn19LHtpZDpcInRvdGVtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYXZvcml0ZTpcImFcIixpbnNwaXJhdGlvbjpcImFcIixcInBlcnNvbmFsIGludGVyZXN0XCI6XCJhXCIsXCJwZXJzb25hbGl0eSB0eXBlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYW5pbWFsIHNwaXJpdFwiOlwiYVwiLFwiZHJlYW0gY2F0Y2hlclwiOlwiYVwiLFwic3Bpcml0IGFuaW1hbFwiOlwiYVwiLHRvdGVtOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBvdmVyc2ltcGxpZnkgdGhlIGNvbXBsZXggYW5kIHZhcmllZCBiZWxpZWZzIG9mIGluZGlnZW5vdXMgcmVsaWdpb25zLiAoc291cmNlOiBodHRwczovL3d3dy53b3JsZHJlbGlnaW9ubmV3cy5jb20vb3Bpbmlvbi9zcGlyaXQtYW5pbWFsLW5vdC1qb2tlLW9wcHJlc3Npb24saHR0cHM6Ly93d3cuc3BpcmFsbmF0dXJlLmNvbS9zcGlyaXR1YWxpdHkvc3Bpcml0LWFuaW1hbC1jdWx0dXJhbC1hcHByb3ByaWF0aW9uKVwifSx7aWQ6XCJsb25nLXRpbWUtbm8tc2VlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkkgaGF2ZW7igJl0IHNlZW4geW91IGluIGEgbG9uZyB0aW1lXCI6XCJhXCIsXCJpdOKAmXMgYmVlbiBhIGxvbmcgdGltZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxvbmcgdGltZSBubyBoZWFyXCI6XCJhXCIsXCJsb25nIHRpbWUgbm8gc2VlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHRoYXQgaW1wbGljaXRseSBtb2NrIHBlb3BsZSB3aXRoIGxpbWl0ZWQga25vd2xlZGdlIG9mIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiAoc291cmNlOiBodHRwczovL3d3dy5ucHIub3JnL3NlY3Rpb25zL2NvZGVzd2l0Y2gvMjAxNC8wMy8wOS8yODgzMDAzMDMvd2hvLWZpcnN0LXNhaWQtbG9uZy10aW1lLW5vLXNlZS1hbmQtaW4td2hpY2gtbGFuZ3VhZ2UpXCJ9LHtpZDpcImluZGlhbi1jb3VudHJ5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImVuZW15IHRlcnJpdG9yeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIkluZGlhbiBjb3VudHJ5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byB0aGUgZ2Vub2NpZGFsIFVuaXRlZCBTdGF0ZXMg4oCcSW5kaWFuIFJlbW92YWzigJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9uZXdzbWF2ZW4uaW8vaW5kaWFuY291bnRyeXRvZGF5L2FyY2hpdmUvb2ZmLXRoZS1yZXNlcnZhdGlvbi1hLXRlYWNoYWJsZS1tb21lbnQtblcxZDdVMEpSa09zemh0ZzhOMVYxQS8pXCJ9LHtpZDpcIm9mZi1yZXNlcnZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXNvYmV5OlwiYVwiLGVuZHVyZTpcImFcIixcIm9iamVjdCB0b1wiOlwiYVwiLG9wcG9zZTpcImFcIixyZXNpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wianVtcCB0aGUgcmVzZXJ2YXRpb25cIjpcImFcIixcIm9mZiByZXNlcnZlXCI6XCJhXCIsXCJvZmYgdGhlIHJlc2VydmF0aW9uXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byB0aGUgZ2Vub2NpZGFsIFVuaXRlZCBTdGF0ZXMg4oCcSW5kaWFuIFJlbW92YWzigJ0gbGF3cy4gKHNvdXJjZTogaHR0cDovL2Jsb2cubmF0aXZlcGFydG5lcnNoaXAub3JnL29mZi10aGUtcmVzZXJ2YXRpb24vLGh0dHBzOi8vd3d3Lndzai5jb20vYXJ0aWNsZXMvb2ZmLXRoZS1yZXNlcnZhdGlvbi1pcy1hLXBocmFzZS13aXRoLWEtZGFyay1wYXN0LTE0NjI1NTI4MzcsaHR0cHM6Ly93d3cubnByLm9yZy9zZWN0aW9ucy9jb2Rlc3dpdGNoLzIwMTQvMDYvMjkvMzI2NjkwOTQ3L3Nob3VsZC1zYXlpbmctc29tZW9uZS1pcy1vZmYtdGhlLXJlc2VydmF0aW9uLWJlLW9mZi1saW1pdHMsaHR0cHM6Ly9ub3d0b3JvbnRvLmNvbS9uZXdzL25hdGl2ZS1yZWZlcmVuY2VzLWFuZC10ZXJtcy10aGF0LWFyZS1vZmZlbnNpdmUtdG8taW5kaWdlbm91cy1wZW9wbGUvKVwifSx7aWQ6XCJvbi10aGUtd2FycGF0aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVmZW5kOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNpcmNsZSB0aGUgd2Fnb25zXCI6XCJhXCIsXCJvbiB0aGUgd2FycGF0aFwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuIChzb3VyY2U6IGh0dHBzOi8vaWRpb21zLnRoZWZyZWVkaWN0aW9uYXJ5LmNvbS9jaXJjbGUrdGhlK3dhZ29ucyxodHRwczovL2lkaW9tcy50aGVmcmVlZGljdGlvbmFyeS5jb20vZ28rb24rdGhlK3dhcnBhdGgpXCJ9LHtpZDpcInRvby1tYW55LWNoaWVmc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0b28gbWFueSBjaGVmcyBpbiB0aGUga2l0Y2hlblwiOlwiYVwiLFwidG9vIG1hbnkgY29va3Mgc3BvaWwgdGhlIGJyb3RoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widG9vIG1hbnkgY2hpZWZzXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byBjb2xvbmlhbCBzdGVyZW90eXBlcyByZWdhcmRpbmcgTmF0aXZlIEFtZXJpY2Fucy4gKHNvdXJjZTogaHR0cHM6Ly9pZGlvbXMudGhlZnJlZWRpY3Rpb25hcnkuY29tL3RvbyttYW55K2NoaWVmcythbmQrbm90K2Vub3VnaCtJbmRpYW5zKVwifSx7aWQ6XCJuYXRpdmVzLWFyZS1yZXN0bGVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzc2F0aXNmaWVkOlwiYVwiLGZydXN0cmF0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibmF0aXZlcyBhcmUgcmVzdGxlc3NcIjpcImFcIixcIm5hdGl2ZXMgYXJlIGJlY29taW5nIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBnZXR0aW5nIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBncm93aW5nIHJlc3RsZXNzXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byBjb2xvbmlhbCBzdGVyZW90eXBlcyByZWdhcmRpbmcgaW5kaWdlbm91cyBwZW9wbGVzLiAoc291cmNlOiBodHRwczovL3R2dHJvcGVzLm9yZy9wbXdpa2kvcG13aWtpLnBocC9NYWluL1RoZU5hdGl2ZXNBcmVSZXN0bGVzcylcIn0se2lkOlwicG93d293XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjb25mZXJlbmNlOlwiYVwiLGdhdGhlcmluZzpcImFcIixtZWV0aW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInBvdyB3b3dcIjpcImFcIixwb3d3b3c6XCJhXCJ9LG5vdGU6XCJBdm9pZCBjYXN1YWxseSB1c2luZyB0aGlzIHRlcm0sIHdoaWNoIHJlZmVycyB0byB0cmFkaXRpb25hbCBpbmRpZ2Vub3VzIGNlbGVicmF0aW9uIGNlcmVtb25pZXMgdGhhdCB3ZXJlIGJhbm5lZCBieSBnZW5vY2lkYWwgbGF3cyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgQ2FuYWRhIOKAlCBOYXRpdmUgcGVvcGxlIGRpZWQgZmlnaHRpbmcgZm9yIHRoaXMgcmlnaHQuIChzb3VyY2U6IGh0dHBzOi8vdHdpdHRlci5jb20vY2hhZGxvZGVyL3N0YXR1cy8xMjAzNTA3MDcwNzcyNzkzMzQ1LGh0dHA6Ly9uYXRpdmVhcHByb3ByaWF0aW9ucy5jb20vMjAxMi8wOS9wYXVsLWZyYW5rLW9mZmVuZHMtZXZlcnktbmF0aXZlLXBlcnNvbi1vbi10aGUtcGxhbmV0LXdpdGgtZmFzaGlvbi1uaWdodC1vdXQtZHJlYW0tY2F0Y2hpbi1wb3ctd293Lmh0bWwsaHR0cHM6Ly93d3cuYnJpdGFubmljYS5jb20vdG9waWMvcG93d293LGh0dHBzOi8vbm93dG9yb250by5jb20vbmV3cy9uYXRpdmUtcmVmZXJlbmNlcy1hbmQtdGVybXMtdGhhdC1hcmUtb2ZmZW5zaXZlLXRvLWluZGlnZW5vdXMtcGVvcGxlLylcIn0se2lkOlwiaW5kaWFuLWdpdmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ28gYmFjayBvbiBvbmXigJlzIG9mZmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5kaWFuIGdpdmVcIjpcImFcIixcImluZGlhbiBnaXZlclwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuXCJ9LHtpZDpcInBpbm95c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7RmlsaXBpbm9zOlwiYVwiLFwiRmlsaXBpbm8gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Bpbm95czpcImFcIixwaW5heXM6XCJhXCJ9fSx7aWQ6XCJ0b3dlbC1oZWFkc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7QXJhYnM6XCJhXCIsXCJNaWRkbGUgRWFzdGVybiBQZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzYW5kIG5pZ2dlcnNcIjpcImFcIixcInRvd2VsIGhlYWRzXCI6XCJhXCJ9fSx7aWQ6XCJsYXRpbm9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0xhdGlueDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGF0aW5vOlwiYVwiLGxhdGluYTpcImFcIn0sbm90ZTpcIldoZW5ldmVyIHBvc3NpYmxlLCB0cnkgdG8gYmUgZ2VuZGVyIGluY2x1c2l2ZS5cIn0se2lkOlwiamFwc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJKYXBhbmVzZSBwZXJzb25cIjpcImFcIixcIkphcGFuZXNlIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqYXBzOlwiYVwifX0se2lkOlwiaHltaWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiSmV3aXNoIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaGxvbW86XCJhXCIsc2h5c3RlcjpcImFcIixoeW1pZTpcImFcIn19LHtpZDpcImdveVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIHBlcnNvbiB3aG8gaXMgbm90IEpld2lzaFwiOlwiYVwiLFwibm90IEpld2lzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnb3lpbTpcImFcIixnb3l1bTpcImFcIixnb3k6XCJhXCJ9fSx7aWQ6XCJzcGFkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIEJsYWNrIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFkZTpcImFcIn19LHtpZDpcImd5cFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Tm9tYWQ6XCJhXCIsVHJhdmVsZXI6XCJhXCIsUm9tYTpcImFcIixSb21hbmk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2d5cHBvOlwiYVwiLGd5cHN5OlwiYVwiLEdpcHN5OlwiYVwiLGd5cDpcImFcIn0sbm90ZTpcIkd5cHN5IGlzIGluc2Vuc2l0aXZlLCB1c2UgUm9tYSBvciBSb21hbmkuIFRoZXnigJlyZSBub3QgRWd5cHRpYW4gYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIChzb3VyY2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9Sb21hbmlfcGVvcGxlI2NpdGVfcmVmLTgwKVwifSx7aWQ6XCJibGFja2xpc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdDpcImFcIix3cm9uZ2xpc3Q6XCJhXCIsYmFubGlzdDpcImFcIixcImRlbnkgbGlzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3Q6XCJhXCIsXCJibGFjayBsaXN0XCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwiYmxhY2tsaXN0ZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdGVkOlwiYVwiLHdyb25nbGlzdGVkOlwiYVwiLGJhbmxpc3RlZDpcImFcIixcImRlbnktbGlzdGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNrbGlzdGVkOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcImJsYWNrbGlzdGluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YmxvY2tsaXN0aW5nOlwiYVwiLHdyb25nbGlzdGluZzpcImFcIixiYW5saXN0aW5nOlwiYVwiLFwiZGVueS1saXN0aW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNrbGlzdGluZzpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZWxpc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0OlwiYVwiLGFscmlnaHRsaXN0OlwiYVwiLHNhZmVsaXN0OlwiYVwiLFwiYWxsb3cgbGlzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3Q6XCJhXCIsXCJ3aGl0ZSBsaXN0XCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVsaXN0ZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0ZWQ6XCJhXCIsYWxyaWdodGxpc3RlZDpcImFcIixzYWZlbGlzdGVkOlwiYVwiLFwiYWxsb3ctbGlzdGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlbGlzdGVkOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlbGlzdGluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cGFzc2xpc3Rpbmc6XCJhXCIsYWxyaWdodGxpc3Rpbmc6XCJhXCIsc2FmZWxpc3Rpbmc6XCJhXCIsXCJhbGxvdy1saXN0aW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlbGlzdGluZzpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZXNwYWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzcGFjZTpcImFcIixibGFuazpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVzcGFjZTpcImFcIixcIndoaXRlIHNwYWNlXCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVzcGFjZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NwYWNlOlwiYVwiLGJsYW5rOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZXNwYWNlczpcImFcIixcIndoaXRlIHNwYWNlc1wiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcInNhdmFnZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2ltcGxlOlwiYVwiLGluZGlnZW5vdXM6XCJhXCIsXCJodW50ZXItZ2F0aGVyZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHJpbWl0aXZlOlwiYVwiLHNhdmFnZTpcImFcIixcInN0b25lIGFnZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBpbXBseSBhIGdyb3VwIGhhcyBub3QgY2hhbmdlZCBvdmVyIHRpbWUgYW5kIHRoYXQgdGhleSBhcmUgaW5mZXJpb3JcIn0se2lkOlwidHJpYmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NvY2lldHk6XCJhXCIsY29tbXVuaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmliZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgbWFrZSBzb21lIGdyb3VwcyBzb3VuZCBpbmZlcmlvclwifSx7aWQ6XCJzb3BoaXN0aWNhdGVkLWN1bHR1cmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY29tcGxleCBjdWx0dXJlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic29waGlzdGljYXRlZCBjdWx0dXJlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3IuIFJlcGxhY2Ug4oCcc29waGlzdGljYXRlZOKAnSB3aXRoIGEgbmV1dHJhbCB0ZXJtIHN1Y2ggYXMg4oCcY29tcGxleOKAnVwifSx7aWQ6XCJzb3BoaXN0aWNhdGVkLXRlY2hub2xvZ3lcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY29tcGxleCB0ZWNobm9sb2d5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic29waGlzdGljYXRlZCB0ZWNobm9sb2d5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3IuIFJlcGxhY2Ug4oCcc29waGlzdGljYXRlZOKAnSB3aXRoIGEgbmV1dHJhbCB0ZXJtIHN1Y2ggYXMg4oCcY29tcGxleOKAnVwifSx7aWQ6XCJidWdyZXBvcnRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYnVnIHJlcG9ydFwiOlwiYVwiLHNuYXBzaG90OlwiYVwifSxpbmNvbnNpZGVyYXRlOntidWdyZXBvcnQ6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBgYnVncmVwb3J0YCwgYXMgdGhlIHdvcmQgYGJ1Z3JlYCBpcyBhIHNsdXIgaW4gQnJhemlsaWFuIFBvcnR1Z3Vlc2VcIn0se2lkOlwiZ3JhbmRmYXRoZXItY2xhdXNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImxlZ2FjeSBwb2xpY3lcIjpcImFcIixcImxlZ2FjeSBjbGF1c2VcIjpcImFcIixcImRlcHJlY2F0aW9uIHBvbGljeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImdyYW5kZmF0aGVyIGNsYXVzZVwiOlwiYVwiLFwiZ3JhbmRmYXRoZXIgcG9saWN5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byByYWNpc3QgVW5pdGVkIFN0YXRlcyDigJxKaW0gQ3Jvd+KAnSBsYXdzLiAoc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFuZGZhdGhlcl9jbGF1c2UjT3JpZ2luKVwifSx7aWQ6XCJncmFuZGZhdGhlcmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVwcmVjYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGZhdGhlcmluZzpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIHJhY2lzdCBVbml0ZWQgU3RhdGVzIOKAnEppbSBDcm934oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW5kZmF0aGVyX2NsYXVzZSNPcmlnaW4pXCJ9LHtpZDpcImdyYW5kZmF0aGVyZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlcHJlY2F0ZWQ6XCJhXCIsbGVnYWN5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGZhdGhlcmVkOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gcmFjaXN0IFVuaXRlZCBTdGF0ZXMg4oCcSmltIENyb3figJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbmRmYXRoZXJfY2xhdXNlI09yaWdpbilcIn0se2lkOlwibWFrZS0qLWdyZWF0LWFnYWluXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbXByb3ZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1ha2UgKiBncmVhdCBhZ2FpblwiOlwiYVwiLFwibWFrZSAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogKiBncmVhdCBhZ2FpblwiOlwiYVwiLFwibWFrZSAqICogKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIn19LHtpZDpcImNvbW1pdHRlZC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImRpZWQgYnkgc3VpY2lkZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNvbW1pdHRlZCBzdWljaWRlXCI6XCJhXCIsXCJjb21wbGV0ZWQgc3VpY2lkZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlLCBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZS9cIn0se2lkOlwiY29tbWl0LXN1aWNpZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZGllIGJ5IHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXQgc3VpY2lkZVwiOlwiYVwiLFwiY29tcGxldGUgc3VpY2lkZVwiOlwiYVwiLFwic3VjY2Vzc2Z1bCBzdWljaWRlXCI6XCJhXCJ9LG5vdGU6XCJDb21taXR0aW5nIHN1aWNpZGUgaXMgbm90IHN1Y2Nlc3NmdWwvdW5zdWNjZXNzZnVsLCB0aGF0IHNlbmRzIHRoZSB3cm9uZyBtZXNzYWdlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUsIGh0dHBzOi8vd3d3LnNwZWFraW5nb2ZzdWljaWRlLmNvbS8yMDEzLzA0LzEzL2xhbmd1YWdlLylcIn0se2lkOlwic3VpY2lkZS1wYWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInJpc2UgaW4gc3VpY2lkZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWljaWRlIGVwaWRlbWljXCI6XCJhXCIsXCJlcGlkZW1pYyBvZiBzdWljaWRlc1wiOlwiYVwiLFwic3VpY2lkZSBwYWN0XCI6XCJhXCJ9LG5vdGU6XCJVc2luZyBzZW5zYXRpb25hbCB3b3JkcyBjYW4gY2F1c2UgY29weWNhdCBzdWljaWRlcyBvciBjb250YWdpb24gKHNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSlcIn0se2lkOlwiZmFpbGVkLXN1aWNpZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VpY2lkZSBhdHRlbXB0XCI6XCJhXCIsXCJhdHRlbXB0ZWQgc3VpY2lkZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZhaWxlZCBzdWljaWRlXCI6XCJhXCIsXCJmYWlsZWQgYXR0ZW1wdFwiOlwiYVwiLFwic3VpY2lkZSBmYWlsdXJlXCI6XCJhXCJ9LG5vdGU6XCJBdHRlbXB0ZWQgc3VpY2lkZSBzaG91bGQgbm90IGJlIGRlcGljdGVkIGFzIGEgZmFpbHVyZSAoc291cmNlOiBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZSwgaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSlcIn0se2lkOlwic3VpY2lkZS1ub3RlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImEgbm90ZSBmcm9tIHRoZSBkZWNlYXNlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1aWNpZGUgbm90ZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlXCJ9LHtpZDpcImhhbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGFwcCBmcm96ZVwiOlwiYVwiLFwidGhlIGFwcCBzdG9wcGVkIHJlc3BvbmRpbmdcIjpcImFcIixcInRoZSBhcHAgc3RvcHBlZCByZXNwb25kaW5nIHRvIGV2ZW50c1wiOlwiYVwiLFwidGhlIGFwcCBiZWNhbWUgdW5yZXNwb25zaXZlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmc6XCJhXCIsaGFuZ2VkOlwiYVwifSxub3RlOlwiV2hlbiBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBvZiBjb21wdXRlciBzb2Z0d2FyZSwgdXNpbmcgdGhlIHdvcmQg4oCcaGFuZ2Vk4oCdIG5lZWRsZXNzbHkgaW52b2tlcyB0aGUgdG9waWMgb2YgZGVhdGggYnkgc2VsZi1oYXJtIG9yIGx5bmNoaW5nLiAgQ29uc2lkZXIgdXNpbmcgdGhlIHdvcmQg4oCcZnJvemXigJ0gb3IgdGhlIHBocmFzZSDigJxzdG9wcGVkIHJlc3BvbmRpbmcgdG8gZXZlbnRz4oCdIG9yIOKAnGJlY2FtZSB1bnJlc3BvbnNpdmXigJ0gaW5zdGVhZC5cIn1dKSx5YT1nYTt2YXIgYmE9YSg0MjcpO2NvbnN0IERhPXt9Lmhhc093blByb3BlcnR5LGZhPVwicmV0ZXh0LXNwZWxsXCI7ZnVuY3Rpb24gR2Eobj17fSl7XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49e2RpY3Rpb25hcnk6bn0pO2NvbnN0e2RpY3Rpb25hcnk6ZSxpZ25vcmU6YSxtYXg6aSxpZ25vcmVMaXRlcmFsOnIsaWdub3JlRGlnaXRzOnQsbm9ybWFsaXplQXBvc3Ryb3BoZXM6byxwZXJzb25hbDpNfT1uLHM9W107bGV0IGw7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYE9iamVjdGAsIGdvdCBgXCIrZStcImBcIik7Y29uc3QgYz17aWdub3JlTGl0ZXJhbDpudWxsPT1yfHxyLGlnbm9yZURpZ2l0czpudWxsPT10fHx0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm51bGw9PW98fG8saWdub3JlOmF8fFtdLG1heDppfHwzMCxjb3VudDowLGNhY2hlOnt9LGNoZWNrZXI6dm9pZCAwfTtyZXR1cm4gZSgoKG4sZSk9PntsZXQgYT0tMTtmb3IobD1uLGUmJihjLmNoZWNrZXI9YmEoZSksTSYmYy5jaGVja2VyLnBlcnNvbmFsKE0pKTsrK2E8cy5sZW5ndGg7KXtjb25zdCBlPXNbYV0uc2xpY2UoMCwzKTtufHx3YSguLi5lKSxzW2FdWzNdKG4pfXMubGVuZ3RoPTB9KSksKG4sZSxhKT0+e2w/YShsKTpjLmNoZWNrZXI/KHdhKG4sZSxjKSxhKCkpOnMucHVzaChbbixlLGMsYV0pfX1mdW5jdGlvbiB3YShuLGUsYSl7Y29uc3R7aWdub3JlOmksaWdub3JlTGl0ZXJhbDpyLGlnbm9yZURpZ2l0czp0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm8sY2hlY2tlcjpNLGNhY2hlOnN9PWE7ZnVuY3Rpb24gbChuLGUpe3JldHVybiBuK1wiOyBkaWQgeW91IG1lYW4gXCIrdWEoZSxcImBcIikuam9pbihcIiwgXCIpK1wiP1wifWZ1bmN0aW9uIGMobil7cmV0dXJuIGkuaW5jbHVkZXMobil8fHQmJi9eXFxkKyQvLnRlc3Qobil9X24obixcIldvcmROb2RlXCIsKChuLGksdCk9Pntjb25zdCBTPXQsdT1uLmNoaWxkcmVuO2lmKCFTfHxudWxsPT09aXx8ciYmUWUoUyxpKSlyZXR1cm47bGV0IGQ9cW4obik7aWYobyYmKGQ9ZC5yZXBsYWNlKC/igJkvZyxcIidcIikpLGMoZCkpcmV0dXJuO2xldCBtPU0uY29ycmVjdChkKTtpZighbSYmdS5sZW5ndGg+MSl7bGV0IG49LTE7Zm9yKG09ITA7KytuPHUubGVuZ3RoOyl7Y29uc3QgZT11W25dO1wiVGV4dE5vZGVcIiE9PWUudHlwZXx8YyhlLnZhbHVlKXx8TS5jb3JyZWN0KGUudmFsdWUpfHwobT0hMSl9fWlmKCFtKXtsZXQgaSxyPXVhKGQsXCJgXCIpK1wiIGlzIG1pc3NwZWx0XCI7RGEuY2FsbChzLGQpPyhpPXNbZF0scj1sKHIsaSkpOihhLmNvdW50PT09YS5tYXgmJmUubWVzc2FnZShcIlRvbyBtYW55IG1pc3NwZWxsaW5nczsgbm8gZnVydGhlciBzcGVsbCBzdWdnZXN0aW9ucyBhcmUgZ2l2ZW5cIixuLFtmYSxcIm92ZXJmbG93XCJdLmpvaW4oXCI6XCIpKSxhLmNvdW50KyssYS5jb3VudDxhLm1heCYmKGk9TS5zdWdnZXN0KGQpLGkubGVuZ3RoPjAmJihyPWwocixpKSkpLHNbZF09aXx8W10pLE9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKHIsbixbZmEsZC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcVysvLFwiLVwiKV0uam9pbihcIjpcIikpLHthY3R1YWw6ZCxleHBlY3RlZDppfHxbXX0pfX0pKX1jb25zdCB2YT1be2lkOlwiYXJlLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImFyZW4ndFwiLGN1cmx5OlwiYXJlbuKAmXRcIn0sZXhwYW5kZWQ6W1wiYXJlIG5vdFwiXX0se2lkOlwiY2FuLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNhbid0XCIsY3VybHk6XCJjYW7igJl0XCJ9LGV4cGFuZGVkOltcImNhbiBub3RcIixcImNhbm5vdFwiXX0se2lkOlwiY291bGQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNvdWxkJ3ZlXCIsY3VybHk6XCJjb3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcImNvdWxkIGhhdmVcIl19LHtpZDpcImNvdWxkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNvdWxkbid0XCIsY3VybHk6XCJjb3VsZG7igJl0XCJ9LGV4cGFuZGVkOltcImNvdWxkIG5vdFwiXX0se2lkOlwiZGlkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImRpZG4ndFwiLGN1cmx5OlwiZGlkbuKAmXRcIn0sZXhwYW5kZWQ6W1wiZGlkIG5vdFwiXX0se2lkOlwiZG9lcy1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkb2Vzbid0XCIsY3VybHk6XCJkb2VzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiZG9lcyBub3RcIl19LHtpZDpcImRvLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImRvbid0XCIsY3VybHk6XCJkb27igJl0XCJ9LGV4cGFuZGVkOltcImRvIG5vdFwiXX0se2lkOlwiZXZlcnlib2R5LWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiZXZlcnlib2R5J3NcIixjdXJseTpcImV2ZXJ5Ym9keeKAmXNcIn0sZXhwYW5kZWQ6W1wiZXZlcnlib2R5IGlzXCJdfSx7aWQ6XCJldmVyeW9uZS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImV2ZXJ5b25lJ3NcIixjdXJseTpcImV2ZXJ5b25l4oCZc1wifSxleHBhbmRlZDpbXCJldmVyeW9uZSBpc1wiXX0se2lkOlwiaGFkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhhZG4ndFwiLGN1cmx5OlwiaGFkbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGFkIG5vdFwiXX0se2lkOlwiaGFzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhhc24ndFwiLGN1cmx5OlwiaGFzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGFzIG5vdFwiXX0se2lkOlwiaGF2ZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYXZlbid0XCIsY3VybHk6XCJoYXZlbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGF2ZSBub3RcIl19LHtpZDpcImhlLWhhZC13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ2RcIixjdXJseTpcImhl4oCZZFwifSxleHBhbmRlZDpbXCJoZSBoYWRcIixcImhlIHdvdWxkXCJdfSx7aWQ6XCJoZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGUnbGxcIixjdXJseTpcImhl4oCZbGxcIn0sZXhwYW5kZWQ6W1wiaGUgd2lsbFwiXX0se2lkOlwiaGUtaGFzLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGUnc1wiLGN1cmx5OlwiaGXigJlzXCJ9LGV4cGFuZGVkOltcImhlIGhhc1wiLFwiaGUgaXNcIl19LHtpZDpcImhlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoZXJlJ3NcIixjdXJseTpcImhlcmXigJlzXCJ9LGV4cGFuZGVkOltcImhlcmUgaXNcIl19LHtpZDpcImktaGFkLXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSdkXCIsY3VybHk6XCJJ4oCZZFwifSxleHBhbmRlZDpbXCJJIGhhZFwiLFwiSSB3b3VsZFwiXX0se2lkOlwiaS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSdsbFwiLGN1cmx5OlwiSeKAmWxsXCJ9LGV4cGFuZGVkOltcIkkgd2lsbFwiXX0se2lkOlwiaS1hbVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknbVwiLGN1cmx5OlwiSeKAmW1cIn0sZXhwYW5kZWQ6W1wiSSBhbVwiXX0se2lkOlwiaS1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSd2ZVwiLGN1cmx5OlwiSeKAmXZlXCJ9LGV4cGFuZGVkOltcIkkgaGF2ZVwiXX0se2lkOlwiaXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXNuJ3RcIixjdXJseTpcImlzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaXMgbm90XCJdfSx7aWQ6XCJpdC13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXQnbGxcIixjdXJseTpcIml04oCZbGxcIn0sZXhwYW5kZWQ6W1wiaXQgd2lsbFwiXX0se2lkOlwiaXQtaGFzLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXQnc1wiLGN1cmx5OlwiaXTigJlzXCJ9LGV4cGFuZGVkOltcIml0IGhhc1wiLFwiaXQgaXNcIl19LHtpZDpcImxldC11c1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImxldCdzXCIsY3VybHk6XCJsZXTigJlzXCJ9LGV4cGFuZGVkOltcImxldCB1c1wiXX0se2lkOlwibWlnaHQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIm1pZ2h0J3ZlXCIsY3VybHk6XCJtaWdodOKAmXZlXCJ9LGV4cGFuZGVkOltcIm1pZ2h0IGhhdmVcIl19LHtpZDpcIm11c3QtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIm11c3QndmVcIixjdXJseTpcIm11c3TigJl2ZVwifSxleHBhbmRlZDpbXCJtdXN0IGhhdmVcIl19LHtpZDpcInNoZS1oYWQtd291bGRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaGUnZFwiLGN1cmx5Olwic2hl4oCZZFwifSxleHBhbmRlZDpbXCJzaGUgaGFkXCIsXCJzaGUgd291bGRcIl19LHtpZDpcInNoZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hlJ2xsXCIsY3VybHk6XCJzaGXigJlsbFwifSxleHBhbmRlZDpbXCJzaGUgd2lsbFwiXX0se2lkOlwic2hlLWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNoZSdzXCIsY3VybHk6XCJzaGXigJlzXCJ9LGV4cGFuZGVkOltcInNoZSBoYXNcIixcInNoZSBpc1wiXX0se2lkOlwic2hvdWxkLWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaG91bGQndmVcIixjdXJseTpcInNob3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcInNob3VsZCBoYXZlXCJdfSx7aWQ6XCJzaG91bGQtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hvdWxkbid0XCIsY3VybHk6XCJzaG91bGRu4oCZdFwifSxleHBhbmRlZDpbXCJzaG91bGQgbm90XCJdfSx7aWQ6XCJzb21lYm9keS1oYXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzb21lYm9keSdzXCIsY3VybHk6XCJzb21lYm9keeKAmXNcIn0sZXhwYW5kZWQ6W1wic29tZWJvZHkgaGFzXCIsXCJzb21lYm9keSBpc1wiXX0se2lkOlwic29tZW9uZS1oYXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzb21lb25lJ3NcIixjdXJseTpcInNvbWVvbmXigJlzXCJ9LGV4cGFuZGVkOltcInNvbWVvbmUgaGFzXCIsXCJzb21lb25lIGlzXCJdfSx7aWQ6XCJzb21ldGhpbmctaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZXRoaW5nJ3NcIixjdXJseTpcInNvbWV0aGluZ+KAmXNcIn0sZXhwYW5kZWQ6W1wic29tZXRoaW5nIGhhc1wiLFwic29tZXRoaW5nIGlzXCJdfSx7aWQ6XCJ0aGF0LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGF0J2xsXCIsY3VybHk6XCJ0aGF04oCZbGxcIn0sZXhwYW5kZWQ6W1widGhhdCB3aWxsXCJdfSx7aWQ6XCJ0aGF0LWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhhdCdzXCIsY3VybHk6XCJ0aGF04oCZc1wifSxleHBhbmRlZDpbXCJ0aGF0IGlzXCJdfSx7aWQ6XCJ0aGVyZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhlcmUnbGxcIixjdXJseTpcInRoZXJl4oCZbGxcIn0sZXhwYW5kZWQ6W1widGhlcmUgd2lsbFwiXX0se2lkOlwidGhlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGVyZSdzXCIsY3VybHk6XCJ0aGVyZeKAmXNcIn0sZXhwYW5kZWQ6W1widGhlcmUgaXNcIl19LHtpZDpcInRoZXktd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXknbGxcIixjdXJseTpcInRoZXnigJlsbFwifSxleHBhbmRlZDpbXCJ0aGV5IHdpbGxcIl19LHtpZDpcInRoZXktYXJlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhleSdyZVwiLGN1cmx5OlwidGhleeKAmXJlXCJ9LGV4cGFuZGVkOltcInRoZXkgYXJlXCJdfSx7aWQ6XCJ3YXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2Fzbid0XCIsY3VybHk6XCJ3YXNu4oCZdFwifSxleHBhbmRlZDpbXCJ3YXMgbm90XCJdfSx7aWQ6XCJ3ZS1oYWQtd291bGQtZGlkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2UnZFwiLGN1cmx5Olwid2XigJlkXCJ9LGV4cGFuZGVkOltcIndlIGhhZFwiLFwid2Ugd291bGRcIixcIndlIGRpZFwiXX0se2lkOlwid2Utd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ2xsXCIsY3VybHk6XCJ3ZeKAmWxsXCJ9LGV4cGFuZGVkOltcIndlIHdpbGxcIl19LHtpZDpcIndlLWFyZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ3JlXCIsY3VybHk6XCJ3ZeKAmXJlXCJ9LGV4cGFuZGVkOltcIndlIGFyZVwiXX0se2lkOlwid2VyZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZXJlbid0XCIsY3VybHk6XCJ3ZXJlbuKAmXRcIn0sZXhwYW5kZWQ6W1wid2VyZSBub3RcIl19LHtpZDpcIndoYXQtaXMtZG9lc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoYXQnc1wiLGN1cmx5Olwid2hhdOKAmXNcIn0sZXhwYW5kZWQ6W1wid2hhdCBpc1wiLFwid2hhdCBkb2VzXCJdfSx7aWQ6XCJ3aGVuLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hlbidzXCIsY3VybHk6XCJ3aGVu4oCZc1wifSxleHBhbmRlZDpbXCJ3aGVuIGlzXCJdfSx7aWQ6XCJ3aGVyZS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoZXJlJ3NcIixjdXJseTpcIndoZXJl4oCZc1wifSxleHBhbmRlZDpbXCJ3aGVyZSBpc1wiXX0se2lkOlwid2hvLXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aG8nbGxcIixjdXJseTpcIndob+KAmWxsXCJ9LGV4cGFuZGVkOltcIndobyB3aWxsXCJdfSx7aWQ6XCJ3aG8taXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aG8nc1wiLGN1cmx5Olwid2hv4oCZc1wifSxleHBhbmRlZDpbXCJ3aG8gaXNcIl19LHtpZDpcIndoeS1kaWRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aHknZFwiLGN1cmx5Olwid2h54oCZZFwifSxleHBhbmRlZDpbXCJ3aHkgZGlkXCJdfSx7aWQ6XCJ3aWxsLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndvbid0XCIsY3VybHk6XCJ3b27igJl0XCJ9LGV4cGFuZGVkOltcIndpbGwgbm90XCJdfSx7aWQ6XCJ3b3VsZC1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid291bGQndmVcIixjdXJseTpcIndvdWxk4oCZdmVcIn0sZXhwYW5kZWQ6W1wid291bGQgaGF2ZVwiXX0se2lkOlwieW91LXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwieW91J2RcIixjdXJseTpcInlvdeKAmWRcIn0sZXhwYW5kZWQ6W1wieW91IHdvdWxkXCJdfSx7aWQ6XCJ5b3Utd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInlvdSdsbFwiLGN1cmx5OlwieW914oCZbGxcIn0sZXhwYW5kZWQ6W1wieW91IHdpbGxcIl19LHtpZDpcInlvdS1hcmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ5b3UncmVcIixjdXJseTpcInlvdeKAmXJlXCJ9LGV4cGFuZGVkOltcInlvdSBhcmVcIl19XTtmdW5jdGlvbiBrYSgpe3JldHVybihuLGUpPT57X24obixcIlBhcmFncmFwaE5vZGVcIiwobj0+e2NvbnN0IGE9bi5jaGlsZHJlbixpPVwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIjthLmZvckVhY2goKChuLGEpPT57Vm4obixcIlNlbnRlbmNlTm9kZVwiKSYmbi5jaGlsZHJlbi5mb3JFYWNoKCgoYSxyKT0+e2NvbnN0IHQ9bi5jaGlsZHJlbjtpZihWbih0W3ItMV0sXCJXb3JkTm9kZVwiKSYmVm4oYSxcIldoaXRlU3BhY2VOb2RlXCIpJiZWbih0W3IrMV0sXCJXb3JkTm9kZVwiKSl7Y29uc3Qgbj1xbih0W3ItMV0uY2hpbGRyZW5bMF0pK1wiIFwiK3FuKHRbcisxXS5jaGlsZHJlblswXSk7bGV0IG89XCJcIixNPVwiXCI7aWYodmEuc29tZSgoZT0+e2NvbnN0IGE9ZS5leHBhbmRlZC5zb21lKChlPT5lLnRvTG93ZXJDYXNlKCk9PT1uLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gbz1bZS5jb250cmFjdGlvbi5jdXJseV0sTT1lLmlkLGF9KSkpe2NvbnN0IG49cW4odFtyLTFdKStxbihhKStxbih0W3IrMV0pO3JldHVybiBjb25zb2xlLmxvZyh0W3JdKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShgRXhwZWN0ZWQgXCIke299XCIgbm90IFwiJHtufVwiYCx7c3RhcnQ6dGUodFtyLTFdKSxlbmQ6b2UodFtyKzFdKX0sW2ksTV0uam9pbihcIjpcIikpLHthY3R1YWw6bixleHBlY3RlZDpvLG5vdGU6XCJcIix1cmw6XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvY29udHJhY3Rpb25zL1wifSksZX19fSkpfSkpfSkpfX1XbihcIlNlbnRlbmNlTm9kZVwiKSxXbihcIldoaXRlU3BhY2VOb2RlXCIpO2NvbnN0IFJhPXtuZXdSZWxpYzpbXCJOZXcgUmVsaWNcIixcIndlXCJdLG5ld1JlbGljT25lOltcIk5ldyBSZWxpYyBPbmVcIixcIk5ldyBSZWxpYyBPbmUgcGxhdGZvcm1cIl0sZnV0dXJlU3RhY2s6W1wiRnV0dXJlU3RhY2tcIixcIntGdXR1cmV9U3RhY2tcIl0sY29kZVN0cmVhbTpbXCJDb2RlU3RyZWFtXCIsXCJOZXcgUmVsaWMgQ29kZVN0cmVhbVwiXSxleHBsb3JlcjpbXCJFeHBsb3JlclwiLFwiTmV3IFJlbGljIEV4cGxvcmVyXCJdLGluc3RhbnRPYnNlcnZhYmlsaXR5OltcIkluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiLFwiTmV3IFJlbGljIEkvT1wiLFwiTmV3IFJlbGljIEluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiLFwiTmV3IFJlbGljIEluc3RhbnQgT2JzZXJ2YWJpbGl0eSAoSS9PKVwiXSxsb29rb3V0OltcIk5ldyBSZWxpYyBMb29rb3V0XCIsXCJMb29rb3V0XCJdLGxvb2tvdXQ6W1wiTmV3IFJlbGljIE5hdmlnYXRvclwiLFwiTmF2aWdhdG9yXCJdLGFwbTpbXCJhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJhcHBsaWNhdGlvbiBtb25pdG9yaW5nXCIsXCJBUE1cIl0scGl4aWU6W1wiYXV0by10ZWxlbWV0cnkgd2l0aCBQaXhpZVwiLFwidGhlIFBpeGllIGludGVncmF0aW9uIHdpdGggTmV3IFJlbGljIE9uZVwiLFwib3VyIFBpeGllIGludGVncmF0aW9uXCIsXCJ0aGUgaW50ZWdyYXRpb24gd2l0aCBQaXhpZVwiLFwiUGl4aWVcIl0sZGlnaXRhbEV4cGVyaWVuY2VNb25pdG9yaW5nOltcImRpZ2l0YWwgZXhwZXJpZW5jZSBtb25pdG9yaW5nIChERU0pXCIsXCJkaWdpdGFsIGV4cGVyaWVuY2UgbW9uaXRvcmluZ1wiLFwiREVNXCJdLGluZnJhc3RydWN0dXJlTW9uaXRvcmluZzpbXCJpbmZyYXN0cnVjdHVyZSBtb25pdG9yaW5nXCIsXCJpbmZyYSBtb25pdG9yaW5nXCIsXCJpbmZyYVwiXSxsb2dNYW5hZ2VtZW50OltcImxvZyBtYW5hZ2VtZW50XCIsXCJsb2dzXCJdLG1lbHQ6W1wibWV0cmljcywgZXZlbnRzLCBsb2dzLCBhbmQgdHJhY2VzIChNRUxUKVwiLFwibWV0cmljcywgZXZlbnRzLCBsb2dzLCBhbmQgdHJhY2VzXCIsXCJNRUxUXCJdLG5ldHdvcmtQZXJmb3JtYW5jZU1vbml0b3Jpbmc6W1wibmV0d29yayBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIChOUE0pXCIsXCJuZXR3b3JrIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk5QTVwiLFwibmV0d29yayBtb25pdG9yaW5nXCJdLG9ic2VydmFiaWxpdHk6W1wib2JzZXJ2YWJpbGl0eSAobzExeSlcIixcIm9ic2VydmFiaWxpdHlcIixcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLFwiZW5kLXRvLWVuZCBvYnNlcnZhYmlsaXR5XCJdLHF1ZXJ5OltcInF1ZXJ5XCIsXCJxdWVyaWVzXCIsXCJxdWVyeWluZ1wiXSxzeW50aGV0aWNNb25pdG9yaW5nOltcInN5bnRoZXRpYyBtb25pdG9yaW5nXCIsXCJzeW50aGV0aWNzXCIsXCJzeW50aGV0aWMgbW9uaXRvcnNcIl19LFlhPXtcIk5ldyBSZWxpYydzXCI6UmEubmV3UmVsaWMsXCJuZXcgcmVsaWNcIjpSYS5uZXdSZWxpYyxOUjpSYS5uZXdSZWxpYyxcIk5ldyBSZWxpYyBPbmUnc1wiOlJhLm5ld1JlbGljT25lLFwiTmV3IFJlbGljIG9uZVwiOlJhLm5ld1JlbGljT25lLE5SMTpSYS5uZXdSZWxpY09uZSxcIkZ1dHVyZSBTdGFja1wiOlJhLmZ1dHVyZVN0YWNrLEZ1dHVyZXN0YWNrOlJhLmZ1dHVyZVN0YWNrLFwiTmVyZCBHcmFwaFwiOlwiTmVyZEdyYXBoXCIsTmVyZGdyYXBoOlwiTmVyZEdyYXBoXCIsXCJOZXJkIEdyYXBoXCI6XCJOZXJkR3JhcGhcIixuZXJkbGV0OlwiTmVyZGxldFwiLG5lcmRwYWNrOlwiTmVyZHBhY2tcIixcIk5lcmQgUGFja1wiOlwiTmVyZHBhY2tcIixOZXJkc3RvcmFnZTpcIk5lcmRTdG9yYWdlXCIsXCJOZXJkIFN0b3JhZ2VcIjpcIk5lcmRTdG9yYWdlXCIsXCJOZXcgUmVsaWMgQ29kZVN0cmVhbSdzXCI6UmEuY29kZVN0cmVhbSxcIk5ldyBSZWxpYyBDb2RlIFN0cmVhbVwiOlJhLmNvZGVTdHJlYW0sXCJDb2RlIFN0cmVhbVwiOlJhLmNvZGVTdHJlYW0sY29kZXN0cmVhbTpSYS5jb2RlU3RyZWFtLFwiTmV3IFJlbGljIEV4cGxvcmVyJ3NcIjpSYS5leHBsb3JlcixleHBsb3JlcjpSYS5leHBsb3JlcixcIkluZmluaXRlIHRyYWNpbmdcIjpcIkluZmluaXRlIFRyYWNpbmdcIixcIk5ldyBSZWxpYyBpbnN0YW50IG9ic2VydmFiaWxpdHlcIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxcImluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LE5SSU86UmEuaW5zdGFudE9ic2VydmFiaWxpdHksSU86UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJJL09cIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxcIk5ldyBSZWxpYyBMb29rb3V0J3NcIjpSYS5sb29rb3V0LGxvb2tvdXQ6UmEubG9va291dCxcIk5ldyBSZWxpYyBOYXZpZ2F0b3Inc1wiOlJhLm5hdmlnYXRvcixuYXZpZ2F0b3I6UmEubmF2aWdhdG9yLEFsZXJ0czpcImFsZXJ0c1wiLFwiQW5vbWFseSBEZXRlY3Rpb25cIjpcImFub21hbHkgZGV0ZWN0aW9uXCIsXCJBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSBNYW5hZ2VtZW50XCI6UmEuYXBtLFwiQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlJhLmFwbSxcIkFwcGxpY2F0aW9uIE1vbml0b3JpbmdcIjpSYS5hcG0sXCJBcHBsaWVkIEludGVsbGlnZW5jZVwiOlwiYXBwbGllZCBpbnRlbGxpZ2VuY2VcIixBSTpcImFwcGxpZWQgaW50ZWxsaWdlbmNlXCIsQUlPcHM6XCJhcHBsaWVkIGludGVsbGlnZW5jZVwiLFwiQXV0byBtYXBcIjpcImF1dG9tYXBcIixcIlBpeGllJ3NcIjpSYS5waXhpZSxwaXhpZTpSYS5waXhpZSxcIkF1dG8tdGVsZW1ldHJ5IHdpdGggUGl4aWVcIjpSYS5waXhpZSxcIkJyb3dzZXIgTW9uaXRvcmluZ1wiOlwiYnJvd3NlciBtb25pdG9yaW5nXCIsQ29udGFpbmVyczpcImNvbnRhaW5lcnNcIixEYXNoYm9hcmQ6XCJkYXNoYm9hcmRcIixEYXNoYm9hcmRzOlwiZGFzaGJvYXJkc1wiLFwiRGF0YSBFeHBsb3JlclwiOlwiZGF0YSBleHBsb3JlclwiLFwiRGF0YSBpbmdlc3RcIjpcImRhdGEgaW5nZXN0XCIsXCJEaWdpdGFsIEV4cGVyaWVuY2UgTW9uaXRvcmluZ1wiOlJhLmRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZyxcImRpZ2l0YWwgbW9uaXRvcmluZ1wiOlJhLmRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZyxcIkRpc3RyaWJ1dGVkIFRyYWNpbmdcIjpcImRpc3RyaWJ1dGVkIHRyYWNpbmdcIixcIkVycm9ycyBpbmJveFwiOlwiZXJyb3JzIGluYm94XCIsXCJFdmVudCBDb3JyZWxhdGlvblwiOlwiZXZlbnQgY29ycmVsYXRpb25cIixcIkluY2lkZW50IEludGVsbGlnZW5jZVwiOlwiaW5jaWRlbnQgaW50ZWxsaWdlbmNlXCIsXCJJbmZyYXN0cnVjdHVyZSBNb25pdG9yaW5nXCI6UmEuaW5mcmFzdHJ1Y3R1cmVNb25pdG9yaW5nLFwiS3ViZXJuZXRlcyBDbHVzdGVyIEV4cGxvcmVyXCI6XCJLdWJlcm5ldGVzIGNsdXN0ZXIgZXhwbG9yZXJcIixcIkt1YmVybmV0ZXMgTW9uaXRvcmluZ1wiOlwiS3ViZXJuZXRlcyBtb25pdG9yaW5nXCIsXCJtaWNybyBzZXJ2aWNlc1wiOlwibWljcm9zZXJ2aWNlc1wiLE1pY3Jvc2VydmljZXM6XCJtaWNyb3NlcnZpY2VzXCIsSW50ZWdyYXRpb25zOlwiaW50ZWdyYXRpb25zXCIsXCJMb2cgTWFuYWdlbWVudFwiOlJhLmxvZ01hbmFnZW1lbnQsTG9nczpSYS5sb2dNYW5hZ2VtZW50LFwiTWV0cmljcywgRXZlbnRzLCBMb2dzLCBhbmQgVHJhY2VzXCI6UmEubWVsdCxcIk1vYmlsZSBNb25pdG9yaW5nXCI6XCJtb2JpbGUgbW9uaXRvcmluZ1wiLFwiTW9kZWwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiTUwgbW9kZWwgbW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiTUwgbW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLE1QTTpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk5ldHdvcmsgUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlJhLm5ldHdvcmtQZXJmb3JtYW5jZU1vbml0b3JpbmcsXCJOZXR3b3JrIE1vbml0b3JpbmdcIjpSYS5uZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nLE9ic2VydmFiaWxpdHk6UmEub2JzZXJ2YWJpbGl0eSxPMTF5OlJhLm9ic2VydmFiaWxpdHksXCJGdWxsLVN0YWNrIE9ic2VydmFiaWxpdHlcIjpSYS5vYnNlcnZhYmlsaXR5LFF1ZXJ5OlJhLnF1ZXJ5LFF1ZXJpZXM6UmEucXVlcnksUXVlcnlpbmc6UmEucXVlcnksXCJRdWVyeSBCdWlsZGVyXCI6XCJxdWVyeSBidWlsZGVyXCIsXCJxdWljayBzdGFydHNcIjpcInF1aWNrc3RhcnRzXCIsUXVpY2tTdGFydHM6XCJxdWlja3N0YXJ0c1wiLFwiU2VydmVybGVzcyBtb25pdG9yaW5nXCI6XCJzZXJ2ZXJsZXNzIG1vbml0b3JpbmdcIixcInN5bnRoZXRpY3MgbW9uaXRvcmluZ1wiOlJhLnN5bnRoZXRpY01vbml0b3JpbmcsXCJTeW50aGV0aWMgbW9uaXRvcmluZ1wiOlJhLnN5bnRoZXRpY01vbml0b3JpbmcsU3ludGhldGljczpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFwiRnVsbC1zdGFjayBPYnNlcnZhYmlsaXR5XCI6XCJmdWxsLXN0YWNrIG9ic2VydmFiaWxpdHlcIixcImZ1bGwgc3RhY2sgb2JzZXJ2YWJpbGl0eVwiOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsRlNPOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsXCJUZWxlbWV0cnkgZGF0YSBwbGF0Zm9ybVwiOlwidGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIixURFA6XCJ0ZWxlbWV0cnkgZGF0YSBwbGF0Zm9ybVwifSxBYT1PYmplY3Qua2V5cyhZYSksUGE9XCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIjtmdW5jdGlvbiBDYSgpe3JldHVybihuLGUpPT57YWEobixBYSwoKG4sYSxpLHIpPT57Y29uc3QgdD1xbihuKTtsZXQgbz1ZYVtyXSxNPVwiXCI7aWYoIShBcnJheS5pc0FycmF5KG8pP286W29dKS5zb21lKChuPT5uPT09dCkpKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSxNPShlLGEscik9Pntjb25zdCBvPVwic3RyaW5nXCI9PXR5cGVvZiByLE09QXJyYXkuaXNBcnJheShyKTtpZighbyYmIU0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1wiY2hlY2tDb250ZXh0XCIgZXhwZWN0cyB0aGUgYXJndW1lbnQgXCJtYXRjaGVzVG9DaGVja1wiIHRvIGJlIGFuIGFycmF5IG9yIHN0cmluZ1xcJycpLGNvbnNvbGUubG9nKHR5cGVvZiByKSxudWxsO2lmKGUhPT10KXJldHVybiBudWxsO2xldCBzPWkuY2hpbGRyZW4ubWFwKCgoZSxpLHIpPT57aWYoZT09PW5bMF0pe2xldCBuPVtdO3JldHVyblsuLi5BcnJheSgyKmEpXS5mb3JFYWNoKCgoZSxhKT0+e24udW5zaGlmdChyW2ktKGErMSldKX0pKSxuLnB1c2goZSksbn1yZXR1cm4hMX0pKS5maWx0ZXIoKG49Pm4pKVswXTtyZXR1cm4gbz9yPT09cW4ocyk6TT9yLnNvbWUoKG49Pm49PT1xbihzKSkpOnZvaWQgMH0sTShcIk9ic2VydmFiaWxpdHlcIiwxLFwiSW5zdGFudCBPYnNlcnZhYmlsaXR5XCIpfHxNKFwiSS9PXCIsMSxcIlJlbGljIEkvT1wiKSlyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIlJlcGxhY2UgXCIrdWEodCxcImBcIikrXCIgd2l0aCBcIit1YShvLFwiYFwiKSx7c3RhcnQ6dGUoblswXSksZW5kOm9lKG5bbi5sZW5ndGgtMV0pfSxbUGEsci5yZXBsYWNlKC9cXHMrL2csXCItXCIpLnRvTG93ZXJDYXNlKCldLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6byx1cmw6XCJodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3Mvc3R5bGUtZ3VpZGUvY2FwaXRhbGl6YXRpb24vcHJvZHVjdC1jYXBhYmlsaXR5LWZlYXR1cmUtdXNhZ2UvI3doZW4tdG8tdXNlLXRpdGxlLWNhc2VcIn0pfX0pKX19ZnVuY3Rpb24gVGEoKXtyZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBhPW4uY2hpbGRyZW4saT1cInJldGV4dC1uby1lbW9qaXNcIixyPVtcIlwiXTthLmZvckVhY2goKChuLGEpPT57Vm4obixcIlNlbnRlbmNlTm9kZVwiKSYmbi5jaGlsZHJlbi5mb3JFYWNoKCgoYSx0KT0+e2lmKG4uY2hpbGRyZW4sVm4oYSxcIlN5bWJvbE5vZGVcIikmJi9cXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfS91LnRlc3QoYS52YWx1ZSkpe2NvbnN0IG49YS52YWx1ZTtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoYEV4cGVjdGVkIG5vdGhpbmcsIG5vdCBcIiR7bn1cImAse3N0YXJ0OnRlKGEpLGVuZDpvZShhKX0sW2ksYS52YWx1ZV0uam9pbihcIjpcIikpLHthY3R1YWw6bixleHBlY3RlZDpyLG5vdGU6XCJcIix1cmw6XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvZW1vamlzL1wifSksZX19KSl9KSl9KSl9fXZhciB4YT1bXCJOZXcgUmVsaWNcIixcIk5ldyBSZWxpYyBPbmVcIixcIm5lcmRncmFwaFwiLFwiZ3JhcGhxbC1mb3JtYXRcIixcImdyYXBocWxcIixcImdyYXBoaXFsXCIsXCJGaWdtYVwiLFwiVUlcIixcIk5vZGUuanNcIixcIkFQTVwiLFwic2VydmVybGVzc1wiLFwia3ViZXJuZXRlc1wiLFwiQVdTXCIsXCJsYW1iZGFcIixcIkFJXCIsXCJvYnNlcnZhYmlsaXR5XCIsXCJuZXJkcGFja1wiLFwibmVyZGxldFwiLFwiQ0xJXCIsXCJsaW51eFwiLFwidWJ1bnR1XCIsXCJPU1wiLFwiU0xPXCIsXCJTTEFcIixcIlNMSVwiLFwiU0xNXCIsXCJOUjFcIixcImRldm9wc1wiLFwibnJxbC9QSFBcIixcInBpLWhvbGVcIixcIkROU1wiLFwicmVkaXNcIixcIlNES1wiLFwiQVBJXCIsXCJrYWZrYVwiLFwiUzNcIixcInZwbi9waHBcIixcInBvc3RyZ3Jlc3FsXCIsXCJteXNxbFwiLFwicHJvbXFsXCIsXCJWTVwiLFwiZmlyZWJhc2VcIixcImtlbnRpa1wiLFwidnBjXCIsXCJlbmRwb2ludFwiLFwicGVybWFsaW5rXCIsXCJhenVyZVwiLFwib3BzXCIsXCJjb2Rlc3RyZWFtXCIsXCJmYXN0bHlcIixcImdhdHNieVwiLFwibGFjZXdvcmtcIixcIm1vbmdvZGJcIixcImNyaWJsXCIsXCJkZXZcIixcImdpZ2Ftb25cIixcInN5c2xvZ1wiLFwiYWtrYVwiLFwiYWxnb3JpdGhtYVwiLFwiYW5zaWJsZVwiLFwibWFjb3NcIixcImNlbnRvc1wiLFwiYXBpZ2VlXCIsXCJqaXJhXCIsXCJDKytcIixcIkNcIixcImNvdWNoYmFzZVwiLFwiY29uc3VsXCIsXCJjb3Jkb3ZhXCIsXCJkamFuZ29cIixcImY1XCIsXCJmbHVlbnRkXCIsXCJHQ1BcIixcIlRDUFwiLFwid3d3XCIsXCJ5bWxcIixcIndnZXRcIixcIm1keFwiLFwibWFya2Rvd25cIixcIkdyYWZhbmFcIixcIkhlcm9rdVwiLFwiaGFwcm94eVwiLFwiSFRUUFNcIixcInF1aWNrc3RhcnQvY293XCIsXCJmcm9udGVuZFwiLFwiYmFja2VuZFwiLFwiYml0YnVja2V0XCIsXCJnaXRsYWJcIixcImdpdGh1YlwiLFwidHJlbGxvXCIsXCJhc2FuYVwiLFwiaW50ZWdyYXRpb25zXCJdO2Z1bmN0aW9uIHphKG4sZSl7dmFyIGE9T2JqZWN0LmtleXMobik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxhLnB1c2guYXBwbHkoYSxpKX1yZXR1cm4gYX1mdW5jdGlvbiBFYShuLGUsYSl7cmV0dXJuIGUgaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltlXT1hLG59ZnVuY3Rpb24gQmEobixlLGEsaSxyLHQsbyl7dHJ5e3ZhciBNPW5bdF0obykscz1NLnZhbHVlfWNhdGNoKG4pe3JldHVybiB2b2lkIGEobil9TS5kb25lP2Uocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4oaSxyKX1mdW5jdGlvbiBOYShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSxyKXt2YXIgdD1uLmFwcGx5KGUsYSk7ZnVuY3Rpb24gbyhuKXtCYSh0LGkscixvLE0sXCJuZXh0XCIsbil9ZnVuY3Rpb24gTShuKXtCYSh0LGkscixvLE0sXCJ0aHJvd1wiLG4pfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gWmEobixlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbn0obil8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9bnVsbD09bj9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXXx8bltcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9YSl7dmFyIGkscix0PVtdLG89ITAsTT0hMTt0cnl7Zm9yKGE9YS5jYWxsKG4pOyEobz0oaT1hLm5leHQoKSkuZG9uZSkmJih0LnB1c2goaS52YWx1ZSksIWV8fHQubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKG4pe009ITAscj1ufWZpbmFsbHl7dHJ5e298fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoTSl0aHJvdyByfX1yZXR1cm4gdH19KG4sZSl8fElhKG4sZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBGYShuKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gVWEobil9KG4pfHxmdW5jdGlvbihuKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1uW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPW5bXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKG4pfShuKXx8SWEobil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gSWEobixlKXtpZihuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gVWEobixlKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PWEmJm4uY29uc3RydWN0b3ImJihhPW4uY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PWF8fFwiU2V0XCI9PT1hP0FycmF5LmZyb20obik6XCJBcmd1bWVudHNcIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP1VhKG4sZSk6dm9pZCAwfX1mdW5jdGlvbiBVYShuLGUpeyhudWxsPT1lfHxlPm4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgpO2Zvcih2YXIgYT0wLGk9bmV3IEFycmF5KGUpO2E8ZTthKyspaVthXT1uW2FdO3JldHVybiBpfWZ1bmN0aW9uIGphKG4sZSl7dmFyIGEsaSxyLHQ9eGE7ZXx8KGU9bnVsbCE9PShhPXdpbmRvdykmJnZvaWQgMCE9PWEmJm51bGwhPT0oaT1hLmxvY2FsU3RvcmFnZSkmJnZvaWQgMCE9PWkmJmkubGFuZ3VhZ2VMaW50ZXJDdXN0b21EaWN0aW9uYXJ5P0pTT04ucGFyc2UobnVsbD09PShyPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSk6W10pLHQucHVzaC5hcHBseSh0LEZhKGUpKTt2YXIgbz17ZGljdGlvbmFyeTpmdW5jdGlvbihuKXtuKG51bGwse2FmZjpcIlNFVCBVVEYtOFxcblRSWSBlc2lhbnJ0b2xjZHVnbXBoYnlmdmt3ekVTSUFOUlRPTENEVUdNUEhCWUZWS1daJ1xcbklDT05WIDFcXG5JQ09OViDigJkgJ1xcbk5PU1VHR0VTVCAhXFxuXFxuIyBvcmRpbmFsIG51bWJlcnNcXG5DT01QT1VORE1JTiAxXFxuIyBvbmx5IGluIGNvbXBvdW5kczogMXRoLCAydGgsIDN0aFxcbk9OTFlJTkNPTVBPVU5EIGNcXG4jIGNvbXBvdW5kIHJ1bGVzOlxcbiMgMS4gWzAtOV0qMVswLTlddGggKDEwdGgsIDExdGgsIDEydGgsIDU2NzE0dGgsIGV0Yy4pXFxuIyAyLiBbMC05XSpbMDItOV0oMXN0fDJuZHwzcmR8WzQtOV10aCkgKDIxc3QsIDIybmQsIDEyM3JkLCAxMjM0dGgsIGV0Yy4pXFxuQ09NUE9VTkRSVUxFIDJcXG5DT01QT1VORFJVTEUgbioxdFxcbkNPTVBPVU5EUlVMRSBuKm1wXFxuV09SRENIQVJTIDAxMjM0NTY3ODlcXG5cXG5QRlggQSBZIDFcXG5QRlggQSAgIDAgICAgIHJlICAgICAgICAgLlxcblxcblBGWCBJIFkgMVxcblBGWCBJICAgMCAgICAgaW4gICAgICAgICAuXFxuXFxuUEZYIFUgWSAxXFxuUEZYIFUgICAwICAgICB1biAgICAgICAgIC5cXG5cXG5QRlggQyBZIDFcXG5QRlggQyAgIDAgICAgIGRlICAgICAgICAgIC5cXG5cXG5QRlggRSBZIDFcXG5QRlggRSAgIDAgICAgIGRpcyAgICAgICAgIC5cXG5cXG5QRlggRiBZIDFcXG5QRlggRiAgIDAgICAgIGNvbiAgICAgICAgIC5cXG5cXG5QRlggSyBZIDFcXG5QRlggSyAgIDAgICAgIHBybyAgICAgICAgIC5cXG5cXG5TRlggViBOIDJcXG5TRlggViAgIGUgICAgIGl2ZSAgICAgICAgZVxcblNGWCBWICAgMCAgICAgaXZlICAgICAgICBbXmVdXFxuXFxuU0ZYIE4gWSAzXFxuU0ZYIE4gICBlICAgICBpb24gICAgICAgIGVcXG5TRlggTiAgIHkgICAgIGljYXRpb24gICAgeVxcblNGWCBOICAgMCAgICAgZW4gICAgICAgICBbXmV5XVxcblxcblNGWCBYIFkgM1xcblNGWCBYICAgZSAgICAgaW9ucyAgICAgICBlXFxuU0ZYIFggICB5ICAgICBpY2F0aW9ucyAgIHlcXG5TRlggWCAgIDAgICAgIGVucyAgICAgICAgW15leV1cXG5cXG5TRlggSCBOIDJcXG5TRlggSCAgIHkgICAgIGlldGggICAgICAgeVxcblNGWCBIICAgMCAgICAgdGggICAgICAgICBbXnldXFxuXFxuU0ZYIFkgWSAxXFxuU0ZYIFkgICAwICAgICBseSAgICAgICAgIC5cXG5cXG5TRlggRyBZIDJcXG5TRlggRyAgIGUgICAgIGluZyAgICAgICAgZVxcblNGWCBHICAgMCAgICAgaW5nICAgICAgICBbXmVdXFxuXFxuU0ZYIEogWSAyXFxuU0ZYIEogICBlICAgICBpbmdzICAgICAgIGVcXG5TRlggSiAgIDAgICAgIGluZ3MgICAgICAgW15lXVxcblxcblNGWCBEIFkgNFxcblNGWCBEICAgMCAgICAgZCAgICAgICAgICBlXFxuU0ZYIEQgICB5ICAgICBpZWQgICAgICAgIFteYWVpb3VdeVxcblNGWCBEICAgMCAgICAgZWQgICAgICAgICBbXmV5XVxcblNGWCBEICAgMCAgICAgZWQgICAgICAgICBbYWVpb3VdeVxcblxcblNGWCBUIE4gNFxcblNGWCBUICAgMCAgICAgc3QgICAgICAgICBlXFxuU0ZYIFQgICB5ICAgICBpZXN0ICAgICAgIFteYWVpb3VdeVxcblNGWCBUICAgMCAgICAgZXN0ICAgICAgICBbYWVpb3VdeVxcblNGWCBUICAgMCAgICAgZXN0ICAgICAgICBbXmV5XVxcblxcblNGWCBSIFkgNFxcblNGWCBSICAgMCAgICAgciAgICAgICAgICBlXFxuU0ZYIFIgICB5ICAgICBpZXIgICAgICAgIFteYWVpb3VdeVxcblNGWCBSICAgMCAgICAgZXIgICAgICAgICBbYWVpb3VdeVxcblNGWCBSICAgMCAgICAgZXIgICAgICAgICBbXmV5XVxcblxcblNGWCBaIFkgNFxcblNGWCBaICAgMCAgICAgcnMgICAgICAgICBlXFxuU0ZYIFogICB5ICAgICBpZXJzICAgICAgIFteYWVpb3VdeVxcblNGWCBaICAgMCAgICAgZXJzICAgICAgICBbYWVpb3VdeVxcblNGWCBaICAgMCAgICAgZXJzICAgICAgICBbXmV5XVxcblxcblNGWCBTIFkgNFxcblNGWCBTICAgeSAgICAgaWVzICAgICAgICBbXmFlaW91XXlcXG5TRlggUyAgIDAgICAgIHMgICAgICAgICAgW2FlaW91XXlcXG5TRlggUyAgIDAgICAgIGVzICAgICAgICAgW3N4emhdXFxuU0ZYIFMgICAwICAgICBzICAgICAgICAgIFtec3h6aHldXFxuXFxuU0ZYIFAgWSAzXFxuU0ZYIFAgICB5ICAgICBpbmVzcyAgICAgIFteYWVpb3VdeVxcblNGWCBQICAgMCAgICAgbmVzcyAgICAgICBbYWVpb3VdeVxcblNGWCBQICAgMCAgICAgbmVzcyAgICAgICBbXnldXFxuXFxuU0ZYIE0gWSAxXFxuU0ZYIE0gICAwICAgICAncyAgICAgICAgIC5cXG5cXG5TRlggQiBZIDNcXG5TRlggQiAgIDAgICAgIGFibGUgICAgICAgW15hZWlvdV1cXG5TRlggQiAgIDAgICAgIGFibGUgICAgICAgZWVcXG5TRlggQiAgIGUgICAgIGFibGUgICAgICAgW15hZWlvdV1lXFxuXFxuU0ZYIEwgWSAxXFxuU0ZYIEwgICAwICAgICBtZW50ICAgICAgIC5cXG5cXG5SRVAgOTBcXG5SRVAgYSBlaVxcblJFUCBlaSBhXFxuUkVQIGEgZXlcXG5SRVAgZXkgYVxcblJFUCBhaSBpZVxcblJFUCBpZSBhaVxcblJFUCBhbG90IGFfbG90XFxuUkVQIGFyZSBhaXJcXG5SRVAgYXJlIGVhclxcblJFUCBhcmUgZWlyXFxuUkVQIGFpciBhcmVcXG5SRVAgYWlyIGVyZVxcblJFUCBlcmUgYWlyXFxuUkVQIGVyZSBlYXJcXG5SRVAgZXJlIGVpclxcblJFUCBlYXIgYXJlXFxuUkVQIGVhciBhaXJcXG5SRVAgZWFyIGVyZVxcblJFUCBlaXIgYXJlXFxuUkVQIGVpciBlcmVcXG5SRVAgY2ggdGVcXG5SRVAgdGUgY2hcXG5SRVAgY2ggdGlcXG5SRVAgdGkgY2hcXG5SRVAgY2ggdHVcXG5SRVAgdHUgY2hcXG5SRVAgY2ggc1xcblJFUCBzIGNoXFxuUkVQIGNoIGtcXG5SRVAgayBjaFxcblJFUCBmIHBoXFxuUkVQIHBoIGZcXG5SRVAgZ2ggZlxcblJFUCBmIGdoXFxuUkVQIGkgaWdoXFxuUkVQIGlnaCBpXFxuUkVQIGkgdXlcXG5SRVAgdXkgaVxcblJFUCBpIGVlXFxuUkVQIGVlIGlcXG5SRVAgaiBkaVxcblJFUCBkaSBqXFxuUkVQIGogZ2dcXG5SRVAgZ2cgalxcblJFUCBqIGdlXFxuUkVQIGdlIGpcXG5SRVAgcyB0aVxcblJFUCB0aSBzXFxuUkVQIHMgY2lcXG5SRVAgY2kgc1xcblJFUCBrIGNjXFxuUkVQIGNjIGtcXG5SRVAgayBxdVxcblJFUCBxdSBrXFxuUkVQIGt3IHF1XFxuUkVQIG8gZWF1XFxuUkVQIGVhdSBvXFxuUkVQIG8gZXdcXG5SRVAgZXcgb1xcblJFUCBvbyBld1xcblJFUCBldyBvb1xcblJFUCBldyB1aVxcblJFUCB1aSBld1xcblJFUCBvbyB1aVxcblJFUCB1aSBvb1xcblJFUCBldyB1XFxuUkVQIHUgZXdcXG5SRVAgb28gdVxcblJFUCB1IG9vXFxuUkVQIHUgb2VcXG5SRVAgb2UgdVxcblJFUCB1IGlldVxcblJFUCBpZXUgdVxcblJFUCB1ZSBld1xcblJFUCBldyB1ZVxcblJFUCB1ZmYgb3VnaFxcblJFUCBvbyBpZXVcXG5SRVAgaWV1IG9vXFxuUkVQIGllciBlYXJcXG5SRVAgZWFyIGllclxcblJFUCBlYXIgYWlyXFxuUkVQIGFpciBlYXJcXG5SRVAgdyBxdVxcblJFUCBxdSB3XFxuUkVQIHogc3NcXG5SRVAgc3MgelxcblJFUCBzaHVuIHRpb25cXG5SRVAgc2h1biBzaW9uXFxuUkVQIHNodW4gY2lvblxcblJFUCBzaXplIGNpc2VcIixkaWM6XCI0OTU2OFxcbjAvbm1cXG4wdGgvcHRcXG4xL24xXFxuMXN0L3BcXG4xdGgvdGNcXG4yL25tXFxuMm5kL3BcXG4ydGgvdGNcXG4zL25tXFxuM3JkL3BcXG4zdGgvdGNcXG40L25tXFxuNHRoL3B0XFxuNS9ubVxcbjV0aC9wdFxcbjYvbm1cXG42dGgvcHRcXG43L25tXFxuN3RoL3B0XFxuOC9ubVxcbjh0aC9wdFxcbjkvbm1cXG45dGgvcHRcXG5BL1NNXFxuQUEvTVxcbkFBQVxcbkFCL01cXG5BQkFcXG5BQkMvU01cXG5BQk0vU01cXG5BQlNcXG5BQy9NXFxuQUNMVS9NXFxuQUNUXFxuQUNUSC9NXFxuQUQvTVxcbkFEQ1xcbkFERFxcbkFETVxcbkFEUC9NXFxuQUZcXG5BRkFJS1xcbkFGQlxcbkFGQy9NXFxuQUZEQ1xcbkFGTlxcbkFGVFxcbkFJL1NNXFxuQUlEUy9NXFxuQUtcXG5BTFxcbkFNL01cXG5BTUFcXG5BTUQvTVxcbkFOU0kvU1xcbkFOWlVTL01cXG5BT0wvTVxcbkFQL01cXG5BUEJcXG5BUENcXG5BUElcXG5BUE9cXG5BUFJcXG5BUlxcbkFSQ1xcbkFTQVBcXG5BU0NJSS9TTVxcbkFTTC9NXFxuQVNQQ0FcXG5BVE0vTVxcbkFUUC9NXFxuQVRWXFxuQVZcXG5BVklcXG5BV0FDUy9NXFxuQVdPTC9NXFxuQVdTL01cXG5BWi9NXFxuQVpUL01cXG5BYWNoZW4vTVxcbkFhbGl5YWgvTVxcbkFhcm9uL01cXG5BYmJhcy9NXFxuQWJiYXNpZC9NXFxuQWJib3R0L01cXG5BYmJ5L01cXG5BYmR1bC9NXFxuQWJlL01cXG5BYmVsL01cXG5BYmVsYXJkL01cXG5BYmVsc29uL01cXG5BYmVyZGVlbi9NXFxuQWJlcm5hdGh5L01cXG5BYmlkamFuL01cXG5BYmlnYWlsL01cXG5BYmlsZW5lL01cXG5BYm5lci9NXFxuQWJvcmlnaW5lL01TXFxuQWJyYWhhbS9NXFxuQWJyYW0vTVNcXG5BYnJhbXMvTVxcbkFic2Fsb20vTVxcbkFidWphL01cXG5BYnlzc2luaWEvTVxcbkFieXNzaW5pYW4vTVxcbkFjL01cXG5BY2FkaWEvTVxcbkFjYXB1bGNvL01cXG5BY2NlbnR1cmUvTVxcbkFjY3JhL01cXG5BY2V2ZWRvL01cXG5BY2hhZWFuL01cXG5BY2hlYmUvTVxcbkFjaGVybmFyL01cXG5BY2hlc29uL01cXG5BY2hpbGxlcy9NXFxuQWNvbmNhZ3VhL01cXG5BY29zdGEvTVxcbkFjcm9wb2xpc1xcbkFjcnV4L01cXG5BY3RhZW9uL01cXG5BY3Rvbi9NXFxuQWN0cy9NXFxuQWN1ZmYvTVxcbkFkYS9TTVxcbkFkYW0vU01cXG5BZGFtcy9NXFxuQWRhbi9NXFxuQWRhbmEvTVxcbkFkYXIvTVxcbkFkZGFtcy9NXFxuQWRkZXJsZXkvTVxcbkFkZGllL01cXG5BZGRpc29uL01cXG5BZGVsYS9NXFxuQWRlbGFpZGUvTVxcbkFkZWxlL01cXG5BZGVsaW5lL01cXG5BZGVuL01cXG5BZGVuYXVlci9NXFxuQWRoYXJhL01cXG5BZGlkYXMvTVxcbkFkaXJvbmRhY2svU01cXG5BZGlyb25kYWNrcy9NXFxuQWRraW5zL01cXG5BZGxlci9NXFxuQWRtXFxuQWRtaXJhbHR5XFxuQWRvbGYvTVxcbkFkb2xmby9NXFxuQWRvbHBoL01cXG5BZG9uaXMvTVNcXG5BZHJlbmFsaW4vTVNcXG5BZHJpYW4vTVxcbkFkcmlhbmEvTVxcbkFkcmlhdGljL01cXG5BZHJpZW5uZS9NXFxuQWR2ZW50L01TXFxuQWR2ZW50aXN0L01TXFxuQWR2aWwvTVxcbkFlZ2Vhbi9NXFxuQWVsZnJpYy9NXFxuQWVuZWFzL01cXG5BZW5laWQvTVxcbkFlb2x1cy9NXFxuQWVyb2Zsb3QvTVxcbkFlc2NoeWx1cy9NXFxuQWVzY3VsYXBpdXMvTVxcbkFlc29wL01cXG5BZmdoYW4vU01cXG5BZmdoYW5pL01cXG5BZmdoYW5pc3Rhbi9NXFxuQWZyXFxuQWZyaWNhL01cXG5BZnJpY2FuL1NNXFxuQWZyaWthYW5zL01cXG5BZnJpa2FuZXIvU01cXG5BZnJvL1NNXFxuQWZyb2NlbnRyaWNcXG5BZnJvY2VudHJpc20vTVxcbkFnL01cXG5BZ2FtZW1ub24vTVxcbkFnYW5hXFxuQWdhc3NpL01cXG5BZ2Fzc2l6L01cXG5BZ2F0aGEvTVxcbkFnZ2llL01cXG5BZ2xhaWEvTVxcbkFnbmVzL01cXG5BZ25ldy9NXFxuQWduaS9NXFxuQWdyYS9NXFxuQWdyaWNvbGEvTVxcbkFncmlwcGEvTVxcbkFncmlwcGluYS9NXFxuQWd1YWRpbGxhL01cXG5BZ3Vhc2NhbGllbnRlc1xcbkFndWlsYXIvTVxcbkFndWluYWxkby9NXFxuQWd1aXJyZS9NXFxuQWd1c3Rpbi9NXFxuQWhhYi9NXFxuQWhtYWQvTVxcbkFobWFkYWJhZC9NXFxuQWhtYWRpbmVqYWQvTVxcbkFobWVkL01cXG5BaHJpbWFuL01cXG5BaWRhL01cXG5BaWtlbi9NXFxuQWlsZWVuL01cXG5BaW1lZS9NXFxuQWludS9NXFxuQWlyZWRhbGUvTVNcXG5BaXJlcy9NXFxuQWlzaGEvTVxcbkFqYXgvTVxcbkFrYmFyL01cXG5Ba2htYXRvdmEvTVxcbkFraWhpdG8vTVxcbkFraXRhL01cXG5Ba2l2YS9NXFxuQWtrYWQvTVxcbkFrcm9uL01cXG5BbC9NXFxuQWxhL1NcXG5BbGFiYW1hL01cXG5BbGFiYW1hbi9NU1xcbkFsYWJhbWlhbi9TTVxcbkFsYWRkaW4vTVxcbkFsYW1vL01cXG5BbGFtb2dvcmRvL01cXG5BbGFuL01cXG5BbGFuYS9NXFxuQWxhci9NXFxuQWxhcmljL01cXG5BbGFza2EvTVxcbkFsYXNrYW4vTVNcXG5BbGJhL01cXG5BbGJhbmlhL01cXG5BbGJhbmlhbi9NU1xcbkFsYmFueS9NXFxuQWxiZWUvTVxcbkFsYmVyaW8vTVxcbkFsYmVydC9NXFxuQWxiZXJ0YS9NXFxuQWxiZXJ0YW5cXG5BbGJlcnRvL01cXG5BbGJpZ2Vuc2lhbi9NXFxuQWxiaW9uL01cXG5BbGJpcmVvL01cXG5BbGJ1cXVlcnF1ZS9NXFxuQWxjYXRyYXovTVxcbkFsY2VzdGlzL01cXG5BbGNpYmlhZGVzL01cXG5BbGNpbmRvci9NXFxuQWxjbWVuYS9NXFxuQWxjb2EvTVxcbkFsY290dC9NXFxuQWxjdWluL01cXG5BbGN5b25lL01cXG5BbGRhbi9NXFxuQWxkZWJhcmFuL01cXG5BbGRlbi9NXFxuQWxkZXJhbWluL01cXG5BbGRvL01cXG5BbGRyaW4vTVxcbkFsZWMvTVxcbkFsZWljaGVtL01cXG5BbGVqYW5kcmEvTVxcbkFsZWphbmRyby9NXFxuQWxlbWJlcnQvTVxcbkFsZXBwby9NXFxuQWxldXQvTVNcXG5BbGV1dGlhbi9TTVxcbkFsZXgvTVxcbkFsZXhhbmRlci9NU1xcbkFsZXhhbmRyYS9NXFxuQWxleGFuZHJpYS9NXFxuQWxleGFuZHJpYW5cXG5BbGV4ZWkvTVxcbkFsZXhpcy9NXFxuQWxmb25zby9NXFxuQWxmb256by9NXFxuQWxmb3JkL01cXG5BbGZyZWQvTVxcbkFsZnJlZGEvTVxcbkFsZnJlZG8vTVxcbkFsZ2VuaWIvTVxcbkFsZ2VyL01cXG5BbGdlcmlhL01cXG5BbGdlcmlhbi9TTVxcbkFsZ2llYmEvTVxcbkFsZ2llcnMvTVxcbkFsZ29sL01cXG5BbGdvbnF1aWFuL1NNXFxuQWxnb25xdWluL01TXFxuQWxoYW1icmEvTVxcbkFsaGVuYS9NXFxuQWxpL01cXG5BbGljZS9NXFxuQWxpY2lhL01cXG5BbGlnaGllcmkvTVxcbkFsaW5lL01cXG5BbGlvdGgvTVxcbkFsaXNhL01cXG5BbGlzaGEvTVxcbkFsaXNvbi9NXFxuQWxpc3NhL01cXG5BbGlzdGFpci9NXFxuQWxrYWlkL01cXG5BbGxhaC9NXFxuQWxsYWhhYmFkL01cXG5BbGxhbi9NXFxuQWxsZWdoZW5pZXMvTVxcbkFsbGVnaGVueS9TTVxcbkFsbGVncmEvTVxcbkFsbGVuL01cXG5BbGxlbmRlL01cXG5BbGxlbnRvd24vTVxcbkFsbGhhbGxvd3MvTVxcbkFsbGllL01TXFxuQWxsaXNvbi9NXFxuQWxsc3RhdGUvTVxcbkFsbHlzb24vTVxcbkFsbWEvTVxcbkFsbWFjaC9NXFxuQWxtYXR5L01cXG5BbG1pZ2h0eS9NXFxuQWxtb2hhZC9NXFxuQWxtb3JhdmlkL01cXG5BbG5pbGFtL01cXG5BbG5pdGFrL01cXG5BbG9uem8vTVxcbkFscGVydC9NXFxuQWxwaGFyZC9NXFxuQWxwaGVjY2EvTVxcbkFscGhlcmF0ei9NXFxuQWxwaG9uc2UvTVxcbkFscGhvbnNvL01cXG5BbHBpbmUvTVxcbkFscG8vTVxcbkFscHMvTVxcbkFsc2FjZS9NXFxuQWxzYXRpYW4vU01cXG5BbHNvcC9NXFxuQWxzdG9uL01cXG5BbHRhL01cXG5BbHRhYmEvTVxcbkFsdGFpL01cXG5BbHRhaWMvTVxcbkFsdGFpci9NXFxuQWx0YW1pcmEvTVxcbkFsdGhlYS9NXFxuQWx0aXBsYW5vL01cXG5BbHRtYW4vTVxcbkFsdG9pZHMvTVxcbkFsdG9uL01cXG5BbHRvb25hL01cXG5BbHVkcmEvTVxcbkFsdmEvTVxcbkFsdmFyYWRvL01cXG5BbHZhcmV6L01cXG5BbHZhcm8vTVxcbkFsdmluL01cXG5BbHljZS9NXFxuQWx5c29uL01cXG5BbHlzc2EvTVxcbkFsemhlaW1lci9NXFxuQW0vTU5SXFxuQW1hZGV1cy9NXFxuQW1hZG8vTVxcbkFtYWxpYS9NXFxuQW1hbmRhL01cXG5BbWFyaWxsby9NXFxuQW1hcnUvTVxcbkFtYXRlcmFzdS9NXFxuQW1hdGkvTVxcbkFtYXpvbi9TTVxcbkFtYXpvbmlhblxcbkFtYmVyL01cXG5BbWVsaWEvTVxcbkFtZW4vTVxcbkFtZW5ob3RlcC9NXFxuQW1lcmFzaWFuL01cXG5BbWVyaWNhL1NNXFxuQW1lcmljYW4vTVNcXG5BbWVyaWNhbmEvTVxcbkFtZXJpY2FuaXNtL01TXFxuQW1lcmljYW5pemF0aW9uL01TXFxuQW1lcmljYW5pemUvR0RTXFxuQW1lcmluZC9TTVxcbkFtZXJpbmRpYW4vTVNcXG5BbWVzL01cXG5BbWVzbGFuL01cXG5BbWdlbi9NXFxuQW1oYXJpYy9NXFxuQW1oZXJzdC9NXFxuQW1pZS9NXFxuQW1pZ2EvTVxcbkFtaXNoL01cXG5BbW1hbi9NXFxuQW1vY28vTVxcbkFtb3MvTVxcbkFtcGFyby9NXFxuQW1wZXJlL01cXG5BbXJpdHNhci9NXFxuQW1zdGVyZGFtL01cXG5BbXRyYWsvTVxcbkFtdW5kc2VuL01cXG5BbXVyL01cXG5BbXdheS9NXFxuQW15L01cXG5BbmEvTVxcbkFuYWJhcHRpc3QvTVxcbkFuYWJlbC9NXFxuQW5hY2luL01cXG5BbmFjcmVvbi9NXFxuQW5haGVpbS9NXFxuQW5hbGVjdHMvTVxcbkFuYW5pYXMvTVxcbkFuYXNhemkvTVxcbkFuYXN0YXNpYS9NXFxuQW5hdG9sZS9NXFxuQW5hdG9saWEvTVxcbkFuYXRvbGlhbi9NXFxuQW5heGFnb3Jhcy9NXFxuQW5jaG9yYWdlL01cXG5BbmRhbHVzaWEvTVxcbkFuZGFsdXNpYW4vTVxcbkFuZGFtYW4vTVxcbkFuZGVhbi9NXFxuQW5kZXJzZW4vTVxcbkFuZGVyc29uL01cXG5BbmRlcy9NXFxuQW5kb3JyYS9NXFxuQW5kb3JyYW4vU01cXG5BbmRyZS9NU1xcbkFuZHJlYS9NXFxuQW5kcmVpL01cXG5BbmRyZXMvTVxcbkFuZHJldHRpL01cXG5BbmRyZXcvU01cXG5BbmRyZXdzL01cXG5BbmRyaWFuYW1wb2luaW1lcmluYS9NXFxuQW5kcm9pZC9NXFxuQW5kcm9tYWNoZS9NXFxuQW5kcm9tZWRhL01cXG5BbmRyb3Bvdi9NXFxuQW5keS9NXFxuQW5nYXJhL01cXG5BbmdlbC9NXFxuQW5nZWxhL01cXG5BbmdlbGVzL01cXG5BbmdlbGlhL01cXG5BbmdlbGljYS9NXFxuQW5nZWxpY28vTVxcbkFuZ2VsaW5hL01cXG5BbmdlbGluZS9NXFxuQW5nZWxpcXVlL01cXG5BbmdlbGl0YS9NXFxuQW5nZWxvL01cXG5BbmdlbG91L01cXG5BbmdldmluL01cXG5BbmdpZS9NXFxuQW5na29yL01cXG5BbmdsZS9NU1xcbkFuZ2xldG9uL01cXG5BbmdsaWEvTVxcbkFuZ2xpY2FuL1NNXFxuQW5nbGljYW5pc20vTVNcXG5BbmdsaWNpc20vTVNcXG5BbmdsaWNpemF0aW9uXFxuQW5nbGljaXplXFxuQW5nbG8vTVxcbkFuZ2xvcGhpbGUvTVxcbkFuZ2xvcGhvYmVcXG5BbmdvbGEvTVxcbkFuZ29sYW4vTVNcXG5BbmdvcmEvU01cXG5BbmdzdHJvbS9NXFxuQW5ndWlsbGEvTVxcbkFuZ3VzL01cXG5Bbmh1aS9NXFxuQW5pYWtjaGFrL01cXG5BbmliYWwvTVxcbkFuaXRhL01cXG5BbmthcmEvTVxcbkFubi9NXFxuQW5uYS9NXFxuQW5uYWJlbC9NXFxuQW5uYWJlbGxlL01cXG5Bbm5hbS9NXFxuQW5uYXBvbGlzL01cXG5Bbm5hcHVybmEvTVxcbkFubmUvTVxcbkFubmV0dGUvTVxcbkFubmllL01cXG5Bbm5pc3Rvbi9NXFxuQW5ubWFyaWUvTVxcbkFubnVuY2lhdGlvbi9TTVxcbkFub3VpbGgvTVxcbkFuc2VsbS9NXFxuQW5zZWxtby9NXFxuQW5zaGFuL01cXG5BbnRhZXVzL01cXG5BbnRhbmFuYXJpdm8vTVxcbkFudGFyY3RpYy9NXFxuQW50YXJjdGljYS9NXFxuQW50YXJlcy9NXFxuQW50aG9ueS9NXFxuQW50aHJvcG9jZW5lXFxuQW50aWNocmlzdC9TTVxcbkFudGlldGFtL01cXG5BbnRpZmEvTVxcbkFudGlnb25lL01cXG5BbnRpZ3VhL01cXG5BbnRpbGxlYW5cXG5BbnRpbGxlcy9NXFxuQW50aW9jaC9NXFxuQW50aXBhcy9NXFxuQW50aXBvZGVzXFxuQW50b2ZhZ2FzdGEvTVxcbkFudG9pbmUvTVxcbkFudG9pbmV0dGUvTVxcbkFudG9uL01cXG5BbnRvbmUvTVxcbkFudG9uaWEvTVxcbkFudG9uaW51cy9NXFxuQW50b25pby9NXFxuQW50b25pdXMvTVxcbkFudG9ueS9NXFxuQW50d2FuL01cXG5BbnR3ZXJwL01cXG5BbnViaXMvTVxcbkFuemFjL01cXG5BcGFjaGUvU01cXG5BcGFsYWNoaWNvbGEvTVxcbkFwYXRvc2F1cnVzXFxuQXBlbm5pbmVzL01cXG5BcGhyb2RpdGUvTVxcbkFwaWEvTVxcbkFwb2NhbHlwc2UvTVxcbkFwb2NyeXBoYS9NXFxuQXBvbGxpbmFpcmUvTVxcbkFwb2xsby9TTVxcbkFwb2xsb25pYW4vTVxcbkFwb3N0bGUvTVxcbkFwcGFsYWNoaWEvTVxcbkFwcGFsYWNoaWFuL1NNXFxuQXBwYWxhY2hpYW5zL01cXG5BcHBhbG9vc2EvU01cXG5BcHBsZS9NXFxuQXBwbGVzZWVkL01cXG5BcHBsZXRvbi9NXFxuQXBwb21hdHRveC9NXFxuQXByL01cXG5BcHJpbC9NU1xcbkFwdWxlaXVzL01cXG5BcXVhZnJlc2gvTVxcbkFxdWFyaWFuXFxuQXF1YXJpdXMvTVNcXG5BcXVpbGEvTVxcbkFxdWluYXMvTVxcbkFxdWluby9NXFxuQXF1aXRhaW5lL01cXG5Bci9NXFxuQXJhL01cXG5BcmFiL1NNXFxuQXJhYmlhL01cXG5BcmFiaWFuL01TXFxuQXJhYmljL01cXG5BcmFiaXN0L01TXFxuQXJhYnkvTVxcbkFyYWNlbGkvTVxcbkFyYWZhdC9NXFxuQXJhZ29uXFxuQXJhZ3VheWEvTVxcbkFyYWwvTVxcbkFyYW1haWMvTVxcbkFyYW1jby9NXFxuQXJhcGFoby9NU1xcbkFyYXBhaG9lc1xcbkFyYXJhdC9NXFxuQXJhdWNhbmlhbi9NXFxuQXJhd2FrL01cXG5BcmF3YWthbi9NXFxuQXJiaXRyb24vTVxcbkFyY2FkaWEvTVxcbkFyY2FkaWFuL01cXG5BcmNoZWFuL01cXG5BcmNoaWJhbGQvTVxcbkFyY2hpZS9NXFxuQXJjaGltZWRlcy9NXFxuQXJjdGljL01cXG5BcmN0dXJ1cy9NXFxuQXJkYWJpbFxcbkFyZGVuL01cXG5BcmR1aW5vL01cXG5BcmVjaWJvL01cXG5BcmVxdWlwYS9NXFxuQXJlcy9NXFxuQXJnZW50aW5hL01cXG5BcmdlbnRpbmUvTVxcbkFyZ2VudGluZWFuXFxuQXJnZW50aW5pYW4vTVNcXG5BcmdvL1NNXFxuQXJnb25hdXQvTVNcXG5Bcmdvbm5lL01cXG5Bcmdvcy9NXFxuQXJndXMvTVxcbkFyaWFkbmUvTVxcbkFyaWFuaXNtL01cXG5BcmllbC9NXFxuQXJpZXMvTVNcXG5Bcmlvc3RvL01cXG5BcmlzdGFyY2h1cy9NXFxuQXJpc3RpZGVzL01cXG5BcmlzdG9waGFuZXMvTVxcbkFyaXN0b3RlbGlhbi9NXFxuQXJpc3RvdGxlL01cXG5Bcml1cy9NXFxuQXJpelxcbkFyaXpvbmEvTVxcbkFyaXpvbmFuL1NNXFxuQXJpem9uaWFuL01TXFxuQXJqdW5hL01cXG5BcmsvTVxcbkFya2Fuc2FuL01TXFxuQXJrYW5zYXMvTVxcbkFya2hhbmdlbHNrL01cXG5Bcmt3cmlnaHQvTVxcbkFybGVuZS9NXFxuQXJsaW5lL01cXG5Bcmxpbmd0b24vTVxcbkFybWFnZWRkb24vU01cXG5Bcm1hZ25hYy9NXFxuQXJtYW5kL01cXG5Bcm1hbmRvL01cXG5Bcm1hbmkvTVxcbkFybWVuaWEvTVxcbkFybWVuaWFuL1NNXFxuQXJtaW5pdXMvTVxcbkFybW9uay9NXFxuQXJtb3VyL01cXG5Bcm1zdHJvbmcvTVxcbkFybmViL01cXG5Bcm5oZW0vTVxcbkFybm8vTVxcbkFybm9sZC9NXFxuQXJudWxmby9NXFxuQXJvbi9NXFxuQXJyaGVuaXVzL01cXG5BcnJvbi9NXFxuQXJ0L01cXG5BcnRheGVyeGVzL01cXG5BcnRlbWlzL01cXG5BcnRodXIvTVxcbkFydGh1cmlhbi9NXFxuQXJ0aWUvTVxcbkFydHVyby9NXFxuQXJ1YmEvTVxcbkFyeWFuL01TXFxuQXMvTVxcbkFzYW1hL01cXG5Bc2NlbGxhL01cXG5Bc2NlbnNpb24vTVxcbkFzZ2FyZC9NXFxuQXNoYW50aS9NXFxuQXNoY3JvZnQvTVxcbkFzaGUvTVxcbkFzaGV2aWxsZS9NXFxuQXNoZ2FiYXRcXG5Bc2hpa2FnYS9NXFxuQXNoa2VuYXppbS9NXFxuQXNoa2hhYmFkL01cXG5Bc2hsZWUvTVxcbkFzaGxleS9NXFxuQXNobW9sZWFuL01cXG5Bc2h1cmJhbmlwYWwvTVxcbkFzaWEvTVxcbkFzaWFnb1xcbkFzaWFuL01TXFxuQXNpYXRpYy9TTVxcbkFzaW1vdi9NXFxuQXNtYXJhL01cXG5Bc29rYS9NXFxuQXNwZWxsL01cXG5Bc3Blbi9NXFxuQXNwZXJnZXIvTVxcbkFzcGlkaXNrZS9NXFxuQXNxdWl0aC9NXFxuQXNzYWQvTVxcbkFzc2FtL01cXG5Bc3NhbWVzZS9NXFxuQXNzZW1ibHlcXG5Bc3Npc2kvTVxcbkFzc3lyaWEvTVxcbkFzc3lyaWFuL1NNXFxuQXN0YWlyZS9NXFxuQXN0YW5hL01cXG5Bc3RhcnRlL01cXG5Bc3Rvbi9NXFxuQXN0b3IvTVxcbkFzdG9yaWEvTVxcbkFzdHJha2hhbi9NXFxuQXN0cm9UdXJmL01cXG5Bc3R1cmlhcy9NXFxuQXN1bmNpb24vTVxcbkFzd2FuL01cXG5BdC9TTVxcbkF0YWNhbWEvTVxcbkF0YWh1YWxwYS9NXFxuQXRhbGFudGEvTVxcbkF0YXJpL01cXG5BdGFzY2FkZXJvL01cXG5BdGF0dXJrL01cXG5BdGhhYmFzY2EvTVxcbkF0aGFiYXNrYW4vU01cXG5BdGhhbmFzaXVzXFxuQXRoZW5hL01cXG5BdGhlbmUvTVxcbkF0aGVuaWFuL1NNXFxuQXRoZW5zL01cXG5BdGtpbnMvTVxcbkF0a2luc29uL01cXG5BdGxhbnRhL01cXG5BdGxhbnRlc1xcbkF0bGFudGljL01cXG5BdGxhbnRpcy9NXFxuQXRsYXMvTVNcXG5BdG1hbi9NXFxuQXRvbmVtZW50XFxuQXRyZXVzL01cXG5BdHJpYS9NXFxuQXRyb3Bvcy9NXFxuQXR0aWMvTVxcbkF0dGljYS9NXFxuQXR0aWxhL01cXG5BdHRsZWUvTVxcbkF0dG5cXG5BdHR1Y2tzL01cXG5BdHdvb2QvTVxcbkF1L01cXG5BdWJyZXkvTVxcbkF1YnVybi9NXFxuQXVja2xhbmQvTVxcbkF1ZGVuL01cXG5BdWRpL01cXG5BdWRpb24vTVxcbkF1ZHJhL01cXG5BdWRyZXkvTVxcbkF1ZHVib24vTVxcbkF1Zy9NXFxuQXVnZWFuL01cXG5BdWdzYnVyZy9NXFxuQXVndXN0L01TXFxuQXVndXN0YS9NXFxuQXVndXN0YW4vTVxcbkF1Z3VzdGluZS9NXFxuQXVndXN0aW5pYW4vTVNcXG5BdWd1c3R1cy9NXFxuQXVyYW5nemViL01cXG5BdXJlbGlhL01cXG5BdXJlbGlvL01cXG5BdXJlbGl1cy9NXFxuQXVyZW9teWNpbi9NXFxuQXVyaWdhL01cXG5BdXJvcmEvTVxcbkF1c2Nod2l0ei9NXFxuQXVzc2llL01TXFxuQXVzdGVuL01cXG5BdXN0ZXJsaXR6L01cXG5BdXN0aW4vTVNcXG5BdXN0cmFsYXNpYS9NXFxuQXVzdHJhbGFzaWFuXFxuQXVzdHJhbGlhL01cXG5BdXN0cmFsaWFuL1NNXFxuQXVzdHJhbG9pZC9NXFxuQXVzdHJhbG9waXRoZWN1cy9NXFxuQXVzdHJpYS9NXFxuQXVzdHJpYW4vU01cXG5BdXN0cm9uZXNpYW4vTVxcbkF1dHVtbi9NXFxuQXYvTVxcbkF2YS9NXFxuQXZhbG9uL01cXG5BdmUvTVxcbkF2ZW50aW5lL01cXG5BdmVybnVzL01cXG5BdmVycm9lcy9NXFxuQXZlcnkvTVxcbkF2ZXN0YS9NXFxuQXZpY2VubmEvTVxcbkF2aWdub24vTVxcbkF2aWxhL01cXG5Bdmlvci9NXFxuQXZpcy9NXFxuQXZvZ2Fkcm8vTVxcbkF2b24vTVxcbkF2b25kYWxlL01cXG5BeGlzXFxuQXh1bS9NXFxuQXlhbGEvTVxcbkF5ZXJzL01cXG5BeW1hcmEvTVxcbkF5cnNoaXJlL01cXG5BeXVydmVkYS9NXFxuQXl5dWJpZC9NXFxuQXphbmEvTVxcbkF6YW5pYS9NXFxuQXphemVsL01cXG5BemVyYmFpamFuL01cXG5BemVyYmFpamFuaS9NU1xcbkF6b3Jlcy9NXFxuQXpvdi9NXFxuQXp0ZWMvU01cXG5BenRlY2FuL01cXG5BenRsYW4vTVxcbkIvTU5UXFxuQkEvTVxcbkJBU0lDL1NNXFxuQkIvTVxcbkJCQi9NXFxuQkJDL01cXG5CQlFcXG5CQlNcXG5CQlNlc1xcbkJDL01cXG5CRkZcXG5CSUFcXG5CSU9TXFxuQklUTkVUXFxuQkxUL1NNXFxuQk0vTVxcbkJNVy9NXFxuQk9cXG5CUC9NXFxuQlBPRVxcbkJSXFxuQlMvTVxcbkJTQVxcbkJTRC9TTVxcbkJUVVxcbkJUV1xcbkJZT0JcXG5CYS9NXFxuQmFhbC9TTVxcbkJhYXRoL01cXG5CYWF0aGlzdC9NXFxuQmFiYmFnZS9NXFxuQmFiYml0dC9NXFxuQmFiZWwvTVNcXG5CYWJ5bG9uL01TXFxuQmFieWxvbmlhL01cXG5CYWJ5bG9uaWFuL1NNXFxuQmFjYWxsL01cXG5CYWNhcmRpL01cXG5CYWNjaGFuYWxpYS9NXFxuQmFjY2hpY1xcbkJhY2NodXMvTVxcbkJhY2gvTVxcbkJhY2t1cy9NXFxuQmFjb24vTVxcbkJhY3RyaWEvTVxcbkJhZGVuL01cXG5CYWRsYW5kcy9NXFxuQmFlZGVrZXIvTVNcXG5CYWV6L01cXG5CYWZmaW4vTVxcbkJhZ2dpZXMvTVxcbkJhZ2hkYWQvTVxcbkJhZ3Vpby9NXFxuQmFoYSdpL01cXG5CYWhhJ3VsbGFoL01cXG5CYWhhbWEvU01cXG5CYWhhbWFuaWFuXFxuQmFoYW1hcy9NXFxuQmFoYW1pYW4vTVNcXG5CYWhpYS9NXFxuQmFocmFpbi9NXFxuQmFpZHUvTVxcbkJhaWthbC9NXFxuQmFpbGV5L01cXG5CYWlyZC9NXFxuQmFrZWxpdGUvTVxcbkJha2VyL01cXG5CYWtlcnNmaWVsZC9NXFxuQmFrdS9NXFxuQmFrdW5pbi9NXFxuQmFsYW5jaGluZS9NXFxuQmFsYXRvbi9NXFxuQmFsYm9hL01cXG5CYWxkZXIvTVxcbkJhbGR3aW4vU01cXG5CYWxlYXJpYy9NXFxuQmFsZm91ci9NXFxuQmFsaS9NXFxuQmFsaW5lc2UvTVxcbkJhbGthbi9NU1xcbkJhbGthbnMvTVxcbkJhbGtoYXNoL01cXG5CYWxsL01cXG5CYWxsYXJkL01cXG5CYWx0aGF6YXIvTVxcbkJhbHRpYy9NXFxuQmFsdGltb3JlL01cXG5CYWx1Y2hpc3Rhbi9NXFxuQmFsemFjL01cXG5CYW1ha28vTVxcbkJhbWJpL01cXG5CYW5hY2gvTVxcbkJhbmNyb2Z0L01cXG5CYW5kdW5nL01cXG5CYW5nYWxvcmUvTVxcbkJhbmdrb2svTVxcbkJhbmdsYWRlc2gvTVxcbkJhbmdsYWRlc2hpL1NNXFxuQmFuZ29yL01cXG5CYW5ndWkvTVxcbkJhbmphcm1hc2luL01cXG5CYW5qdWwvTVxcbkJhbmtzL01cXG5CYW5uZWtlci9NXFxuQmFubmlzdGVyL01cXG5CYW50aW5nL01cXG5CYW50dS9NU1xcbkJhb3RvdS9NXFxuQmFwdGlzdC9TTVxcbkJhcHRpc3RlL01cXG5CYXJhYmJhcy9NXFxuQmFyYWNrL01cXG5CYXJiYWRpYW4vU01cXG5CYXJiYWRvcy9NXFxuQmFyYmFyYS9NXFxuQmFyYmFyZWxsYS9NXFxuQmFyYmFyb3NzYS9NXFxuQmFyYmFyeS9NXFxuQmFyYmVyL01cXG5CYXJiaWUvTVxcbkJhcmJvdXIvTVxcbkJhcmJyYS9NXFxuQmFyYnVkYS9NXFxuQmFyY2Vsb25hL01cXG5CYXJjZWxvbmV0YS9NXFxuQmFyY2xheS9TTVxcbkJhcmNsYXlzL01cXG5CYXJkZWVuL01cXG5CYXJlbnRzL01cXG5CYXJrZXIvTVxcbkJhcmtsZXkvTVxcbkJhcmxvdy9NXFxuQmFybmFiYXMvTVxcbkJhcm5hYnkvTVxcbkJhcm5hcmQvTVxcbkJhcm5hdWwvTVxcbkJhcm5lcy9NXFxuQmFybmV0dC9NXFxuQmFybmV5L01cXG5CYXJudW0vTVxcbkJhcm9kYS9NXFxuQmFycXVpc2ltZXRvL01cXG5CYXJyL01cXG5CYXJyYW5xdWlsbGEvTVxcbkJhcnJlcmEvTVxcbkJhcnJldHQvTVxcbkJhcnJpZS9NXFxuQmFycm9uL01cXG5CYXJyeS9NXFxuQmFycnltb3JlL01cXG5CYXJ0L01cXG5CYXJ0aC9NU1xcbkJhcnRob2xkaS9NXFxuQmFydGhvbG9tZXcvTVxcbkJhcnRsZXR0L01cXG5CYXJ0b2svTVxcbkJhcnRvbi9NXFxuQmFydWNoL01cXG5CYXJ5c2huaWtvdi9NXFxuQmFzZWwvTVxcbkJhc2hvL01cXG5CYXNpZS9NXFxuQmFzaWwvTVxcbkJhc3F1ZS9NU1xcbkJhc3JhL01cXG5CYXNzL01cXG5CYXNzZXRlcnJlL01cXG5CYXN0aWxsZS9NXFxuQmFzdXRvbGFuZC9NXFxuQmF0YWFuL01cXG5CYXRlcy9NXFxuQmF0aHNoZWJhL01cXG5CYXRpc3RhL01cXG5CYXRtYW4vTVxcbkJhdHRsZS9NXFxuQmF0dS9NXFxuQmF1ZGVsYWlyZS9NXFxuQmF1ZG91aW4vTVxcbkJhdWRyaWxsYXJkL01cXG5CYXVlci9NXFxuQmF1aGF1cy9NXFxuQmF1bS9NXFxuQmF2YXJpYS9NXFxuQmF2YXJpYW4vTVxcbkJheHRlci9NXFxuQmF5YW1vblxcbkJheWVyL01cXG5CYXllcy9NXFxuQmF5ZXNpYW4vTVxcbkJheWV1eC9NXFxuQmF5bG9yL01cXG5CYXlvbm5lL01cXG5CYXlyZXV0aC9NXFxuQmF5d2F0Y2gvTVxcbkJlL01IXFxuQmVhY2gvTVxcbkJlYWRsZS9NXFxuQmVhbi9NXFxuQmVhcmQvTVxcbkJlYXJkbW9yZS9NXFxuQmVhcmRzbGV5L01cXG5CZWFybmFpc2UvTVxcbkJlYXNsZXkvTVxcbkJlYXRsZW1hbmlhL01cXG5CZWF0bGVzL01cXG5CZWF0cmljZS9NXFxuQmVhdHJpeC9NXFxuQmVhdHJpei9NXFxuQmVhdHR5L01cXG5CZWF1L01cXG5CZWF1Zm9ydC9NXFxuQmVhdWpvbGFpcy9NXFxuQmVhdW1hcmNoYWlzL01cXG5CZWF1bW9udC9NXFxuQmVhdXJlZ2FyZC9NXFxuQmVhdXZvaXIvTVxcbkJlY2h0ZWwvTVxcbkJlY2svTVJcXG5CZWNrZXIvTVxcbkJlY2tldC9NXFxuQmVja2V0dC9NXFxuQmVja2xleS9NXFxuQmVja21hblxcbkJlY2t5L01cXG5CZWNxdWVyZWwvTVxcbkJlZGUvTVxcbkJlZG91aW4vU01cXG5CZWViZS9NXFxuQmVlY2hlci9NXFxuQmVlZmFyb25pL01cXG5CZWVsemVidWIvTVxcbkJlZXJib2htL01cXG5CZWV0aG92ZW4vTVxcbkJlZXRvbi9NXFxuQmVnaW4vTVxcbkJlaGFuL01cXG5CZWhyaW5nL01cXG5CZWlkZXJiZWNrZS9NXFxuQmVpamluZy9NXFxuQmVpcnV0L01cXG5CZWtlc3kvTVxcbkJlbGEvTVxcbkJlbGFydXMvTVxcbkJlbGFydXNpYW5cXG5CZWxhdS9NXFxuQmVsZW0vTVxcbkJlbGZhc3QvTVxcbkJlbGdcXG5CZWxnaWFuL1NNXFxuQmVsZ2l1bS9NXFxuQmVsZ3JhZGUvTVxcbkJlbGluZGEvTVxcbkJlbGl6ZS9NXFxuQmVsbC9NXFxuQmVsbGEvTVxcbkJlbGxhbXkvTVxcbkJlbGxhdHJpeC9NXFxuQmVsbGVlay9NXFxuQmVsbGluZ2hhbS9NXFxuQmVsbGluaS9NXFxuQmVsbG93L01cXG5CZWxtb250L01cXG5CZWxtb3Bhbi9NXFxuQmVsb2l0L01cXG5CZWxvcnVzc2lhbi9NU1xcbkJlbHNoYXp6YXIvTVxcbkJlbHRhbmUvTVxcbkJlbHVzaGkvTVxcbkJlbi9NXFxuQmVuYWNlcnJhZi9NXFxuQmVuY2hsZXkvTVxcbkJlbmQvTVJcXG5CZW5kZXIvTVxcbkJlbmRpY3R1c1xcbkJlbmRpeC9NXFxuQmVuZWRpY3QvTVxcbkJlbmVkaWN0aW5lL01TXFxuQmVuZWx1eC9NXFxuQmVuZXQvTVxcbkJlbmV0dG9uL01cXG5CZW5nYWwvU01cXG5CZW5nYWxpL01cXG5CZW5naGF6aS9NXFxuQmVuaW4vTVxcbkJlbmluZXNlL01cXG5CZW5pdGEvTVxcbkJlbml0by9NXFxuQmVuamFtaW4vTVxcbkJlbm5ldHQvTVxcbkJlbm5pZS9NXFxuQmVubnkvTVxcbkJlbnNvbi9NXFxuQmVudGhhbS9NXFxuQmVudGxleS9NXFxuQmVudG9uL01cXG5CZW56L01cXG5CZW56ZWRyaW5lL01cXG5CZW93dWxmL01cXG5CZXJiZXIvU01cXG5CZXJlbmljZS9NXFxuQmVyZXR0YS9NXFxuQmVyZy9NTlJcXG5CZXJnZW4vTVxcbkJlcmdlci9NXFxuQmVyZ2VyYWMvTVxcbkJlcmdtYW4vTVxcbkJlcmdzb24vTVxcbkJlcmlhL01cXG5CZXJpbmcvTVxcbkJlcmtlbGV5L01cXG5CZXJrc2hpcmUvU01cXG5CZXJrc2hpcmVzL01cXG5CZXJsZS9NXFxuQmVybGluL1NaTVJcXG5CZXJsaW5lci9NXFxuQmVybGlvei9NXFxuQmVybGl0ei9NXFxuQmVybXVkYS9TTVxcbkJlcm11ZGFuL1NNXFxuQmVybXVkaWFuL1NNXFxuQmVybi9NXFxuQmVybmFkZXR0ZS9NXFxuQmVybmFkaW5lL01cXG5CZXJuYW5rZS9NXFxuQmVybmFyZC9NXFxuQmVybmFyZG8vTVxcbkJlcm5heXMvTVxcbkJlcm5iYWNoL01cXG5CZXJuZXNlXFxuQmVybmhhcmR0L01cXG5CZXJuaWNlL01cXG5CZXJuaWUvTVxcbkJlcm5pbmkvTVxcbkJlcm5vdWxsaS9NXFxuQmVybnN0ZWluL01cXG5CZXJyYS9NXFxuQmVycnkvTVxcbkJlcnQvTVxcbkJlcnRhL01cXG5CZXJ0ZWxzbWFubi9NXFxuQmVydGhhL01cXG5CZXJ0aWUvTVxcbkJlcnRpbGxvbi9NXFxuQmVydHJhbS9NXFxuQmVydHJhbmQvTVxcbkJlcndpY2svTVxcbkJlcnlsL01cXG5CZXJ6ZWxpdXMvTVxcbkJlc3MvTVxcbkJlc3NlbC9NXFxuQmVzc2VtZXIvTVxcbkJlc3NpZS9NXFxuQmVzdC9NXFxuQmV0ZWxnZXVzZS9NXFxuQmV0aC9NXFxuQmV0aGFueS9NXFxuQmV0aGUvTVxcbkJldGhlc2RhL01cXG5CZXRobGVoZW0vTVxcbkJldGh1bmUvTVxcbkJldHN5L01cXG5CZXR0ZS9NXFxuQmV0dGllL01cXG5CZXR0eS9NXFxuQmV0dHllL01cXG5CZXVsYWgvTVxcbkJldmVyaWRnZVxcbkJldmVybGV5L01cXG5CZXZlcmx5L01cXG5CZXllci9NXFxuQmhhcmF0L01cXG5CaG9wYWwvTVxcbkJodXRhbi9NXFxuQmh1dGFuZXNlL01cXG5CaHV0dG8vTVxcbkJpL01cXG5CaWFseXN0b2svTVxcbkJpYW5jYS9NXFxuQmliXFxuQmlibGUvTVNcXG5CaWMvTVxcbkJpZGRsZS9NXFxuQmlkZW4vTVxcbkJpZXJjZS9NXFxuQmlnUXVlcnkvTVxcbkJpZ2Zvb3QvTVxcbkJpZ2dsZXMvTVxcbkJpa28vTVxcbkJpbGJhby9NXFxuQmlsYm8vTVxcbkJpbGwvTUpcXG5CaWxsaWUvTVxcbkJpbGxpbmdzL01cXG5CaWxseS9NXFxuQmltaW5pL01cXG5CaW5naGFtdG9uL01cXG5CaW9nZW4vTVxcbkJpb2tvL01cXG5CaXJkL01cXG5CaXJkc2V5ZS9NXFxuQmlya2Vuc3RvY2svTVxcbkJpcm1pbmdoYW0vTVxcbkJpcm8vTVxcbkJpc2NheS9NXFxuQmlzY2F5bmUvTVxcbkJpc2hrZWsvTVxcbkJpc2hvcC9NXFxuQmlzbWFyY2svTVxcbkJpc21hcmsvTVxcbkJpc3F1aWNrL01cXG5CaXNzYXUvTVxcbkJpdFRvcnJlbnQvTVxcbkJpemV0L01cXG5CamVya25lcy9NXFxuQmpvcmsvTVxcbkJrL01cXG5CbGFja0JlcnJ5L01cXG5CbGFja2JlYXJkL01cXG5CbGFja2J1cm4vTVxcbkJsYWNrZmVldC9NXFxuQmxhY2tmb290L01cXG5CbGFja3Bvb2wvTVxcbkJsYWNrc2J1cmcvTVxcbkJsYWNrc2hpcnQvTVxcbkJsYWNrc3RvbmUvTVxcbkJsYWNrd2VsbC9NXFxuQmxhaW5lL01cXG5CbGFpci9NXFxuQmxha2UvTVxcbkJsYW5jYS9NXFxuQmxhbmNoYXJkL01cXG5CbGFuY2hlL01cXG5CbGFua2Vuc2hpcC9NXFxuQmxhbnR5cmUvTVxcbkJsYXR6L01cXG5CbGF2YXRza3kvTVxcbkJsZW5oZWltL01cXG5CbGV2aW5zL01cXG5CbGlnaC9NXFxuQmxvY2gvTVxcbkJsb2NrYnVzdGVyL01cXG5CbG9lbWZvbnRlaW4vTVxcbkJsb25kZWwvTVxcbkJsb25kaWUvTVxcbkJsb29tL01SXFxuQmxvb21lci9NXFxuQmxvb21maWVsZC9NXFxuQmxvb21pbmdkYWxlL01cXG5CbG9vbWluZ3Rvbi9NXFxuQmxvb21zYnVyZy9NXFxuQmxvb21zYnVyeS9NXFxuQmx1XFxuQmx1Y2hlci9NXFxuQmx1ZWJlYXJkL01cXG5CbHVldG9vdGgvTVxcbkJsdmRcXG5CbHl0aGUvTVxcbkJvYWRpY2VhXFxuQm9hcy9NXFxuQm9iL01cXG5Cb2JiaS9NXFxuQm9iYmllL01cXG5Cb2JiaXR0L01cXG5Cb2JieS9NXFxuQm9jY2FjY2lvL01cXG5Cb2RoaWRoYXJtYS9NXFxuQm9kaGlzYXR0dmEvTVxcbkJvZGxlaWFuXFxuQm9laW5nL01cXG5Cb2VvdGlhL01cXG5Cb2VvdGlhbi9NXFxuQm9lci9TTVxcbkJvZXRoaXVzL01cXG5Cb2dhcnQvTVxcbkJvZ290YS9NXFxuQm9oZW1pYS9NXFxuQm9oZW1pYW4vU01cXG5Cb2hyL01cXG5Cb2lzZS9NXFxuQm9qYW5nbGVzL01cXG5Cb2xleW4vTVxcbkJvbGl2YXIvTVxcbkJvbGl2aWEvTVxcbkJvbGl2aWFuL01TXFxuQm9sbHl3b29kL01cXG5Cb2xvZ25hL01cXG5Cb2xzaGV2aWsvU01cXG5Cb2xzaGV2aWtpXFxuQm9sc2hldmlzbS9NXFxuQm9sc2hldmlzdC9NXFxuQm9sc2hvaS9NXFxuQm9sdG9uL01cXG5Cb2x0em1hbm4vTVxcbkJvbWJheS9NXFxuQm9uYXBhcnRlL01cXG5Cb25hdmVudHVyZS9NXFxuQm9uZC9NXFxuQm9uaG9lZmZlci9NXFxuQm9uaWZhY2UvTVxcbkJvbml0YS9NXFxuQm9ubi9NUlxcbkJvbm5lci9NXFxuQm9ubmV2aWxsZS9NXFxuQm9ubmllL01cXG5Cb25vL01cXG5Cb29rZXIvTVxcbkJvb2xlL01cXG5Cb29sZWFuL01cXG5Cb29uZS9NXFxuQm9vdGVzL01cXG5Cb290aC9NXFxuQm9yZGVhdXgvTVxcbkJvcmRlbi9NXFxuQm9yZG9uL01cXG5Cb3JlYXMvTVxcbkJvcmcvU01cXG5Cb3JnZXMvTVxcbkJvcmdpYS9NXFxuQm9yZ2x1bS9NXFxuQm9yaXMvTVxcbkJvcmsvTVxcbkJvcmxhdWcvTVxcbkJvcm4vTVxcbkJvcm5lby9NXFxuQm9yb2J1ZHVyL01cXG5Cb3JvZGluL01cXG5Cb3J1L01cXG5Cb3NjaC9NXFxuQm9zZS9NXFxuQm9zbmlhL01cXG5Cb3NuaWFuXFxuQm9zcG9ydXMvTVxcbkJvc3Rvbi9NU1xcbkJvc3Rvbmlhbi9NXFxuQm9zd2VsbC9NXFxuQm90aGFcXG5Cb3RveFxcbkJvdHN3YW5hL01cXG5Cb3R0aWNlbGxpL01cXG5Cb3VsZGVyL01cXG5Cb3VsZXovTVxcbkJvdXJiYWtpL01cXG5Cb3VyYm9uL1NNXFxuQm91cm5lbW91dGgvTVxcbkJvdmFyeS9NXFxuQm93ZGl0Y2gvTVxcbkJvd2VsbC9NXFxuQm93ZW4vTVxcbkJvd2Vycy9NXFxuQm93ZXJ5L01cXG5Cb3dpZS9NXFxuQm93bWFuL01cXG5Cb3lkL01cXG5Cb3llci9NXFxuQm95bGUvTVxcbkJyL01UXFxuQnJhZC9NWVxcbkJyYWRidXJ5L01cXG5CcmFkZG9jay9NXFxuQnJhZGVudG9uL01cXG5CcmFkZm9yZC9NXFxuQnJhZGxleS9NXFxuQnJhZGx5L01cXG5CcmFkc2hhdy9NXFxuQnJhZHN0cmVldC9NXFxuQnJhZHkvTVxcbkJyYWdnL01cXG5CcmFoZS9NXFxuQnJhaG1hL01TXFxuQnJhaG1hZ3VwdGEvTVxcbkJyYWhtYW4vTVNcXG5CcmFobWFuaVxcbkJyYWhtYW5pc20vU01cXG5CcmFobWFwdXRyYS9NXFxuQnJhaG1zL01cXG5CcmFpbGxlL01TXFxuQnJhaW4vTVxcbkJyYW1wdG9uL01cXG5CcmFuL01cXG5CcmFuY2gvTVxcbkJyYW5kZWlzL01cXG5CcmFuZGVuL01cXG5CcmFuZGVuYnVyZy9NXFxuQnJhbmRpL01cXG5CcmFuZGllL01cXG5CcmFuZG8vTVxcbkJyYW5kb24vTVxcbkJyYW5kdC9NXFxuQnJhbmR5L01cXG5CcmFudC9NXFxuQnJhcXVlL01cXG5CcmFzaWxpYS9NXFxuQnJhdGlzbGF2YS9NXFxuQnJhdHRhaW4vTVxcbkJyYXkvTVxcbkJyYXppbC9NXFxuQnJhemlsaWFuL01TXFxuQnJhem9zL01cXG5CcmF6emF2aWxsZS9NXFxuQnJlYWtzcGVhci9NXFxuQnJlYXRoYWx5emVyXFxuQnJlY2h0L01cXG5CcmVja2VucmlkZ2UvTVxcbkJyZW1lbi9NXFxuQnJlbWVydG9uL01cXG5CcmVuZGEvTVxcbkJyZW5kYW4vTVxcbkJyZW5uYW4vTVxcbkJyZW5uZXIvTVxcbkJyZW50L01cXG5CcmVudG9uL01cXG5CcmVzdC9NXFxuQnJldC9NXFxuQnJldG9uL01cXG5CcmV0dC9NXFxuQnJld2VyL01cXG5CcmV3c3Rlci9NXFxuQnJleGl0XFxuQnJlemhuZXYvTVxcbkJyaWFuL01cXG5CcmlhbmEvTVxcbkJyaWFubmEvTVxcbkJyaWNlL01cXG5CcmlkYWx2ZWlsL01cXG5CcmlkZ2Vwb3J0L01cXG5CcmlkZ2VyL01cXG5CcmlkZ2VzL01cXG5CcmlkZ2V0L01cXG5CcmlkZ2V0b3duL01cXG5CcmlkZ2V0dC9NXFxuQnJpZGdldHRlL01cXG5CcmlkZ21hbi9NXFxuQnJpZS9TTVxcbkJyaWdhZG9vbi9NXFxuQnJpZ2dzL01cXG5CcmlnaGFtL01cXG5CcmlnaHQvTVxcbkJyaWdodG9uL01cXG5CcmlnaWQvTVxcbkJyaWdpdHRlL01cXG5CcmlsbG8vTVxcbkJyaWxsb3VpblxcbkJyaW5rbGV5L01cXG5CcmlzYmFuZS9NXFxuQnJpc3RvbC9NXFxuQnJpdC9TTVxcbkJyaXRhaW4vTVxcbkJyaXRhbm5pYS9NXFxuQnJpdGFubmljL01cXG5Ccml0YW5uaWNhL01cXG5Ccml0aWNpc20vU01cXG5Ccml0aXNoL01SWlxcbkJyaXRpc2hlci9NXFxuQnJpdG5leS9NXFxuQnJpdG9uL01TXFxuQnJpdHQvTU5cXG5Ccml0dGFueS9TTVxcbkJyaXR0ZW4vTVxcbkJyaXR0bmV5L01cXG5Ccm5vL01cXG5Ccm9hZHdheS9TTVxcbkJyb2JkaW5nbmFnL01cXG5Ccm9iZGluZ25hZ2lhbi9NXFxuQnJvY2svTVxcbkJyb2thdy9NXFxuQnJvbnNvbi9NXFxuQnJvbnRlL01cXG5Ccm9udG9zYXVydXNcXG5Ccm9ueC9NXFxuQnJvb2tlL01TXFxuQnJvb2tseW4vTVxcbkJyb29rcy9NXFxuQnJvc1xcbkJyb3duL01HXFxuQnJvd25lL01cXG5Ccm93bmlhbi9NXFxuQnJvd25pZS9TXFxuQnJvd25pbmcvTVxcbkJyb3duc2hpcnQvTVxcbkJyb3duc3ZpbGxlL01cXG5CcnViZWNrL01cXG5CcnVjZS9NXFxuQnJ1Y2tuZXIvTVxcbkJydWVnZWxcXG5CcnVtbWVsL01cXG5CcnVuZWkvTVxcbkJydW5laWFuL01TXFxuQnJ1bmVsbGVzY2hpL01cXG5CcnVuaGlsZGUvTVxcbkJydW5vL01cXG5CcnVuc3dpY2svTVxcbkJydXNzZWxzL01cXG5CcnV0L01cXG5CcnV0dXMvTVxcbkJyeWFuL01cXG5CcnlhbnQvTVxcbkJyeWNlL01cXG5CcnlubmVyL01cXG5Ccnlvbi9NXFxuQnJ6ZXppbnNraS9NXFxuQnR1L01cXG5CdWJlci9NXFxuQnVjaGFuYW4vTVxcbkJ1Y2hhcmVzdC9NXFxuQnVjaGVud2FsZC9NXFxuQnVjaHdhbGQvTVxcbkJ1Y2svTVxcbkJ1Y2tpbmdoYW0vTVxcbkJ1Y2tsZXkvTVxcbkJ1Y2tuZXIvTVxcbkJ1ZC9NXFxuQnVkYXBlc3QvTVxcbkJ1ZGRoYS9TTVxcbkJ1ZGRoaXNtL1NNXFxuQnVkZGhpc3QvU01cXG5CdWRkeS9NXFxuQnVkd2Vpc2VyL01cXG5CdWZmYWxvL01cXG5CdWZmeS9NXFxuQnVmb3JkL01cXG5CdWdhdHRpL01cXG5CdWd6aWxsYS9NXFxuQnVpY2svTVxcbkJ1anVtYnVyYS9NXFxuQnVraGFyYS9NXFxuQnVraGFyaW4vTVxcbkJ1bGF3YXlvL01cXG5CdWxmaW5jaC9NXFxuQnVsZ2FuaW4vTVxcbkJ1bGdhci9NXFxuQnVsZ2FyaS9NXFxuQnVsZ2FyaWEvTVxcbkJ1bGdhcmlhbi9TTVxcbkJ1bGxvY2svTVxcbkJ1bGx3aW5rbGUvTVxcbkJ1bHRtYW5uL01cXG5CdW1wcG8vTVxcbkJ1bmNoZS9NXFxuQnVuZGVzYmFuay9NXFxuQnVuZGVzdGFnL01cXG5CdW5pbi9NXFxuQnVua2VyL01cXG5CdW5zZW4vTVxcbkJ1bnVlbC9NXFxuQnVueWFuL01cXG5CdXJiYW5rL01cXG5CdXJiZXJyeS9NXFxuQnVyY2gvTVxcbkJ1cmdlci9NXFxuQnVyZ2Vzcy9NXFxuQnVyZ295bmUvTVxcbkJ1cmd1bmRpYW4vTVxcbkJ1cmd1bmR5L1NNXFxuQnVya2UvTVxcbkJ1cmtzL01cXG5CdXJsL01cXG5CdXJsaW5ndG9uL01cXG5CdXJtYS9NXFxuQnVybWVzZS9NXFxuQnVybmV0dC9NXFxuQnVybnMvTVxcbkJ1cm5zaWRlL01cXG5CdXJyL01cXG5CdXJyaXMvTVxcbkJ1cnJvdWdocy9NXFxuQnVyc2EvTVxcbkJ1cnQvTVxcbkJ1cnRvbi9NXFxuQnVydW5kaS9NXFxuQnVydW5kaWFuL01TXFxuQnVzY2gvTVxcbkJ1c2gvTVxcbkJ1c2hpZG8vTVxcbkJ1c2huZWxsL01cXG5CdXRsZXIvTVxcbkJ1dHRlcmZpbmdlcnMvTVxcbkJ1eHRlaHVkZS9NXFxuQnlibG9zL01cXG5CeWVycy9NXFxuQnlyZC9NXFxuQnlyb24vTVxcbkJ5cm9uaWMvTVxcbkJ5emFudGluZS9NU1xcbkJ5emFudGl1bS9NXFxuQy9TTVxcbkNBXFxuQ0FEL01cXG5DQUlcXG5DQU1cXG5DQVBcXG5DQVJFXFxuQ0FUVlxcbkNCXFxuQ0JDL01cXG5DQlMvTVxcbkNDVFZcXG5DQ1VcXG5DRC9TTVxcbkNEQ1xcbkNEVFxcbkNFTy9NXFxuQ0ZcXG5DRkMvTVxcbkNGT1xcbkNHSVxcbkNJQS9NXFxuQ0lEXFxuQ05OL01cXG5DTlMvTVxcbkNPL01cXG5DT0JPTC9TTVxcbkNPRFxcbkNPTFxcbkNPTEFcXG5DT1ZJRFxcbkNQQS9NXFxuQ1BJL01cXG5DUE9cXG5DUFIvTVxcbkNQVS9NXFxuQ1JUL1NNXFxuQ1NTL01cXG5DU1QvTVxcbkNUL01cXG5DVlxcbkNWUy9NXFxuQ1pcXG5DYS9NXFxuQ2FiZXJuZXQvTVxcbkNhYm90L01cXG5DYWJyYWwvTVxcbkNhYnJlcmEvTVxcbkNhYnJpbmkvTVxcbkNhZGV0dGVcXG5DYWRpbGxhYy9NXFxuQ2FkaXovTVxcbkNhZWRtb24vTVxcbkNhZXJwaGlsbHkvTVxcbkNhZXNhci9TTVxcbkNhZ2UvTVxcbkNhZ25leS9NXFxuQ2Fob2tpYS9NXFxuQ2FpYXBoYXMvTVxcbkNhaW4vU01cXG5DYWlyby9NXFxuQ2FpdGxpbi9NXFxuQ2FqdW4vTVNcXG5DYWwvTVxcbkNhbGFpcy9NXFxuQ2FsY3V0dGEvTVxcbkNhbGRlci9NXFxuQ2FsZGVyb24vTVxcbkNhbGR3ZWxsL01cXG5DYWxlYi9NXFxuQ2FsZWRvbmlhL01cXG5DYWxleGljby9NXFxuQ2FsZ2FyeS9NXFxuQ2FsaG91bi9NXFxuQ2FsaS9NXFxuQ2FsaWJhbi9NXFxuQ2FsaWZcXG5DYWxpZm9ybmlhL01cXG5DYWxpZm9ybmlhbi9TTVxcbkNhbGlndWxhL01cXG5DYWxsYWdoYW4vTVxcbkNhbGxhaGFuL01cXG5DYWxsYW8vTVxcbkNhbGxhcy9NXFxuQ2FsbGllL01cXG5DYWxsaW9wZS9NXFxuQ2FsbGlzdG8vTVxcbkNhbG9vY2FuL01cXG5DYWx2YXJ5L01cXG5DYWx2ZXJ0L01cXG5DYWx2aW4vTVxcbkNhbHZpbmlzbS9NU1xcbkNhbHZpbmlzdC9NU1xcbkNhbHZpbmlzdGljXFxuQ2FtYWNoby9NXFxuQ2FtYXJpbGxvL01cXG5DYW1ib2RpYS9NXFxuQ2FtYm9kaWFuL1NNXFxuQ2FtYnJpYW4vU01cXG5DYW1icmlkZ2UvTVxcbkNhbWRlbi9NXFxuQ2FtZWwvTVxcbkNhbWVsb3BhcmRhbGlzL01cXG5DYW1lbG90L01TXFxuQ2FtZW1iZXJ0L01TXFxuQ2FtZXJvbi9NXFxuQ2FtZXJvb24vU01cXG5DYW1lcm9vbmlhbi9NU1xcbkNhbWlsbGEvTVxcbkNhbWlsbGUvTVxcbkNhbW9lbnMvTVxcbkNhbXBhbmVsbGEvTVxcbkNhbXBiZWxsL01cXG5DYW1waW5hcy9NXFxuQ2FtcG9zL01cXG5DYW1yeS9NXFxuQ2FtdXMvTVxcbkNhbi9NXFxuQ2FuYWFuL01cXG5DYW5hYW5pdGUvTVNcXG5DYW5hZFxcbkNhbmFkYS9NXFxuQ2FuYWRpYW4vU01cXG5DYW5hZGlhbmlzbVxcbkNhbmFsZXR0by9NXFxuQ2FuYXJpZXMvTVxcbkNhbmF2ZXJhbC9NXFxuQ2FuYmVycmEvTVxcbkNhbmNlci9TTVxcbkNhbmN1bi9NXFxuQ2FuZGFjZS9NXFxuQ2FuZGljZS9NXFxuQ2FuZGlkZS9NXFxuQ2FuZHkvTVxcbkNhbm5lcy9NXFxuQ2Fubm9uL01cXG5DYW5vbi9NXFxuQ2Fub3B1cy9NXFxuQ2FudGFicmlnaWFuL01cXG5DYW50ZXJidXJ5L01cXG5DYW50b24vTVxcbkNhbnRvbmVzZS9NXFxuQ2FudG9yL01cXG5DYW50cmVsbC9NXFxuQ2FudHUvTVxcbkNhbnV0ZS9NXFxuQ2FwYWJsYW5jYS9NXFxuQ2FwZWsvTVxcbkNhcGVsbGEvTVxcbkNhcGV0L01cXG5DYXBldGlhbi9NXFxuQ2FwZXRvd24vTVxcbkNhcGgvTVxcbkNhcGlzdHJhbm8vTVxcbkNhcGl0b2wvU01cXG5DYXBpdG9saW5lL01cXG5DYXBvbmUvTVxcbkNhcG90ZS9NXFxuQ2FwcmEvTVxcbkNhcHJpL01cXG5DYXByaWNvcm4vTVNcXG5DYXB0XFxuQ2FwdWNoaW4vTVxcbkNhcHVsZXQvTVxcbkNhcmEvTVxcbkNhcmFjYWxsYS9NXFxuQ2FyYWNhcy9NXFxuQ2FyYXZhZ2dpby9NXFxuQ2FyYm9sb3kvTVxcbkNhcmJvbmRhbGUvTVxcbkNhcmJvbmlmZXJvdXMvTVxcbkNhcmJvcnVuZHVtL01cXG5DYXJkZW5hcy9NXFxuQ2FyZGlmZi9NXFxuQ2FyZGluL01cXG5DYXJkb3pvL01cXG5DYXJleS9NXFxuQ2FyaWIvTVNcXG5DYXJpYmJlYW4vTVNcXG5DYXJpbmEvTVxcbkNhcmlzc2EvTVxcbkNhcmwvTVxcbkNhcmxhL01cXG5DYXJsZW5lL01cXG5DYXJsaW4vTVxcbkNhcmxvL01TXFxuQ2FybG9zL01cXG5DYXJsc2JhZC9NXFxuQ2FybHNvbi9NXFxuQ2FybHRvbi9NXFxuQ2FybHkvTVxcbkNhcmx5bGUvTVxcbkNhcm1lbGEvTVxcbkNhcm1lbGxhL01cXG5DYXJtZWxvL01cXG5DYXJtZW4vTVxcbkNhcm1pY2hhZWwvTVxcbkNhcm1pbmUvTVxcbkNhcm5hcC9NXFxuQ2FybmF0aW9uL01cXG5DYXJuZWdpZS9NXFxuQ2FybmV5L01cXG5DYXJub3QvTVxcbkNhcm9sL01cXG5DYXJvbGUvTVxcbkNhcm9saW5hL01cXG5DYXJvbGluZS9NXFxuQ2Fyb2xpbmdpYW4vTVxcbkNhcm9saW5pYW4vTVxcbkNhcm9seW4vTVxcbkNhcnBhdGhpYW4vU01cXG5DYXJwYXRoaWFucy9NXFxuQ2FycGVudGVyL01cXG5DYXJyL01cXG5DYXJyYW56YS9NXFxuQ2FycmllL1JNXFxuQ2Fycmllci9NXFxuQ2FycmlsbG8vTVxcbkNhcnJvbGwvTVxcbkNhcnNvbi9NXFxuQ2FydGVyL01cXG5DYXJ0ZXJzdmlsbGUvTVxcbkNhcnRlc2lhbi9NXFxuQ2FydGhhZ2UvTVxcbkNhcnRoYWdpbmlhbi9NU1xcbkNhcnRpZXIvTVxcbkNhcnR3cmlnaHQvTVxcbkNhcnVzby9NXFxuQ2FydmVyL01cXG5DYXJ5L01cXG5DYXNhYmxhbmNhL01cXG5DYXNhbHMvTVxcbkNhc2FuZHJhL01cXG5DYXNhbm92YS9TTVxcbkNhc2NhZGVzL01cXG5DYXNlL01cXG5DYXNleS9NXFxuQ2FzaC9NXFxuQ2FzaW8vTVxcbkNhc3Bhci9NXFxuQ2FzcGVyL01cXG5DYXNwaWFuL01cXG5DYXNzYW5kcmEvU01cXG5DYXNzYXR0L01cXG5DYXNzaWR5L01cXG5DYXNzaWUvTVxcbkNhc3Npb3BlaWEvTVxcbkNhc3NpdXMvTVxcbkNhc3RhbmVkYS9NXFxuQ2FzdGlsaWFuXFxuQ2FzdGlsbG8vTVxcbkNhc3RsZXJlYWdoL01cXG5DYXN0b3IvTVxcbkNhc3RyaWVzL01cXG5DYXN0cm8vTVxcbkNhdGFsYW4vU01cXG5DYXRhbGluYS9NXFxuQ2F0YWxvbmlhL01cXG5DYXRhd2JhL01cXG5DYXRlcnBpbGxhci9NXFxuQ2F0aGF5L01cXG5DYXRoZXIvTVxcbkNhdGhlcmluZS9NXFxuQ2F0aGxlZW4vTVxcbkNhdGhvbGljL01TXFxuQ2F0aG9saWNpc20vTVNcXG5DYXRocnluL01cXG5DYXRoeS9NXFxuQ2F0aWxpbmUvTVxcbkNhdG8vTVxcbkNhdHNraWxsL1NNXFxuQ2F0c2tpbGxzL01cXG5DYXR0L01cXG5DYXR1bGx1cy9NXFxuQ2F1Y2FzaWFuL01TXFxuQ2F1Y2Fzb2lkXFxuQ2F1Y2FzdXMvTVxcbkNhdWNoeS9NXFxuQ2F2ZW5kaXNoL01cXG5DYXZvdXIvTVxcbkNheHRvbi9NXFxuQ2F5ZW5uZS9NXFxuQ2F5bWFuL01cXG5DYXl1Z2EvU01cXG5DYXl1c2VcXG5DYlxcbkNkL01cXG5DZS9NXFxuQ2VhdXNlc2N1L01cXG5DZWJ1L01cXG5DZWJ1YW5vL01cXG5DZWNlbGlhL01cXG5DZWNpbC9NXFxuQ2VjaWxlL01cXG5DZWNpbGlhL01cXG5DZWNpbHkvTVxcbkNlZHJpYy9NXFxuQ2VsZXN0ZS9NXFxuQ2VsZ2VuZS9NXFxuQ2VsaWEvTVxcbkNlbGluYS9NXFxuQ2VsbGluaS9NXFxuQ2Vsc2l1cy9NXFxuQ2VsdC9TTVxcbkNlbHRpYy9TTVxcbkNlbm96b2ljL01cXG5DZW50YXVydXMvTVxcbkNlbnRpZ3JhZGVcXG5DZW50cmFsXFxuQ2VwaGVpZC9NXFxuQ2VwaGV1cy9NXFxuQ2VyYmVydXMvTVxcbkNlcmVua292L01cXG5DZXJlcy9NXFxuQ2VyZi9NXFxuQ2VydmFudGVzL01cXG5DZXNhci9NXFxuQ2VzYXJlYW4vTVxcbkNlc3NuYS9NXFxuQ2V0dXMvTVxcbkNleWxvbi9NXFxuQ2V5bG9uZXNlXFxuQ2V6YW5uZS9NXFxuQ2YvTVxcbkNoJ2luL01cXG5DaC9OXFxuQ2hhYmxpcy9NXFxuQ2hhZC9NXFxuQ2hhZGlhbi9NU1xcbkNoYWR3aWNrL01cXG5DaGFnYWxsL01cXG5DaGFpdGFueWEvTVxcbkNoYWl0aW4vTVxcbkNoYWxkZWFcXG5DaGFsZGVhbi9NXFxuQ2hhbGxlbmdlci9NXFxuQ2hhbG1lcnNcXG5DaGFtYmVybGFpbi9NXFxuQ2hhbWJlcnMvTVxcbkNoYW1iZXJzYnVyZy9NXFxuQ2hhbXBhaWduL01cXG5DaGFtcGxhaW4vTVxcbkNoYW1wb2xsaW9uL01cXG5DaGFuL01cXG5DaGFuY2UvTVxcbkNoYW5jZWxsb3JzdmlsbGUvTVxcbkNoYW5kaWdhcmgvTVxcbkNoYW5kbGVyL01cXG5DaGFuZG9uL01cXG5DaGFuZHJhL01cXG5DaGFuZHJhZ3VwdGEvTVxcbkNoYW5kcmFzZWtoYXIvTVxcbkNoYW5lbC9NXFxuQ2hhbmV5L01cXG5DaGFuZy9NXFxuQ2hhbmdjaHVuL01cXG5DaGFuZ3NoYS9NXFxuQ2hhbnRpbGx5L01cXG5DaGFwbGluL01cXG5DaGFwbGluZXNxdWVcXG5DaGFwbWFuL01cXG5DaGFwcGFxdWlkZGljay9NXFxuQ2hhcHVsdGVwZWMvTVxcbkNoYXJicmF5L01cXG5DaGFyZG9ubmF5L01cXG5DaGFyaXR5L01cXG5DaGFybGVtYWduZS9NXFxuQ2hhcmxlbmUvTVxcbkNoYXJsZXMvTVxcbkNoYXJsZXN0b24vTVNcXG5DaGFybGV5L01cXG5DaGFybGllL01cXG5DaGFybG90dGUvTVxcbkNoYXJsb3R0ZXN2aWxsZS9NXFxuQ2hhcmxvdHRldG93bi9NXFxuQ2hhcm1haW5lL01cXG5DaGFybWluL01cXG5DaGFyb2xhaXMvTVxcbkNoYXJvbi9NXFxuQ2hhcnRpc20vTVxcbkNoYXJ0cmVzL01cXG5DaGFyeWJkaXMvTVxcbkNoYXNlL01cXG5DaGFzaXR5L01cXG5DaGF0ZWF1YnJpYW5kL01cXG5DaGF0dGFob29jaGVlL01cXG5DaGF0dGFub29nYS9NXFxuQ2hhdHRlcmxleS9NXFxuQ2hhdHRlcnRvbi9NXFxuQ2hhdWNlci9NXFxuQ2hhdW5jZXkvTVxcbkNoYXV0YXVxdWEvTVxcbkNoYXZlei9NXFxuQ2hheWVmc2t5L01cXG5DaGUvTVxcbkNoZWNoZW4vTVxcbkNoZWNobnlhL01cXG5DaGVkZGFyL01cXG5DaGVlci9NXFxuQ2hlZXJpb3MvTVxcbkNoZWV0b3MvTVxcbkNoZWV2ZXIvTVxcbkNoZWtob3YvTVxcbkNoZWtob3ZpYW5cXG5DaGVsc2VhL01cXG5DaGVseWFiaW5zay9NXFxuQ2hlbi9NXFxuQ2hlbmV5L01cXG5DaGVuZ2R1L01cXG5DaGVubmFpL01cXG5DaGVvcHMvTVxcbkNoZXJpL01cXG5DaGVyaWUvTVxcbkNoZXJuZW5rby9NXFxuQ2hlcm5vYnlsL01cXG5DaGVybm9teXJkaW4vTVxcbkNoZXJva2VlL01TXFxuQ2hlcnJ5L01cXG5DaGVyeWwvTVxcbkNoZXNhcGVha2UvTVxcbkNoZXNoaXJlL01cXG5DaGVzdGVyL01cXG5DaGVzdGVyZmllbGQvTVxcbkNoZXN0ZXJ0b24vTVxcbkNoZXZhbGllci9NXFxuQ2hldmlvdC9NXFxuQ2hldnJvbGV0L01cXG5DaGV2cm9uL01cXG5DaGV2eS9NXFxuQ2hleWVubmUvU01cXG5DaGkvTVxcbkNoaWFudGkvTVNcXG5DaGliYS9NXFxuQ2hpYmNoYS9NXFxuQ2hpY2Fnby9NXFxuQ2hpY2Fnb2FuL01cXG5DaGljYW5hL01cXG5DaGljYW5vL01cXG5DaGlja2FzYXcvTVNcXG5DaGljbGV0cy9NXFxuQ2hpY28vTVxcbkNoaWh1YWh1YS9NU1xcbkNoaWxlL01cXG5DaGlsZWFuL01TXFxuQ2hpbWJvcmF6by9NXFxuQ2hpbWVyYS9NU1xcbkNoaW11L01cXG5DaGluL01cXG5DaGluYS9NXFxuQ2hpbmF0b3duL01cXG5DaGluZXNlL01cXG5DaGlub29rL01TXFxuQ2hpcGV3eWFuL01cXG5DaGlwcGVuZGFsZS9NXFxuQ2hpcHBld2EvU01cXG5DaGlxdWl0YS9NXFxuQ2hpcmljby9NXFxuQ2hpc2hvbG0vTVxcbkNoaXNpbmF1L01cXG5DaGl0dGFnb25nL01cXG5DaGl2YXMvTVxcbkNobG9lL01cXG5DaG9jdGF3L1NNXFxuQ2hvbXNreS9NXFxuQ2hvbmdxaW5nL01cXG5DaG9waW4vTVxcbkNob3ByYS9NXFxuQ2hvdS9NXFxuQ2hyZXRpZW4vTVxcbkNocmlzL01cXG5DaHJpc3QvTVNcXG5DaHJpc3RhL01cXG5DaHJpc3RjaHVyY2gvTVxcbkNocmlzdGVuZG9tL01TXFxuQ2hyaXN0ZW5zZW4vTVxcbkNocmlzdGkvTVxcbkNocmlzdGlhbi9TTVxcbkNocmlzdGlhbml0eS9TTVxcbkNocmlzdGlhbml6ZVxcbkNocmlzdGllL01cXG5DaHJpc3RpbmEvTVxcbkNocmlzdGluZS9NXFxuQ2hyaXN0bGlrZVxcbkNocmlzdG1hcy9NU1xcbkNocmlzdG1hc3RpZGUvTVNcXG5DaHJpc3RtYXN0aW1lL01TXFxuQ2hyaXN0b3Blci9NXFxuQ2hyaXN0b3BoZXIvTVxcbkNocm9tZWJvb2svTVNcXG5DaHJvbmljbGVzXFxuQ2hyeXNsZXIvTVxcbkNocnlzb3N0b20vTVxcbkNocnlzdGFsL01cXG5DaHVjay9NXFxuQ2h1a2NoaS9NXFxuQ2h1bWFzaC9NXFxuQ2h1bmcvTVxcbkNodXJjaC9NXFxuQ2h1cmNoaWxsL01cXG5DaHVycmlndWVyYS9NXFxuQ2h1dmFzaC9NXFxuQ2kvTVxcbkNpY2Vyby9NXFxuQ2lkL01cXG5DaW1hYnVlL01cXG5DaW5jaW5uYXRpL01cXG5DaW5kZXJlbGxhL01TXFxuQ2luZHkvTVxcbkNpbmVtYVNjb3BlL01cXG5DaW5lcmFtYS9NXFxuQ2lwcm8vTVxcbkNpcmNlL01cXG5DaXNjby9NXFxuQ2l0aWJhbmsvTVxcbkNpdGlncm91cC9NXFxuQ2l0cm9lbi9NXFxuQ2wvTVZcXG5DbGFpYm9ybmUvTVxcbkNsYWlyL01cXG5DbGFpcmUvTVxcbkNsYWlyb2wvTVxcbkNsYW5jeS9NXFxuQ2xhcGV5cm9uL01cXG5DbGFwdG9uL01cXG5DbGFyYS9NXFxuQ2xhcmUvTVxcbkNsYXJlbmNlL01cXG5DbGFyZW5kb24vTVxcbkNsYXJpY2UvTVxcbkNsYXJpc3NhL01cXG5DbGFyay9NXFxuQ2xhcmtlL01cXG5DbGFya3N2aWxsZS9NXFxuQ2xhdWRlL01cXG5DbGF1ZGV0dGUvTVxcbkNsYXVkaWEvTVxcbkNsYXVkaW5lL01cXG5DbGF1ZGlvL01cXG5DbGF1ZGl1cy9NXFxuQ2xhdXMvTVxcbkNsYXVzZXdpdHovTVxcbkNsYXVzaXVzL01cXG5DbGF5L01cXG5DbGF5dG9uL01cXG5DbGVhcmFzaWwvTVxcbkNsZW0vWE1cXG5DbGVtZW5jZWF1L01cXG5DbGVtZW5zL01cXG5DbGVtZW50L01TXFxuQ2xlbWVudGluZS9NXFxuQ2xlbWVudHMvTVxcbkNsZW1vbnMvTVxcbkNsZW1zb24vTVxcbkNsZW8vTVxcbkNsZW9wYXRyYS9NXFxuQ2xldmVsYW5kL01cXG5DbGlidXJuL01cXG5DbGlmZi9NXFxuQ2xpZmZvcmQvTVxcbkNsaWZ0b24vTVxcbkNsaW5lL01cXG5DbGludC9NXFxuQ2xpbnRvbi9NXFxuQ2xpby9NXFxuQ2xpdmUvTVxcbkNsb2p1cmUvTVxcbkNsb3JldHMvTVxcbkNsb3JveC9NXFxuQ2xvc3VyZS9NXFxuQ2xvdGhvL01cXG5DbG91c2VhdS9NXFxuQ2xvdmlzL01cXG5DbHlkZS9NXFxuQ2x5ZGVzZGFsZS9NXFxuQ2x5dGVtbmVzdHJhL01cXG5DbS9NXFxuQ21kclxcbkNvL01cXG5Db2JhaW4vTVxcbkNvYmIvTVxcbkNvY2hhYmFtYmEvTVxcbkNvY2hpbi9NXFxuQ29jaGlzZS9NXFxuQ29jaHJhbi9NXFxuQ29ja25leS9NXFxuQ29jdGVhdS9NXFxuQ29kXFxuQ29keS9NXFxuQ29mZmV5L01cXG5Db2duYWMvTVxcbkNvaGFuL01cXG5Db2hlbi9NXFxuQ29pbWJhdG9yZS9NXFxuQ29pbnRyZWF1L01cXG5Db2tlL1NNXFxuQ29sL01cXG5Db2xiZXJ0L01cXG5Db2xieS9NXFxuQ29sZS9NXFxuQ29sZWVuL01cXG5Db2xlbWFuL01cXG5Db2xlcmlkZ2UvTVxcbkNvbGV0dGUvTVxcbkNvbGZheC9NXFxuQ29sZ2F0ZS9NXFxuQ29saW4vTVxcbkNvbGxlZW4vTVxcbkNvbGxpZXIvTVxcbkNvbGxpbi9TTVxcbkNvbGxpbnMvTVxcbkNvbG9cXG5Db2xvZ25lL01cXG5Db2xvbWJpYS9NXFxuQ29sb21iaWFuL01TXFxuQ29sb21iby9NXFxuQ29sb24vTVxcbkNvbG9yYWRhbi9TTVxcbkNvbG9yYWRvL01cXG5Db2xvcmFkb2FuXFxuQ29sb3NzZXVtL01cXG5Db2x0L01cXG5Db2x0cmFuZS9NXFxuQ29sdW1iaWEvTVxcbkNvbHVtYmluZS9NXFxuQ29sdW1idXMvTVxcbkNvbVxcbkNvbWFuY2hlL01TXFxuQ29tYnMvTVxcbkNvbWRyXFxuQ29taW50ZXJuL01cXG5Db21tYW5kbWVudFxcbkNvbW1vbnMvTVxcbkNvbW1vbndlYWx0aFxcbkNvbW11bmlvbi9TTVxcbkNvbW11bmlzbVxcbkNvbW11bmlzdC9TTVxcbkNvbW8vTVxcbkNvbW9yYW5cXG5Db21vcm9zL01cXG5Db21wYXEvTVxcbkNvbXB0b24vTVxcbkNvbXB1U2VydmUvTVxcbkNvbXRlL01cXG5Db25ha3J5L01cXG5Db25hbi9NXFxuQ29uY2VwY2lvbi9NXFxuQ29uY2V0dGEvTVxcbkNvbmNvcmQvU01cXG5Db25jb3JkZS9NXFxuQ29uZGlsbGFjL01cXG5Db25kb3JjZXQvTVxcbkNvbmVzdG9nYS9NXFxuQ29uZmVkZXJhY3kvTVxcbkNvbmZlZGVyYXRlL01TXFxuQ29uZnVjaWFuL1NNXFxuQ29uZnVjaWFuaXNtL01TXFxuQ29uZnVjaXVzL01cXG5Db25nL01cXG5Db25nby9NXFxuQ29uZ29sZXNlL01cXG5Db25ncmVnYXRpb25hbFxcbkNvbmdyZWdhdGlvbmFsaXN0L01TXFxuQ29uZ3Jlc3MvTVNcXG5Db25ncmVzc2lvbmFsXFxuQ29uZ3JldmUvTVxcbkNvbmxleS9NXFxuQ29ubi9NUlxcbkNvbm5lY3RpY3V0L01cXG5Db25uZWxsc3ZpbGxlL01cXG5Db25uZW1hcmEvTVxcbkNvbm5lci9NXFxuQ29ubmVyeS9NXFxuQ29ubmllL01cXG5Db25ub2xseS9NXFxuQ29ubm9ycy9NXFxuQ29ucmFkL01cXG5Db25yYWlsL01cXG5Db25yb2UvTVxcbkNvbnNlcnZhdGl2ZVxcbkNvbnN0YWJsZS9NXFxuQ29uc3RhbmNlL01cXG5Db25zdGFudGluZS9NXFxuQ29uc3RhbnRpbm9wbGUvTVxcbkNvbnN0aXR1dGlvblxcbkNvbnN1ZWxvL01cXG5Db250aW5lbnQvTVxcbkNvbnRpbmVudGFsL01cXG5Db250cmVyYXMvTVxcbkNvbndheS9NXFxuQ29vay9NXFxuQ29va2UvTVxcbkNvb2xleS9NXFxuQ29vbGlkZ2UvTVxcbkNvb3Blci9NXFxuQ29vcGVyc3Rvd24vTVxcbkNvb3JzL01cXG5Db3BhY2FiYW5hL01cXG5Db3BlbGFuZC9NXFxuQ29wZW5oYWdlbi9NXFxuQ29wZXJuaWNhbi9NXFxuQ29wZXJuaWN1cy9NXFxuQ29wbGFuZC9NXFxuQ29wbGV5L01cXG5Db3BwZXJmaWVsZC9NXFxuQ29wcGVydG9uZS9NXFxuQ29wcG9sYS9NXFxuQ29wdGljL01cXG5Db3JhL01cXG5Db3JkZWxpYS9NXFxuQ29yZGlsbGVyYXMvTVxcbkNvcmRvYmEvTVxcbkNvcmV5L01cXG5Db3JmdS9NXFxuQ29yaW5hL01cXG5Db3JpbmUvTVxcbkNvcmlubmUvTVxcbkNvcmludGgvTVxcbkNvcmludGhpYW4vTVNcXG5Db3JpbnRoaWFucy9NXFxuQ29yaW9sYW51cy9NXFxuQ29yaW9saXMvTVxcbkNvcmtcXG5Db3JsZW9uZS9NXFxuQ29ybWFjay9NXFxuQ29ybmVpbGxlL01cXG5Db3JuZWxpYS9NXFxuQ29ybmVsaXVzL01cXG5Db3JuZWxsL01cXG5Db3JuaW5nL01cXG5Db3JuaXNoL01TXFxuQ29ybndhbGwvTVxcbkNvcm53YWxsaXMvTVxcbkNvcm9uYWRvL01cXG5Db3JvdC9NXFxuQ29ycFxcbkNvcnJlZ2dpby9NXFxuQ29ycmluZS9NXFxuQ29yc2ljYS9NXFxuQ29yc2ljYW4vTVxcbkNvcnRlcy9NU1xcbkNvcnRsYW5kL01cXG5Db3J2YWxsaXMvTVxcbkNvcnZldHRlL01cXG5Db3J2dXMvTVxcbkNvcnkvTVxcbkNvc2J5L01cXG5Db3Ntb3NEQi9NXFxuQ29zc2Fjay9NXFxuQ29zdGNvL01cXG5Db3N0ZWxsby9NXFxuQ29zdG5lci9NXFxuQ290ZS9NXFxuQ290b25vdS9NXFxuQ290b3BheGkvTVxcbkNvdHN3b2xkL01cXG5Db3R0b24vTVxcbkNvdWxvbWIvTVxcbkNvdWx0ZXIvTVxcbkNvdXBlcmluL01cXG5Db3VyYmV0L01cXG5Db3VydG5leS9NXFxuQ291c3RlYXUvTVxcbkNvdmVudHJ5L1NNXFxuQ292aW5ndG9uL01cXG5Db3dhcmQvTVxcbkNvd2VsbC9NXFxuQ293bGV5L01cXG5Db3dwZXIvTVxcbkNveC9NXFxuQ295L01cXG5Db3lsZS9NXFxuQ296dW1lbC9NXFxuQ3BsXFxuQ3IvTVRcXG5DcmFiYmUvTVxcbkNyYWZ0L01cXG5DcmFpZy9NXFxuQ3JhbmFjaC9NXFxuQ3JhbmUvTVxcbkNyYW5tZXIvTVxcbkNyYXRlci9NXFxuQ3Jhd2ZvcmQvTVxcbkNyYXkvTVxcbkNyYXlvbGEvTVxcbkNyZWF0aW9uL01cXG5DcmVhdG9yL01cXG5DcmVjeS9NXFxuQ3JlZS9EU01cXG5DcmVlay9TTVxcbkNyZWlnaHRvbi9NXFxuQ3Jlb2xlL1NNXFxuQ3Jlb24vTVxcbkNyZXNzaWRhL01cXG5DcmVzdC9NXFxuQ3JldGFjZW91cy9NXFxuQ3JldGFuL1NNXFxuQ3JldGUvTVxcbkNyaWNodG9uL01cXG5Dcmljay9NXFxuQ3JpbWVhL01cXG5DcmltZWFuL01cXG5DcmlvbGxvL01cXG5DcmlzY28vTVxcbkNyaXN0aW5hL01cXG5Dcm9hdC9TTVxcbkNyb2F0aWEvTVxcbkNyb2F0aWFuL01TXFxuQ3JvY2UvTVxcbkNyb2NrZXR0L01cXG5Dcm9lc3VzL01cXG5Dcm9td2VsbC9NXFxuQ3JvbXdlbGxpYW4vTVxcbkNyb25pbi9NXFxuQ3JvbmtpdGUvTVxcbkNyb251cy9NXFxuQ3Jvb2tlcy9NXFxuQ3Jvc2J5L01cXG5Dcm9zcy9NXFxuQ3Jvdy9TTVxcbkNyb3dsZXkvTVxcbkNydWNpZml4aW9uL01TXFxuQ3J1aWtzaGFuay9NXFxuQ3J1aXNlL01cXG5DcnVzYWRlcydzXFxuQ3J1c29lL01cXG5DcnV4L01cXG5DcnV6L01cXG5DcnlwdG96b2ljL01cXG5DcnlzdGFsL01cXG5Dc29ua2EvTVxcbkN0XFxuQ3Rlc2lwaG9uL01cXG5DdGh1bGh1L01cXG5DdS9NXFxuQ3ViYS9NXFxuQ3ViYW4vU01cXG5DdWNodWxhaW4vTVxcbkN1aXNpbmFydC9NXFxuQ3VsYmVydHNvbi9NXFxuQ3VsbGVuL01cXG5DdW1iZXJsYW5kL01cXG5DdW1taW5ncy9NXFxuQ3VuYXJkL01cXG5DdW5uaW5naGFtL01cXG5DdXBpZC9NXFxuQ3VyYWNhby9NXFxuQ3VyaWUvTVxcbkN1cml0aWJhL01cXG5DdXJyaWVyL01cXG5DdXJyeS9STVxcbkN1cnQvTVxcbkN1cnRpcy9NXFxuQ3VzdGVyL01cXG5DdXZpZXIvTVxcbkN1emNvL01cXG5DeWJlbGUvTVxcbkN5Y2xhZGVzL01cXG5DeWNsb3Blcy9NXFxuQ3ljbG9wcy9NXFxuQ3lnbnVzL01cXG5DeW1iZWxpbmUvTVxcbkN5bnRoaWEvTVxcbkN5cHJpYW4vTVxcbkN5cHJpb3QvTVNcXG5DeXBydXMvTVxcbkN5cmFuby9NXFxuQ3lyaWwvTVxcbkN5cmlsbGljL01cXG5DeXJ1cy9NXFxuQ3plY2gvTVxcbkN6ZWNoaWEvTVxcbkN6ZWNob3Nsb3Zha1xcbkN6ZWNob3Nsb3Zha2lhL01cXG5DemVjaG9zbG92YWtpYW4vU01cXG5DemVjaHNcXG5DemVybnkvTVxcbkQvTVxcbkRBL01cXG5EQVJcXG5EQVQvTVxcbkRCTVMvTVxcbkRDL01cXG5ERC9NXFxuRERTL01cXG5ERFQvU1xcbkRFXFxuREVBXFxuREVDL1NEXFxuREhcXG5ESFNcXG5ESVxcbkRKXFxuRE1DQVxcbkRNRC9NXFxuRE1aXFxuRE5BL01cXG5ET0FcXG5ET0JcXG5ET0RcXG5ET0VcXG5ET1MvTVxcbkRPVFxcbkRQL1NNXFxuRFBUXFxuRFNUXFxuRFRQXFxuRFVJXFxuRFZEL1NcXG5EVlIvU01cXG5EV0lcXG5EYWNoYXUvTVxcbkRhY3Jvbi9TTVxcbkRhZGEvTVxcbkRhZGFpc20vTVxcbkRhZWRhbHVzL01cXG5EYWd1ZXJyZS9NXFxuRGFnd29vZC9NXFxuRGFob21leS9NXFxuRGFpbWxlci9NXFxuRGFpc3kvTVxcbkRha2FyL01cXG5EYWtvdGEvU01cXG5EYWtvdGFuL01cXG5EYWxhaVxcbkRhbGUvTVxcbkRhbGV5L01cXG5EYWxpL01cXG5EYWxpYW4vTVxcbkRhbGxhcy9NXFxuRGFsbWF0aWEvTVxcbkRhbG1hdGlhbi9TTVxcbkRhbHRvbi9NXFxuRGFtYXNjdXMvTVxcbkRhbWUvTU5cXG5EYW1pYW4vTVxcbkRhbWllbi9NXFxuRGFtaW9uL01cXG5EYW1vY2xlcy9NXFxuRGFtb24vTVxcbkRhbi9NXFxuRGFuYS9NXFxuRGFuYWUvTVxcbkRhbmJ1cnkvTVxcbkRhbmUvU01cXG5EYW5lbGF3L01cXG5EYW5nZXJmaWVsZC9NXFxuRGFuaWFsL01cXG5EYW5pZWwvU01cXG5EYW5pZWxsZS9NXFxuRGFuaWVscy9NXFxuRGFuaXNoL01cXG5EYW5uaWUvTVxcbkRhbm55L01cXG5EYW5vbmUvTVxcbkRhbnRlL01cXG5EYW50b24vTVxcbkRhbnViZS9NXFxuRGFudWJpYW4vTVxcbkRhbnZpbGxlL01cXG5EYXBobmUvTVxcbkRhcmJ5L01cXG5EYXJjeS9NXFxuRGFyZGFuZWxsZXMvTVxcbkRhcmUvTVxcbkRhcmVuL01cXG5EYXJmdXIvTVxcbkRhcmluL01cXG5EYXJpby9NXFxuRGFyaXVzL01cXG5EYXJqZWVsaW5nL01cXG5EYXJsYS9NXFxuRGFybGVuZS9NXFxuRGFybGluZy9NXFxuRGFybmVsbC9NXFxuRGFycmVsL01cXG5EYXJyZWxsL01cXG5EYXJyZW4vTVxcbkRhcnJpbi9NXFxuRGFycm93L01cXG5EYXJyeWwvTVxcbkRhcnRoL01cXG5EYXJ0bW9vci9NXFxuRGFydG1vdXRoL01cXG5EYXJ2b24vTVxcbkRhcndpbi9NXFxuRGFyd2luaWFuL01cXG5EYXJ3aW5pc20vU01cXG5EYXJ3aW5pc3RcXG5EYXJ5bC9NXFxuRGF0YW1hdGlvblxcbkRhdWdoZXJ0eS9NXFxuRGF1bWllci9NXFxuRGF2YW8vTVxcbkRhdmUvTVxcbkRhdmVucG9ydC9NXFxuRGF2aWQvTVNcXG5EYXZpZHNvbi9NXFxuRGF2aWVzL01cXG5EYXZpcy9NXFxuRGF2eS9TTVxcbkRhd2VzL01cXG5EYXdraW5zXFxuRGF3bi9NXFxuRGF3c29uL01cXG5EYXkvTVxcbkRheWFuXFxuRGF5dG9uL01cXG5EZUdlbmVyZXMvTVxcbkRlS2FsYi9NXFxuRGVhZGhlYWQvTVxcbkRlYW4vTVxcbkRlYW5hL01cXG5EZWFuZHJlL01cXG5EZWFubi9NXFxuRGVhbm5hL01cXG5EZWFubmUvTVxcbkRlYXRoL01cXG5EZWJiaWUvTVxcbkRlYmJ5L01cXG5EZWJpYW4vTVxcbkRlYm9yYS9NXFxuRGVib3JhaC9NXFxuRGVib3VpbGxldC9NXFxuRGVicmEvTVxcbkRlYnMvTVxcbkRlYnVzc3kvTVxcbkRlYy9NXFxuRGVjYWxvZ3VlL01cXG5EZWNhdHVyL01cXG5EZWNjYS9NXFxuRGVjY2FuL01cXG5EZWNlbWJlci9TTVxcbkRlY2tlci9NXFxuRGVkZWtpbmQvTVxcbkRlZS9NXFxuRGVlbmEvTVxcbkRlZXJlL01cXG5EZWZvZS9NXFxuRGVnYXMvTVxcbkRlaWRyZS9NXFxuRGVpbW9zL01cXG5EZWlyZHJlL01cXG5EZWl0eVxcbkRlamVzdXMvTVxcbkRlbC9NXFxuRGVsYWNyb2l4L01cXG5EZWxhY3J1ei9NXFxuRGVsYW5leS9NXFxuRGVsYW5vL01cXG5EZWxhd2FyZS9NU1xcbkRlbGF3YXJlYW4vU01cXG5EZWxiZXJ0L01cXG5EZWxlb24vTVxcbkRlbGdhZG8vTVxcbkRlbGhpL01cXG5EZWxpYS9NXFxuRGVsaWJlcy9NXFxuRGVsaWNpb3VzL01cXG5EZWxpbGFoL01cXG5EZWxpbGFoc1xcbkRlbGl1cy9NXFxuRGVsbC9NXFxuRGVsbGEvTVxcbkRlbG1hci9NXFxuRGVsbWFydmEvTVxcbkRlbG1lci9NXFxuRGVsbW9uaWNvL01cXG5EZWxvcmVzL01cXG5EZWxvcmlzL01cXG5EZWxwaGkvTVxcbkRlbHBoaWMvTVxcbkRlbHBoaW51cy9NXFxuRGVsdGEvTVxcbkRlbHRvbmEvTVxcbkRlbS9HXFxuRGVtYXZlbmQvTVxcbkRlbWVyb2wvTVxcbkRlbWV0ZXIvTVxcbkRlbWV0cml1cy9NXFxuRGVtaW5nL01cXG5EZW1vY3JhdC9TTVxcbkRlbW9jcmF0aWNcXG5EZW1vY3JpdHVzL01cXG5EZW1vc3RoZW5lcy9NXFxuRGVtcHNleS9NXFxuRGVuYS9NXFxuRGVuYWxpXFxuRGVuZWIvTVxcbkRlbmVib2xhL01cXG5EZW5nL01cXG5EZW5pcy9NXFxuRGVuaXNlL01cXG5EZW5tYXJrL01cXG5EZW5uaXMvTVxcbkRlbm55L01cXG5EZW50b24vTVxcbkRlbnZlci9NXFxuRGVvbi9NXFxuRGVwcC9NXFxuRGVyYnkvTVxcbkRlcmVrL01cXG5EZXJpY2svTVxcbkRlcm1vdC9NXFxuRGVycmljay9NXFxuRGVycmlkYS9NXFxuRGVzY2FydGVzL01cXG5EZXNkZW1vbmEvTVxcbkRlc2lyZWUvTVxcbkRlc21vbmQvTVxcbkRldHJvaXQvTVxcbkRldXRlcm9ub215L01cXG5EZXZhbmFnYXJpL01cXG5EZXZpL01cXG5EZXZpbi9NXFxuRGV2b24vTVxcbkRldm9uaWFuL01cXG5EZXdhci9NXFxuRGV3YXluZS9NXFxuRGV3ZXkvTVxcbkRld2l0dC9NXFxuRGV4ZWRyaW5lL01cXG5EZXh0ZXIvTVxcbkRoYWthL01cXG5EaGF1bGFnaXJpL01cXG5EaS9TTVxcbkRpQ2FwcmlvL01cXG5EaU1hZ2dpby9NXFxuRGlhZ2hpbGV2L01cXG5EaWFsL01cXG5EaWFuYS9NXFxuRGlhbmUvTVxcbkRpYW5uL01cXG5EaWFubmEvTVxcbkRpYW5uZS9NXFxuRGlhc1xcbkRpYXNwb3JhL01TXFxuRGljay9YTVxcbkRpY2tlbnMvTVxcbkRpY2tlbnNpYW5cXG5EaWNrZXJzb24vTVxcbkRpY2tpbnNvbi9NXFxuRGlja3Nvbi9NXFxuRGljdGFwaG9uZS9TTVxcbkRpZGVyb3QvTVxcbkRpZG8vTVxcbkRpZHJpa3Nvbi9NXFxuRGllZmVuYmFrZXIvTVxcbkRpZWdvL01cXG5EaWVtL01cXG5EaWV0cmljaC9NXFxuRGlqa3N0cmEvTVxcbkRpam9uL01cXG5EaWxiZXJ0L01TXFxuRGlsbGFyZC9NXFxuRGlsbGluZ2VyL01cXG5EaWxsb24vTVxcbkRpbmEvTVxcbkRpbmFoL01cXG5EaW5vL01cXG5EaW9jbGV0aWFuL01cXG5EaW9nZW5lcy9NXFxuRGlvbi9NXFxuRGlvbm5lL01cXG5EaW9ueXNpYW4vTVxcbkRpb255c3VzL01cXG5EaW9waGFudGluZS9NXFxuRGlvci9NXFxuRGlwcGVyL01cXG5EaXJcXG5EaXJhYy9NXFxuRGlyaWNobGV0L01cXG5EaXJrL01cXG5EaXMvTVxcbkRpc25leS9NXFxuRGlzbmV5bGFuZC9NXFxuRGlzcmFlbGkvTVxcbkRpdmluZS9NXFxuRGl3YWxpL01cXG5EaXgvTVxcbkRpeGllL01cXG5EaXhpZWNyYXQvTVxcbkRpeGllbGFuZC9TTVxcbkRpeG9uL01cXG5EamFuZ28vTVxcbkRqaWJvdXRpL01cXG5EbWl0cmkvTVxcbkRuZXByb3BldHJvdnNrL01cXG5Ebmllc3Rlci9NXFxuRG9iYmluL01cXG5Eb2Jlcm1hbi9NXFxuRG9icm8vTVxcbkRvY3RvclxcbkRvY3Rvcm93L01cXG5Eb2RnZS9NXFxuRG9kZ3Nvbi9NXFxuRG9kb21hL01cXG5Eb2Rzb24vTVxcbkRvZS9NXFxuRG9oYS9NXFxuRG9sYnkvTVxcbkRvbGUvTVxcbkRvbGxpZS9NXFxuRG9sbHkvTVxcbkRvbG9yZXMvTVxcbkRvbWVzZGF5L01cXG5Eb21pbmdvL01cXG5Eb21pbmd1ZXovTVxcbkRvbWluaWMvTVxcbkRvbWluaWNhL01cXG5Eb21pbmljYW4vTVNcXG5Eb21pbmljay9NXFxuRG9taW5pb25cXG5Eb21pbmlxdWUvTVxcbkRvbWl0aWFuL01cXG5Eb24vU01cXG5Eb25hL01cXG5Eb25haHVlL01cXG5Eb25hbGQvTVxcbkRvbmFsZHNvbi9NXFxuRG9uYXRlbGxvL01cXG5Eb25ldHNrL01cXG5Eb25pemV0dGkvTVxcbkRvbm4vTVJcXG5Eb25uYS9NXFxuRG9ubmUvTVxcbkRvbm5lbGwvTVxcbkRvbm5lci9NXFxuRG9ubmllL01cXG5Eb25ueS9NXFxuRG9ub3Zhbi9NXFxuRG9vbGV5L01cXG5Eb29saXR0bGUvTVxcbkRvb25lc2J1cnkvTVxcbkRvcHBsZXIvTVxcbkRvcmEvTVxcbkRvcmNhcy9NXFxuRG9yZWVuL01cXG5Eb3JpYW4vTVxcbkRvcmljL01cXG5Eb3Jpcy9NXFxuRG9yaXRvcy9NXFxuRG9yb3RoZWEvTVxcbkRvcm90aHkvTVxcbkRvcnNldC9NXFxuRG9yc2V5L01cXG5Eb3J0aHkvTVxcbkRvcnRtdW5kL01cXG5Eb3N0b2V2c2t5L01cXG5Eb3QvTVxcbkRvdGhhbi9NXFxuRG90c29uL01cXG5Eb3VhbGEvTVxcbkRvdWF5L01cXG5Eb3VibGVkYXkvTVxcbkRvdWcvTVxcbkRvdWdsYXMvTVxcbkRvdWdsYXNzL01cXG5Eb3Vyby9NXFxuRG92ZXIvTVxcbkRvdy9NXFxuRG93bnMvTVxcbkRvd255L01cXG5Eb3lsZS9NXFxuRHJcXG5EcmFjby9NXFxuRHJhY29uaWFuL01cXG5EcmFjdWxhL01cXG5EcmFrZS9NXFxuRHJhbWFtaW5lL1NNXFxuRHJhbWJ1aWUvTVxcbkRyYW5vL01cXG5EcmF2aWRpYW4vTVxcbkRyZWlzZXIvTVxcbkRyZXNkZW4vTVxcbkRyZXcvTVxcbkRyZXlmdXMvTVxcbkRyaXN0YW4vTVxcbkRyb3Bib3gvTVxcbkRydWRnZS9NXFxuRHJ1cGFsL01cXG5EcnlkZW4vTVxcbkRzY2h1YmJhL01cXG5EdVxcbkR1UG9udC9NXFxuRHVhbmUvTVxcbkR1YmFpL01cXG5EdWJjZWsvTVxcbkR1YmhlL01cXG5EdWJsaW4vTVxcbkR1YnJvdm5pay9NXFxuRHVidXF1ZS9NXFxuRHVjaGFtcC9NXFxuRHVkbGV5L01cXG5EdWZmeS9NXFxuRHVpc2J1cmcvTVxcbkR1a2UvTVxcbkR1bGxlcy9NXFxuRHVsdXRoL01cXG5EdW1hcy9NXFxuRHVtYmxlZG9yZS9NXFxuRHVtYm8vTVxcbkR1bmFudC9NXFxuRHVuYmFyL01cXG5EdW5jYW4vTVxcbkR1bmRlZVxcbkR1bmVkaW4vTVxcbkR1bmtpcmsvTVxcbkR1bmxhcC9NXFxuRHVubi9NXFxuRHVubmUvTVxcbkR1cmFjZWxsL01cXG5EdXJhbi9NXFxuRHVyYW50L01cXG5EdXJhbnRlL01cXG5EdXJiYW4vTVxcbkR1cmVyL01cXG5EdXJleC9NXFxuRHVyaGFtL01TXFxuRHVya2hlaW0vTVxcbkR1cm9jL01cXG5EdXJvY2hlci9NXFxuRHVzZS9NXFxuRHVzaGFuYmUvTVxcbkR1c3NlbGRvcmYvTVxcbkR1c3RidXN0ZXIvTVxcbkR1c3Rpbi9NXFxuRHVzdHkvTVxcbkR1dGNoL01cXG5EdXRjaG1hbi9NXFxuRHV0Y2htZW4vTVxcbkR1dGNod29tYW5cXG5EdXZhbGllci9NXFxuRHZpbmEvTVxcbkR2b3Jhay9NXFxuRHdheW5lL01cXG5Ed2lnaHQvTVxcbkR5L01cXG5EeWVyL01cXG5EeWxhbi9NXFxuRHluYW1vREIvTVxcbkR5c29uL01cXG5EemVyemhpbnNreS9NXFxuRHp1bmdhcmlhL01cXG5FL1NNXFxuRUNcXG5FQ0cvTVxcbkVDTUFTY3JpcHQvTVxcbkVEUC9NXFxuRURUXFxuRUVDL01cXG5FRUcvTVxcbkVFT1xcbkVFT0NcXG5FRkxcXG5FRlRcXG5FS0cvTVxcbkVMRi9NXFxuRU1cXG5FTVRcXG5FTkUvTVxcbkVPRVxcbkVQQS9NXFxuRVJcXG5FUkFcXG5FU0UvTVxcbkVTTFxcbkVTUC9NXFxuRVNQTi9NXFxuRVNSXFxuRVNUL01cXG5FVFxcbkVUQVxcbkVURFxcbkVVXFxuRVVMQS9TXFxuRWFraW5zL01cXG5FYXJoYXJ0L01cXG5FYXJsL01cXG5FYXJsZS9NXFxuRWFybGVuZS9NXFxuRWFybGluZS9NXFxuRWFybmVzdC9NXFxuRWFybmVzdGluZS9NXFxuRWFybmhhcmR0L01cXG5FYXJwL01cXG5FYXN0L1NaTVJcXG5FYXN0ZXIvTVxcbkVhc3Rlcm4vUlxcbkVhc3RtYW4vTVxcbkVhc3R3b29kL01cXG5FYXRvbi9NXFxuRWJlbi9NXFxuRWJlbmVlemVyL01cXG5FYmVydC9NXFxuRWJvbGEvTVxcbkVib25pY3MvTVxcbkVib255L01cXG5FYnJvL01cXG5FY2NsZXNpYXN0ZXMvTVxcbkVjby9NXFxuRWNzdGFzeVxcbkVjdWFkb3IvTVxcbkVjdWFkb3Jhbi9TTVxcbkVjdWFkb3JlYW5cXG5FY3VhZG9yaWFuL1NNXFxuRWQvTU5YXFxuRWRhbS9TTVxcbkVkZGEvTVxcbkVkZGllL01cXG5FZGRpbmd0b24vTVxcbkVkZHkvTVxcbkVkZW4vTVxcbkVkZ2FyL01cXG5FZGdhcmRvL01cXG5FZGluYnVyZ2gvTVxcbkVkaXNvbi9NXFxuRWRpdGgvTVxcbkVkbW9uZC9NXFxuRWRtb250b24vTVxcbkVkbXVuZC9NXFxuRWRuYS9NXFxuRWRzZWwvTVxcbkVkdWFyZG8vTVxcbkVkd2FyZC9TTVxcbkVkd2FyZGlhbi9NXFxuRWR3YXJkby9NXFxuRWR3YXJkcy9NXFxuRWR3aW4vTVxcbkVkd2luYS9NXFxuRWV5b3JlL01cXG5FZmZpZS9NXFxuRWZyYWluL01cXG5FZnJlbi9NXFxuRWdnby9NXFxuRWd5cHQvTVxcbkVneXB0aWFuL01TXFxuRWd5cHRvbG9neS9NXFxuRWhyZW5iZXJnL01cXG5FaHJsaWNoL01cXG5FaWNobWFubi9NXFxuRWlmZmVsL01cXG5FaWxlZW4vTVxcbkVpbnN0ZWluL01TXFxuRWlyZS9NXFxuRWlzZW5ob3dlci9NXFxuRWlzZW5zdGVpbi9NXFxuRWlzbmVyL01cXG5FbGFpbmUvTVxcbkVsYW0vTVxcbkVsYW5vci9NXFxuRWxhc3RpY3NlYXJjaC9NXFxuRWxhc3RvcGxhc3QvTVxcbkVsYmEvTVxcbkVsYmUvTVxcbkVsYmVydC9NXFxuRWxicnVzL01cXG5FbGRlcnNidXJnL01cXG5FbGRvbi9NXFxuRWxlYW5vci9NXFxuRWxlYXphci9NXFxuRWxlY3RyYS9NXFxuRWxlbmEvTVxcbkVsZ2FyL01cXG5FbGkvTVxcbkVsaWFzL01cXG5FbGlqYWgvTVxcbkVsaW5vci9NXFxuRWxpb3QvTVxcbkVsaXNhL01cXG5FbGlzYWJldGgvTVxcbkVsaXNlL01cXG5FbGlzZW8vTVxcbkVsaXNoYS9NXFxuRWxpemEvTVxcbkVsaXphYmV0aC9NXFxuRWxpemFiZXRoYW4vU01cXG5FbGl6YWJldGh0b3duL01cXG5FbGtoYXJ0L01cXG5FbGxhL01cXG5FbGxlbi9NXFxuRWxsZXNtZXJlL01cXG5FbGxpZS9NXFxuRWxsaW5ndG9uL01cXG5FbGxpb3QvTVxcbkVsbGlvdHQvTVxcbkVsbGlzL01cXG5FbGxpc29uL01cXG5FbG1hL01cXG5FbG1lci9NXFxuRWxtaXJhL01cXG5FbG1vL01cXG5FbG5hdGgvTVxcbkVsbm9yYS9NXFxuRWxvaGltL01cXG5FbG9pc2UvTVxcbkVsb3kvTVxcbkVscm95L01cXG5FbHNhL01cXG5FbHNpZS9NXFxuRWxzaW5vcmUvTVxcbkVsdGFuaW4vTVxcbkVsdG9uL01cXG5FbHVsL01cXG5FbHZhL01cXG5FbHZpYS9NXFxuRWx2aW4vTVxcbkVsdmlyYS9NXFxuRWx2aXMvTVxcbkVsd2F5L01cXG5FbHdvb2QvTVxcbkVseXJpYS9NXFxuRWx5c2VlL01cXG5FbHlzaWFuL01cXG5FbHlzaXVtL1NNXFxuRW1hY3MvTVxcbkVtYW51ZWwvTVxcbkVtZXJzb24vTVxcbkVtZXJ5L01cXG5FbWlsL01cXG5FbWlsZS9NXFxuRW1pbGlhL01cXG5FbWlsaW8vTVxcbkVtaWx5L01cXG5FbWluZW0vTVxcbkVtaW5lbmNlXFxuRW1tYS9NXFxuRW1tYW51ZWwvTVxcbkVtbWV0dC9NXFxuRW1teS9NXFxuRW1vcnkvTVxcbkVuY2FydGEvTVxcbkVuZHltaW9uL01cXG5FbmcvTVxcbkVuZ2Vscy9NXFxuRW5nbGFuZC9NXFxuRW5nbGlzaC9NUlNcXG5FbmdsaXNobWFuL01cXG5FbmdsaXNobWVuL01cXG5FbmdsaXNod29tYW4vTVxcbkVuZ2xpc2h3b21lbi9NXFxuRW5pZC9NXFxuRW5pZi9NXFxuRW5pd2V0b2svTVxcbkVua2lkdS9NXFxuRW5vY2gvTVxcbkVub3MvTVxcbkVucmljby9NXFxuRW5yaXF1ZS9NXFxuRW5yb24vTVxcbkVudGVycHJpc2UvTVxcbkVvY2VuZS9NXFxuRXBjb3QvTVxcbkVwaGVzaWFuL01TXFxuRXBoZXN1cy9NXFxuRXBocmFpbS9NXFxuRXBpY3RldHVzL01cXG5FcGljdXJlYW4vTVxcbkVwaWN1cnVzL01cXG5FcGltZXRoaXVzL01cXG5FcGlwaGFueS9TTVxcbkVwaXNjb3BhbFxcbkVwaXNjb3BhbGlhbi9NU1xcbkVwaXN0bGVcXG5FcHNvbS9NXFxuRXBzb24vTVxcbkVwc3RlaW4vTVxcbkVxdXVsZXVzL01cXG5Fci9NXFxuRXJhc211cy9NXFxuRXJhdG8vTVxcbkVyYXRvc3RoZW5lcy9NXFxuRXJlYnVzL01cXG5FcmVjdG9yL01cXG5FcmV3aG9uL01cXG5FcmhhcmQvTVxcbkVyaWMvTVxcbkVyaWNhL01cXG5FcmljaC9NXFxuRXJpY2svTVxcbkVyaWNrYS9NXFxuRXJpY2tzb24vTVxcbkVyaWRhbnVzL01cXG5FcmllL01cXG5FcmlrL01cXG5FcmlrYS9NXFxuRXJpbi9NXFxuRXJpcy9NU1xcbkVyaXRyZWEvTVxcbkVyaXRyZWFuL1NNXFxuRXJsYW5nL01cXG5Fcmxlbm1leWVyL01cXG5Fcm1hL01cXG5Fcm5hL01cXG5Fcm5lc3QvTVxcbkVybmVzdGluZS9NXFxuRXJuZXN0by9NXFxuRXJuaWUvTVxcbkVybnN0L01cXG5Fcm9zL01TXFxuRXJyb2wvTVxcbkVyc2UvTVxcbkVydkluL01cXG5Fcndpbi9NXFxuRXNhdS9NXFxuRXNjaGVyL01cXG5Fc2NoZXJpY2hpYS9NXFxuRXNjb25kaWRvXFxuRXNraW1vL01TXFxuRXNtZXJhbGRhL01cXG5Fc3BlcmFudG8vTVxcbkVzcGVyYW56YS9NXFxuRXNwaW5vemEvTVxcbkVzcS9NXFxuRXNxdWlyZS9NU1xcbkVzc2VuL01cXG5Fc3NlbmUvTVxcbkVzc2VxdWliby9NXFxuRXNzZXgvTVxcbkVzc2llL01cXG5Fc3RhYmxpc2htZW50XFxuRXN0ZWJhbi9NXFxuRXN0ZWxhL01cXG5Fc3RlbGxhL01cXG5Fc3RlbGxlL01cXG5Fc3Rlci9NXFxuRXN0ZXJoYXp5L01cXG5Fc3Rlcy9NXFxuRXN0aGVyL01cXG5Fc3RvbmlhL01cXG5Fc3Rvbmlhbi9TTVxcbkVzdHJhZGEvTVxcbkV0aGFuL01cXG5FdGhlbC9NXFxuRXRoZWxyZWQvTVxcbkV0aGVybmV0L01cXG5FdGhpb3BpYS9NXFxuRXRoaW9waWFuL1NNXFxuRXRuYS9NXFxuRXRvbi9NXFxuRXRydXJpYS9NXFxuRXRydXNjYW4vTVxcbkV0dGEvTVxcbkV1L01cXG5FdWNoYXJpc3QvTVNcXG5FdWNoYXJpc3RpY1xcbkV1Y2xpZC9NXFxuRXVnZW5lL01cXG5FdWdlbmlhL01cXG5FdWdlbmllL01cXG5FdWdlbmlvL01cXG5FdWxhL01cXG5FdWxlci9NXFxuRXVtZW5pZGVzL01cXG5FdW5pY2UvTVxcbkV1cGhyYXRlcy9NXFxuRXVyXFxuRXVyYXNpYS9NXFxuRXVyYXNpYW4vTVNcXG5FdXJpcGlkZXMvTVxcbkV1cm9kb2xsYXIvU01cXG5FdXJvcGEvTVxcbkV1cm9wZS9NXFxuRXVyb3BlYW4vTVNcXG5FdXJ5ZGljZS9NXFxuRXVzdGFjaGlhbi9NXFxuRXVzdGlzL01cXG5FdXRlcnBlL01cXG5FdmEvTVxcbkV2YW4vU01cXG5FdmFuZ2VsaWNhbFxcbkV2YW5nZWxpbmEvTVxcbkV2YW5nZWxpbmUvTVxcbkV2YW5nZWxpc3QvTVxcbkV2YW5zL01cXG5FdmFuc3ZpbGxlL01cXG5FdmUvTVxcbkV2ZWx5bi9NXFxuRXZlbmtpL01cXG5FdmVyUmVhZHkvTVxcbkV2ZXJlc3QvTVxcbkV2ZXJldHQvTVxcbkV2ZXJldHRlL01cXG5FdmVyZ2xhZGVzL01cXG5FdmVydC9NXFxuRXZpYW4vTVxcbkV2aXRhL01cXG5Fd2luZy9NXFxuRXhjYWxpYnVyL01cXG5FeGNlZHJpbi9NXFxuRXhjZWxsZW5jeS9TTVxcbkV4Y2hlcXVlclxcbkV4ZXJjeWNsZS9NXFxuRXhvY2V0L01cXG5FeG9kdXMvTVxcbkV4eG9uL01cXG5FeWNrL01cXG5FeXJlL01cXG5FeXNlbmNrL01cXG5FemVraWVsL01cXG5FenJhL01cXG5GL01EXFxuRkFBXFxuRkFRL1NNXFxuRkJJL01cXG5GQ0NcXG5GRFxcbkZEQVxcbkZESUMvTVxcbkZEUi9NXFxuRkhBL01cXG5GSUNBL01cXG5GSUZPXFxuRkxcXG5GTS9TTVxcbkZOTUEvTVxcbkZPRkxcXG5GT1JUUkFOL01cXG5GUE9cXG5GU0YvTVxcbkZTTElDXFxuRlRDXFxuRlVEL1NcXG5GV0RcXG5GV0lXXFxuRllcXG5GWUlcXG5GYWJlcmdlL01cXG5GYWJpYW4vTVNcXG5GYWNlYm9vay9NXFxuRmFlcm9lL01cXG5GYWZuaXIvTVxcbkZhZ2luL01cXG5GYWhkL01cXG5GYWhyZW5oZWl0L01cXG5GYWlyYmFua3MvTVxcbkZhaXJmaWVsZC9NXFxuRmFpcmhvcGUvTVxcbkZhaXNhbC9NXFxuRmFpc2FsYWJhZC9NXFxuRmFpdGgvTVxcbkZhamFyZG8vTVxcbkZhbGFzaGEvTVxcbkZhbGtsYW5kL1NNXFxuRmFsa2xhbmRzL01cXG5GYWxsb3BpYW4vTVxcbkZhbHN0YWZmL01cXG5GYWx3ZWxsL01cXG5GYW5uaWUvTVxcbkZhbm55L01cXG5GYXJhZGF5L01cXG5GYXJnby9NXFxuRmFybGV5L01cXG5GYXJtZXIvTVxcbkZhcm1pbmd0b24vTVxcbkZhcnJhZ3V0L01cXG5GYXJyYWtoYW4vTVxcbkZhcnJlbGwvTVxcbkZhcnJvdy9NXFxuRmFyc2kvTVxcbkZhc3NiaW5kZXIvTVxcbkZhdGFoL01cXG5GYXRlcy9NXFxuRmF0aGVyL1NNXFxuRmF0aW1hL01cXG5GYXRpbWlkL01cXG5GYXVsa25lci9NXFxuRmF1bGtuZXJpYW4vTVxcbkZhdW50bGVyb3kvTVxcbkZhdXN0L01cXG5GYXVzdGlhbi9NXFxuRmF1c3Rpbm8vTVxcbkZhdXN0dXMvTVxcbkZhd2tlcy9NXFxuRmF5L01cXG5GYXllL01cXG5GYXlldHRldmlsbGUvTVxcbkZlL01cXG5GZWIvTVxcbkZlYnJ1YXJ5L1NNXFxuRmVkL1NNXFxuRmVkRXgvTVxcbkZlZGVyYWwvTVNcXG5GZWRlcmFsaXN0L01cXG5GZWRlcmljby9NXFxuRmVkcy9NXFxuRmVsZWNpYS9NXFxuRmVsaWNlL01cXG5GZWxpY2lhL01cXG5GZWxpY2l0eS9NXFxuRmVsaXBlL01cXG5GZWxpeC9NXFxuRmVsbGluaS9NXFxuRmVuaWFuL01cXG5GZXJiZXIvTVxcbkZlcmRpbmFuZC9NXFxuRmVyZ3VzL01cXG5GZXJndXNvbi9NXFxuRmVybGluZ2hldHRpL01cXG5GZXJtYXQvTVxcbkZlcm1pL01cXG5GZXJuL01cXG5GZXJuYW5kZXovTVxcbkZlcm5hbmRvL01cXG5GZXJyYXJpL01cXG5GZXJyYXJvL01cXG5GZXJyZWxsL01cXG5GZXJyaXMvTVxcbkZleW5tYW4vTVxcbkZlei9NXFxuRmlhdC9NXFxuRmliZXJnbGFzL01cXG5GaWJvbmFjY2kvTVxcbkZpY2h0ZS9NXFxuRmlkZWwvTVxcbkZpZG8vTVxcbkZpZWxkaW5nL01cXG5GaWVsZHMvTVxcbkZpZ2Fyby9NXFxuRmlndWVyb2EvTVxcbkZpamkvTVxcbkZpamlhbi9NU1xcbkZpbGlwaW5vL01TXFxuRmlsbG1vcmUvTVxcbkZpbG9mYXgvTVxcbkZpbmNoL01cXG5GaW5sYW5kL01cXG5GaW5sYXkvTVxcbkZpbmxleS9NXFxuRmlubi9TTVxcbkZpbm5ib2dhZG90dGlyL01cXG5GaW5uZWdhbi9NXFxuRmlubmlzaC9NXFxuRmlvbmEvTVxcbkZpcmViYXNlL01cXG5GaXJlZm94L01cXG5GaXJlc3RvbmUvTVxcbkZpc2NoZXIvTVxcbkZpc2hlci9NXFxuRmlzay9NXFxuRml0Y2gvTVxcbkZpdGNoYnVyZy9NXFxuRml0emdlcmFsZC9NXFxuRml0enBhdHJpY2svTVxcbkZpdHpyb3kvTVxcbkZpemVhdS9NXFxuRmxhXFxuRmxhZ3N0YWZmL01cXG5GbGFuYWdhbi9NXFxuRmxhbmRlcnMvTVxcbkZsYXRoZWFkXFxuRmxhdHQvTVxcbkZsYXViZXJ0L01cXG5GbGVpc2NoZXIvTVxcbkZsZW1pbmcvTVxcbkZsZW1pc2gvTVxcbkZsZXRjaGVyL01cXG5GbGludC9NXFxuRmxpbnRzdG9uZXMvTVxcbkZsby9NXFxuRmxvcmEvTVxcbkZsb3JlbmNlL01cXG5GbG9yZW50aW5lL01cXG5GbG9yZXMvTVxcbkZsb3JpZGEvTVxcbkZsb3JpZGFuL01cXG5GbG9yaWRpYW4vU01cXG5GbG9yaW5lL01cXG5GbG9yc2hlaW0vTVxcbkZsb3J5L01cXG5GbG9zc2llL01cXG5GbG93ZXJzL01cXG5GbG95ZC9NXFxuRmx5bm4vTVxcbkZtL01cXG5Gb2NoL01cXG5Gb2trZXIvTVxcbkZvbGV5L01cXG5Gb2xnZXJzL01cXG5Gb2xzb20vTVxcbkZvbWFsaGF1dC9NXFxuRm9uZGEvTVxcbkZvb3NiYWxsL01cXG5Gb3JiZXMvTVxcbkZvcmQvTVxcbkZvcmVtYW4vTVxcbkZvcmVzdC9NUlxcbkZvcmVzdGVyL01cXG5Gb3JtaWNhL01TXFxuRm9ybW9zYS9NXFxuRm9ybW9zYW4vTVxcbkZvcnJlc3QvTVxcbkZvcnN0ZXIvTVxcbkZvcnRhbGV6YS9NXFxuRm9zc2UvTVxcbkZvc3Rlci9NXFxuRm90b21hdC9NXFxuRm91Y2F1bHQvTVxcbkZvdXJpZXIvTVxcbkZvdXJuZXlyb24vTVxcbkZvdXJ0aFxcbkZvd2xlci9NXFxuRm94L01TXFxuRnIvTURcXG5GcmFnb25hcmQvTVxcbkZyYW4vTVxcbkZyYW5jZS9TTVxcbkZyYW5jZXMvTVxcbkZyYW5jZXNjYS9NXFxuRnJhbmNpbmUvTVxcbkZyYW5jaXMvTVxcbkZyYW5jaXNjYS9NXFxuRnJhbmNpc2Nhbi9NU1xcbkZyYW5jaXNjby9NXFxuRnJhbmNrL01cXG5GcmFuY28vTVxcbkZyYW5jb2lzL01cXG5GcmFuY29pc2UvTVxcbkZyYW5jb3BoaWxlXFxuRnJhbmdsYWlzL01cXG5GcmFuay9TTVxcbkZyYW5rZWwvTVxcbkZyYW5rZW5zdGVpbi9NXFxuRnJhbmtmb3J0L01cXG5GcmFua2Z1cnQvTVJcXG5GcmFua2Z1cnRlci9NXFxuRnJhbmtpZS9NXFxuRnJhbmtpc2hcXG5GcmFua2xpbi9NXFxuRnJhbmtzL01cXG5GcmFubnkvTVxcbkZyYW56L01cXG5GcmFzZXIvTVxcbkZyYXUvTU5cXG5GcmF1bGVpblxcbkZyYXppZXIvTVxcbkZyZWQvTVxcbkZyZWRhL01cXG5GcmVkZGllL01cXG5GcmVkZHkvTVxcbkZyZWRlcmljL01cXG5GcmVkZXJpY2svTVxcbkZyZWRlcmlja3NidXJnL01cXG5GcmVkZXJpY3Rvbi9NXFxuRnJlZHJpYy9NXFxuRnJlZHJpY2svTVxcbkZyZWVtYW4vTVxcbkZyZWVtYXNvbi9TTVxcbkZyZWVtYXNvbnJ5L1NNXFxuRnJlZXRvd24vTVxcbkZyZWlkYS9NXFxuRnJlbW9udC9NXFxuRnJlbmNoL01TXFxuRnJlbmNobWFuL01cXG5GcmVuY2htZW4vTVxcbkZyZW5jaHdvbWFuL01cXG5GcmVuY2h3b21lbi9NXFxuRnJlb24vTVxcbkZyZXNuZWwvTVxcbkZyZXNuby9NXFxuRnJldWQvTVxcbkZyZXVkaWFuL01cXG5GcmV5L01cXG5GcmV5YS9NXFxuRnJpL01cXG5GcmlkYXkvU01cXG5GcmllZGEvTVxcbkZyaWVkYW4vTVxcbkZyaWVkbWFuL01cXG5GcmllZG1hbm4vTVxcbkZyaWVuZC9TTVxcbkZyaWdnYS9NXFxuRnJpZ2lkYWlyZS9NXFxuRnJpc2JlZS9NXFxuRnJpc2NvL01cXG5GcmlzaWFuL01TXFxuRnJpdG8vTVxcbkZyaXR6L01cXG5Gcm9iaXNoZXIvTVxcbkZyb2RvL01cXG5Gcm9pc3NhcnQvTVxcbkZyb21tL01cXG5Gcm9uZGUvTVxcbkZyb250ZW5hYy9NXFxuRnJvc3QvTVxcbkZyb3N0YmVsdC9NXFxuRnJ1bnplL01cXG5GcnkvTVxcbkZyeWUvTVxcbkZ1Y2hzL01cXG5GdWVudGVzL01cXG5GdWdnZXIvTVxcbkZ1amkvTVxcbkZ1amlhbi9NXFxuRnVqaXRzdS9NXFxuRnVqaXdhcmEvTVxcbkZ1aml5YW1hL01cXG5GdWt1b2thL01cXG5GdWt1eWFtYS9NXFxuRnVsYW5pL01cXG5GdWxicmlnaHQvTVxcbkZ1bGxlci9NXFxuRnVsbGVydG9uL01cXG5GdWx0b24vTVxcbkZ1bmFmdXRpL01cXG5GdW5keS9NXFxuRnVyaWVzL01cXG5GdXJtYW4vTVxcbkZ1cnR3YW5nbGVyL01cXG5GdXNodW4vTVxcbkZ1emhvdS9NXFxuRnV6emJ1c3Rlci9NXFxuRy9NTlJCXFxuR0FcXG5HQU9cXG5HQVRUL01cXG5HQi9NXFxuR0NDL01cXG5HRFAvTVxcbkdFL01cXG5HRURcXG5HSFEvTVxcbkdIelxcbkdJXFxuR0lGXFxuR0lHT1xcbkdNL01cXG5HTUFUXFxuR01PXFxuR01UL01cXG5HTlAvTVxcbkdOVS9NXFxuR09QL01cXG5HUC9NXFxuR1BBXFxuR1BPXFxuR1BTXFxuR1BVXFxuR1NBXFxuR1RFL01cXG5HVVxcbkdVSS9NXFxuR2EvTVxcbkdhYmxlL01cXG5HYWJvbi9NXFxuR2Fib25lc2UvTVxcbkdhYm9yb25lL01cXG5HYWJyaWVsL01cXG5HYWJyaWVsYS9NXFxuR2FicmllbGxlL01cXG5HYWNydXgvTVxcbkdhZHNkZW4vTVxcbkdhZWEvTVxcbkdhZWwvU01cXG5HYWVsaWMvTVxcbkdhZ2FyaW4vTVxcbkdhZ2UvTVxcbkdhaWEvTVxcbkdhaWwvTVxcbkdhaW1hbi9NXFxuR2FpbmVzL01cXG5HYWluZXN2aWxsZS9NXFxuR2FpbnNib3JvdWdoL01cXG5HYWxhaGFkL1NNXFxuR2FsYXBhZ29zL01cXG5HYWxhdGVhL01cXG5HYWxhdGlhL01cXG5HYWxhdGlhbnMvTVxcbkdhbGF4eVxcbkdhbGJyYWl0aC9NXFxuR2FsZS9NXFxuR2FsZW4vTVxcbkdhbGliaS9NXFxuR2FsaWxlYW4vU01cXG5HYWxpbGVlL01cXG5HYWxpbGVvL01cXG5HYWxsL01cXG5HYWxsYWdoZXIvTVxcbkdhbGxlZ29zL01cXG5HYWxsaWMvTVxcbkdhbGxpY2lzbS9TTVxcbkdhbGxvL01cXG5HYWxsb3dheS9NXFxuR2FsbHVwL01cXG5HYWxvaXMvTVxcbkdhbHN3b3J0aHkvTVxcbkdhbHZhbmkvTVxcbkdhbHZlc3Rvbi9NXFxuR2FtYVxcbkdhbWF5L01cXG5HYW1iaWEvTVxcbkdhbWJpYW4vU01cXG5HYW1ibGUvTVxcbkdhbW93L01cXG5HYW5kYWxmL01cXG5HYW5kaGkvTVxcbkdhbmRoaWFuL01cXG5HYW5lc2hhL01cXG5HYW5nZXMvTVxcbkdhbmd0b2svTVxcbkdhbnN1L01cXG5HYW50cnkvTVxcbkdhbnltZWRlL01cXG5HYXAvTVxcbkdhcmJvL01cXG5HYXJjaWEvTVxcbkdhcmRuZXIvTVxcbkdhcmV0aC9NXFxuR2FyZmllbGQvTVxcbkdhcmZ1bmtlbC9NXFxuR2FyZ2FudHVhL01cXG5HYXJpYmFsZGkvTVxcbkdhcmxhbmQvTVxcbkdhcm5lci9NXFxuR2FycmV0dC9NXFxuR2Fycmljay9NXFxuR2Fycmlzb24vTVxcbkdhcnJ5L01cXG5HYXJ0aC9NXFxuR2FydmV5L01cXG5HYXJ5L01cXG5HYXJ6YS9NXFxuR2FzY29ueS9NXFxuR2Fzc2VyL01cXG5HYXN0b25pYS9NXFxuR2FzdHJvZW50ZXJvbG9neVxcbkdhdGVzL01cXG5HYXRsaW5nL01cXG5HYXRvcmFkZS9NXFxuR2F0c2J5L01cXG5HYXR1bi9NXFxuR2F1Z3Vpbi9NXFxuR2F1bC9TTVxcbkdhdWxpc2hcXG5HYXVzcy9NXFxuR2F1c3NpYW4vTVxcbkdhdXRhbWEvTVxcbkdhdXRpZXIvTVxcbkdhdmluL01cXG5HYXdhaW4vTVxcbkdheS9NXFxuR2F5bGUvTVxcbkdhemEvTVxcbkdhemlhbnRlcC9NXFxuR2QvTVxcbkdkYW5zay9NXFxuR2UvTVxcbkdlZmZlbi9NXFxuR2VoZW5uYS9NXFxuR2VocmlnL01cXG5HZWlnZXIvTVxcbkdlbGJ2aWVoL01cXG5HZWxsZXIvTVxcbkdlbWluaS9NU1xcbkdlbi9NXFxuR2VuYS9NXFxuR2VuYXJvL01cXG5HZW5lL01cXG5HZW5lc2lzL01cXG5HZW5ldC9NXFxuR2VuZXZhL01cXG5HZW5ldmlldmUvTVxcbkdlbmdoaXMvTVxcbkdlbm9hL1NNXFxuR2VudG9vL01cXG5HZW50cnkvTVxcbkdlby9NXFxuR2VvZmZyZXkvTVxcbkdlb3JnZS9NU1xcbkdlb3JnZXRvd24vTVxcbkdlb3JnZXR0ZS9NXFxuR2VvcmdpYS9NXFxuR2VvcmdpYW4vTVNcXG5HZW9yZ2luYS9NXFxuR2VyL01cXG5HZXJhbGQvTVxcbkdlcmFsZGluZS9NXFxuR2VyYXJkL01cXG5HZXJhcmRvL01cXG5HZXJiZXIvTVxcbkdlcmUvTVxcbkdlcml0b2wvTVxcbkdlcm1hbi9NU1xcbkdlcm1hbmljL01cXG5HZXJtYW55L01cXG5HZXJvbmltby9NXFxuR2VycnkvTVxcbkdlcnNod2luL01cXG5HZXJ0cnVkZS9NXFxuR2VzdGFwby9TTVxcbkdldGhzZW1hbmUvTVxcbkdldHR5L01cXG5HZXR0eXNidXJnL01cXG5HZXd1cnp0cmFtaW5lci9NXFxuR2hhbmEvTVxcbkdoYW5haWFuXFxuR2hhdHMvTVxcbkdoYXp2YW5pZC9NXFxuR2hlbnQvTVxcbkdoaWJlbGxpbmUvTVxcbkdpYWNvbWV0dGkvTVxcbkdpYW5uaW5pL01cXG5HaWF1cXVlL01cXG5HaWJib24vTVxcbkdpYmJzL01cXG5HaWJyYWx0YXIvTVNcXG5HaWJzb24vTVxcbkdpZGUvTVxcbkdpZGVvbi9NXFxuR2llbGd1ZC9NXFxuR2llbmFoL01cXG5HaWwvTVxcbkdpbGEvTVxcbkdpbGJlcnQvTVxcbkdpbGJlcnRvL01cXG5HaWxjaHJpc3QvTVxcbkdpbGRhL01cXG5HaWxlYWQvTVxcbkdpbGVzL01cXG5HaWxnYW1lc2gvTVxcbkdpbGwvTVxcbkdpbGxlc3BpZS9NXFxuR2lsbGV0dGUvTVxcbkdpbGxpYW0vTVxcbkdpbGxpYW4vTVxcbkdpbGxpZ2FuL01cXG5HaWxtYW5cXG5HaWxtb3JlL01cXG5HaWxyb3kvTVxcbkdpbmEvTVxcbkdpbmdlci9NXFxuR2luZ3JpY2gvTVxcbkdpbm55L01cXG5HaW5vL01cXG5HaW5zYmVyZy9NXFxuR2luc2J1cmcvTVxcbkdpbnN1L01cXG5HaW9yZ2lvbmUvTVxcbkdpb3R0by9NXFxuR2lvdmFubmkvTVxcbkdpcmF1ZG91eC9NXFxuR2lzZWxsZS9NXFxuR2lzaC9NXFxuR2l0SHViL01cXG5HaXVsaWFuaS9NXFxuR2l1c2VwcGUvTVxcbkdpemEvTVxcbkdrXFxuR2xhZHN0b25lL01TXFxuR2xhZHlzL01cXG5HbGFzZXIvTVxcbkdsYXNnb3cvTVxcbkdsYXNzL01cXG5HbGFzdG9uYnVyeS9NXFxuR2xhc3dlZ2lhbi9TTVxcbkdsYXhvL01cXG5HbGVhc29uL01cXG5HbGVuL01cXG5HbGVuZGEvTVxcbkdsZW5kYWxlXFxuR2xlbmxpdmV0L01cXG5HbGVubi9NXFxuR2xlbm5hL01cXG5HbG9yaWEvTVxcbkdsb3VjZXN0ZXIvTVxcbkdsb3Zlci9NXFxuR25vc3RpYy9NXFxuR25vc3RpY2lzbS9NXFxuR251UEdcXG5Hb2EvTVxcbkdvYmkvTVxcbkdvZC9NXFxuR29kYXJkL01cXG5Hb2RkYXJkL01cXG5Hb2RlbC9NXFxuR29kaGVhZC9NXFxuR29kaXZhL01cXG5Hb2RvdC9NXFxuR29kc3BlZWQvU01cXG5Hb2R0aGFhYi9NXFxuR29kdW5vdi9NXFxuR29kemlsbGEvTVxcbkdvZWJiZWxzL01cXG5Hb2VyaW5nL01cXG5Hb2V0aGFscy9NXFxuR29ldGhlL01cXG5Hb2ZmL01cXG5Hb2cvTVxcbkdvZ29sL01cXG5Hb2lhbmlhL01cXG5Hb2xhbi9NXFxuR29sY29uZGEvTVxcbkdvbGRhL01cXG5Hb2xkYmVyZy9NXFxuR29sZGVuL01cXG5Hb2xkaWUvTVxcbkdvbGRpbG9ja3MvTVxcbkdvbGRpbmcvTVxcbkdvbGRtYW4vTVxcbkdvbGRzYm9yby9NXFxuR29sZHNtaXRoL01cXG5Hb2xkd2F0ZXIvTVxcbkdvbGR3eW4vTVxcbkdvbGdpL01cXG5Hb2xnb3RoYS9NXFxuR29saWF0aC9NXFxuR29tZXovTVxcbkdvbW9ycmFoL01cXG5Hb21wZXJzL01cXG5Hb211bGthL01cXG5Hb25kd2FuYWxhbmQvTVxcbkdvbnphbGVzL01cXG5Hb256YWxlei9NXFxuR29uemFsby9NXFxuR29vZC9NXFxuR29vZGFsbC9NXFxuR29vZGUvTVxcbkdvb2RtYW4vTVxcbkdvb2RyaWNoL01cXG5Hb29kd2lsbC9NXFxuR29vZHdpbi9NXFxuR29vZHllYXIvTVxcbkdvb2dsZS9NXFxuR29vbGFnb25nL01cXG5Hb3BoZXJcXG5Hb3JiYWNoZXYvTVxcbkdvcmRpYW4vTVxcbkdvcmRpbWVyL01cXG5Hb3Jkb24vTVxcbkdvcmUvTVxcbkdvcmVuL01cXG5Hb3JleS9NXFxuR29yZ2FzL01cXG5Hb3Jnb24vTVxcbkdvcmdvbnpvbGEvTVxcbkdvcmt5L01cXG5Hb3NwZWwvTVNcXG5Hb3RlYm9yZy9NXFxuR290aC9NXFxuR290aGFtL01cXG5Hb3RoaWMvTVNcXG5Hb3Roc1xcbkdvdWRhL1NNXFxuR291bGQvTVxcbkdvdW5vZC9NXFxuR292ZXJub3JcXG5Hb3lhL01cXG5Hci9CXFxuR3JhYmxlL01cXG5HcmFjY2h1cy9NXFxuR3JhY2UvTVxcbkdyYWNlbGFuZC9NXFxuR3JhY2llL01cXG5HcmFjaWVsYS9NXFxuR3JhZHkvTVxcbkdyYWZmaWFzL01cXG5HcmFmdG9uL01cXG5HcmFoYW0vTVxcbkdyYWhhbWUvTVxcbkdyYWlsL01cXG5HcmFtbXkvTVxcbkdyYW1waWFucy9NXFxuR3JhbmFkYS9NXFxuR3JhbnQvTVxcbkdyYXNzL01cXG5HcmF2ZXMvTVxcbkdyYXkvTVxcbkdyYXlzbGFrZS9NXFxuR3JlY2lhbi9NXFxuR3JlZWNlL01cXG5HcmVlay9TTVxcbkdyZWVsZXkvTVxcbkdyZWVuL1NNXFxuR3JlZW5lL01cXG5HcmVlbmxhbmQvTVxcbkdyZWVubGFuZGljXFxuR3JlZW5wZWFjZS9NXFxuR3JlZW5zYm9yby9NXFxuR3JlZW5zbGVldmVzL01cXG5HcmVlbnNwYW4vTVxcbkdyZWVudmlsbGUvTVxcbkdyZWVud2ljaC9NXFxuR3JlZXIvTVxcbkdyZWcvTVxcbkdyZWdnL01cXG5HcmVnb3JpYW4vTVxcbkdyZWdvcmlvL01cXG5HcmVnb3J5L01cXG5HcmVuYWRhL01cXG5HcmVuYWRpYW4vTVNcXG5HcmVuYWRpbmVzL01cXG5HcmVuZGVsL01cXG5HcmVub2JsZS9NXFxuR3Jlc2hhbS9NXFxuR3JldGEvTVxcbkdyZXRjaGVuL01cXG5HcmV0ZWwvTVxcbkdyZXR6a3kvTVxcbkdyZXkvTVxcbkdyaWVnL01cXG5HcmlmZmluL01cXG5HcmlmZml0aC9NXFxuR3JpbWVzL01cXG5HcmltbS9NXFxuR3JpbmNoL01cXG5HcmlzL01cXG5Hcm9teWtvL01cXG5Hcm9waXVzL01cXG5Hcm9zcy9NXFxuR3Jvc3ovTVxcbkdyb3RpdXMvTVxcbkdyb3Zlci9NXFxuR3Jvem55XFxuR3J1bW1hbi9NXFxuR3J1bmR5L01cXG5HcnVuZXdhbGQvTVxcbkdydXMvTVxcbkdydXllcmUvU01cXG5HdWFkYWxhamFyYS9NXFxuR3VhZGFsY2FuYWwvTVxcbkd1YWRhbHF1aXZpci9NXFxuR3VhZGFsdXBlL01cXG5HdWFkZWxvdXBlL01cXG5HdWFsbGF0aXJpL01cXG5HdWFtL01cXG5HdWFtYW5pYW5cXG5HdWFuZ2RvbmcvTVxcbkd1YW5nemhvdS9NXFxuR3VhbnRhbmFtby9NXFxuR3VhcmFuaS9NXFxuR3Vhcm5pZXJpL01cXG5HdWF0ZW1hbGEvTVxcbkd1YXRlbWFsYW4vTVNcXG5HdWF5YW1hL01cXG5HdWF5YXF1aWwvTVxcbkd1Y2NpL01cXG5HdWVscGgvTVxcbkd1ZXJuc2V5L01TXFxuR3VlcnJhL01cXG5HdWVycmVyby9NXFxuR3VldmFyYS9NXFxuR3VnZ2VuaGVpbS9NXFxuR3VpYW5hL01cXG5HdWlkb1xcbkd1aWxsZXJtby9NXFxuR3VpbmVhL01cXG5HdWluZWFuL01TXFxuR3VpbmV2ZXJlL01cXG5HdWlubmVzcy9NXFxuR3VpeWFuZy9NXFxuR3VpemhvdS9NXFxuR3Vpem90L01cXG5HdWphcmF0L01cXG5HdWphcmF0aS9NXFxuR3VqcmFud2FsYS9NXFxuR3VsZnBvcnQvTVxcbkd1bGxhaC9NXFxuR3VsbGl2ZXIvTVxcbkd1bWJlbC9NXFxuR3VudGhlci9NXFxuR3VvZmVuZy9NXFxuR3VwdGEvTVxcbkd1cmtoYS9NXFxuR3VzL01cXG5HdXN0YXYvTVxcbkd1c3Rhdm8vTVxcbkd1c3RhdnVzL01cXG5HdXRlbmJlcmcvTVxcbkd1dGhyaWUvTVxcbkd1dGllcnJlei9NXFxuR3V5L01cXG5HdXlhbmEvTVxcbkd1eWFuZXNlL01cXG5HdXptYW4vTVxcbkd3YWxpb3IvTVxcbkd3ZW4vTVxcbkd3ZW5kb2xpbmUvTVxcbkd3ZW5kb2x5bi9NXFxuR3d5bi9NXFxuR3lwc3kvU01cXG5IL01cXG5IQk8vTVxcbkhCYXNlL01cXG5IRERcXG5IRE1JXFxuSERUVlxcbkhGL01cXG5ISFNcXG5ISVxcbkhJVi9NXFxuSE1cXG5ITU8vTVxcbkhNU1xcbkhPVlxcbkhQL01cXG5IUFZcXG5IUS9NXFxuSFJcXG5IUkhcXG5IU1xcbkhTQkMvTVxcbkhTVFxcbkhUXFxuSFRNTC9NXFxuSFRUUFxcbkhVRC9NXFxuSGEvTVxcbkhhYXMvTVxcbkhhYmFra3VrL01cXG5IYWJlci9NXFxuSGFkYXIvTVxcbkhhZGVzL01cXG5IYWRvb3AvTVxcbkhhZHJpYW4vTVxcbkhhZml6L01cXG5IYWdhci9NXFxuSGFnZXJzdG93bi9NXFxuSGFnZ2FpL01cXG5IYWdpb2dyYXBoYS9NXFxuSGFndWUvTVxcbkhhaG4vTVxcbkhhaWRhL1NNXFxuSGFpZmEvTVxcbkhhaW5hbi9NXFxuSGFpcGhvbmcvTVxcbkhhaXRpL01cXG5IYWl0aWFuL01TXFxuSGFra2EvTVxcbkhha2x1eXQvTVxcbkhhbC9TTVxcbkhhbGRhbmUvTVxcbkhhbGUvTVxcbkhhbGVha2FsYS9NXFxuSGFsZXkvTVxcbkhhbGlmYXgvTVxcbkhhbGwvTVxcbkhhbGxleS9NXFxuSGFsbGlidXJ0b24vTVxcbkhhbGxpZS9NXFxuSGFsbG1hcmsvTVxcbkhhbGxvd2Vlbi9NU1xcbkhhbGxzdGF0dC9NXFxuSGFsb24vTVxcbkhhbHMvTVxcbkhhbHNleS9NXFxuSGFtL01cXG5IYW1hbi9NXFxuSGFtYnVyZy9NU1xcbkhhbWh1bmcvTVxcbkhhbWlsY2FyL01cXG5IYW1pbGwvTVxcbkhhbWlsdG9uL01cXG5IYW1pbHRvbmlhbi9NXFxuSGFtaXRpYy9NXFxuSGFtbGV0L01cXG5IYW1saW4vTVxcbkhhbW1hcnNram9sZC9NXFxuSGFtbWVyc3RlaW4vTVxcbkhhbW1ldHQvTVxcbkhhbW1vbmQvTVxcbkhhbW11cmFiaS9NXFxuSGFtcHNoaXJlL01cXG5IYW1wdG9uL01cXG5IYW1zdW4vTVxcbkhhbi9TTVxcbkhhbmNvY2svTVxcbkhhbmRlbC9NXFxuSGFuZHkvTVxcbkhhbmV5L01cXG5IYW5mb3JkL01cXG5IYW5ndWwvTVxcbkhhbmd6aG91L01cXG5IYW5rL01cXG5IYW5uYS9NXFxuSGFubmFoL01cXG5IYW5uaWJhbC9NXFxuSGFub2kvTVxcbkhhbm92ZXIvTVxcbkhhbm92ZXJpYW4vTVxcbkhhbnMvTU5cXG5IYW5zZWwvTVxcbkhhbnNlbi9NXFxuSGFuc29uL01cXG5IYW51a2FcXG5IYW51a2thaC9NXFxuSGFudWtrYWhzXFxuSGFwc2J1cmcvTVxcbkhhcmFyZS9NXFxuSGFyYmluL01cXG5IYXJkaW4vTVxcbkhhcmRpbmcvTVxcbkhhcmR5L01cXG5IYXJncmVhdmVzL01cXG5IYXJsYW4vTVxcbkhhcmxlbS9NXFxuSGFybGVxdWluL01cXG5IYXJsZXkvTVxcbkhhcmxpbmdlbi9NXFxuSGFybG93L01cXG5IYXJtb24vTVxcbkhhcm9sZC9NXFxuSGFycGVyL01cXG5IYXJweS9TTVxcbkhhcnJlbGwvTVxcbkhhcnJpZXQvTVxcbkhhcnJpZXR0L01cXG5IYXJyaW5ndG9uL01cXG5IYXJyaXMvTVxcbkhhcnJpc2J1cmcvTVxcbkhhcnJpc29uL01cXG5IYXJyaXNvbmJ1cmcvTVxcbkhhcnJvZHMvTVxcbkhhcnJ5L01cXG5IYXJ0L01cXG5IYXJ0ZS9NXFxuSGFydGZvcmQvTVxcbkhhcnRsaW5lL01cXG5IYXJ0bWFuL01cXG5IYXJ2YXJkL01cXG5IYXJ2ZXkvTVxcbkhhc2Jyby9NXFxuSGFzaWRpbS9NXFxuSGFza2VsbC9NXFxuSGFzdGluZ3MvTVxcbkhhdGZpZWxkL01cXG5IYXRoYXdheS9NXFxuSGF0c2hlcHV0L01cXG5IYXR0ZXJhcy9NXFxuSGF0dGllL01cXG5IYXR0aWVzYnVyZy9NXFxuSGF1cHRtYW5uL01cXG5IYXVzYS9NXFxuSGF1c2RvcmZmL01cXG5IYXZhbmEvTVNcXG5IYXZhcnRpL01cXG5IYXZlbC9NXFxuSGF2b2xpbmUvTVxcbkhhd1xcbkhhd2FpaS9NXFxuSGF3YWlpYW4vU01cXG5IYXdraW5nL01cXG5IYXdraW5zL01cXG5IYXdrc1xcbkhhd3Rob3JuZS9NXFxuSGF5L1NNXFxuSGF5ZGVuL01cXG5IYXlkbi9NXFxuSGF5ZWsvTVxcbkhheWVzL01cXG5IYXluZXMvTVxcbkhheXMvTVxcbkhheXdhcmQvTVxcbkhheXdvb2QvTVxcbkhheXdvcnRoL01cXG5IYXplbC9NXFxuSGF6bGV0b24vTVxcbkhhemxpdHQvTVxcbkhlL01cXG5IZWFkL01cXG5IZWFyc3QvTVxcbkhlYXRoL01SXFxuSGVhdGhlci9NXFxuSGVhdmlzaWRlL01cXG5IZWJcXG5IZWJlL01cXG5IZWJlaS9NXFxuSGViZXJ0L01cXG5IZWJyYWljL01cXG5IZWJyYWlzbS9TTVxcbkhlYnJldy9NU1xcbkhlYnJld3MvTVxcbkhlYnJpZGVzL01cXG5IZWNhdGUvTVxcbkhlY3Rvci9NXFxuSGVjdWJhL01cXG5IZWVwL01cXG5IZWZuZXIvTVxcbkhlZ2VsL01cXG5IZWdlbGlhbi9NXFxuSGVnaXJhL01cXG5IZWlkZWdnZXIvTVxcbkhlaWRlbGJlcmcvTVxcbkhlaWRpL01cXG5IZWlmZXR6L01cXG5IZWlsb25namlhbmcvTVxcbkhlaW1saWNoL01cXG5IZWluZS9NXFxuSGVpbmVrZW4vTVxcbkhlaW5sZWluL01cXG5IZWlucmljaC9NXFxuSGVpbnovTVxcbkhlaXNlbmJlcmcvTVxcbkhlaXNtYW4vTVxcbkhlbGVuL01cXG5IZWxlbmEvTVxcbkhlbGVuZS9NXFxuSGVsZ2EvTVxcbkhlbGljb2JhY3RlclxcbkhlbGljb24vTVxcbkhlbGlvcG9saXMvTVxcbkhlbGlvcy9NXFxuSGVsbGVuZS9TTVxcbkhlbGxlbmljL01cXG5IZWxsZW5pc20vTVNcXG5IZWxsZW5pc3RcXG5IZWxsZW5pc3RpYy9NXFxuSGVsbGVuaXphdGlvbi9NXFxuSGVsbGVuaXplL01cXG5IZWxsZXIvTVxcbkhlbGxlc3BvbnQvTVxcbkhlbGxtYW4vTVxcbkhlbG1ob2x0ei9NXFxuSGVsb2lzZS9NXFxuSGVsc2lua2kvTVxcbkhlbHZldGlhblxcbkhlbHZldGl1cy9NXFxuSGVtZXQvTVxcbkhlbWluZ3dheS9NXFxuSGVuYW4vTVxcbkhlbmNoL01cXG5IZW5kZXJzb24vTVxcbkhlbmRyaWNrL01TXFxuSGVuZHJpY2tzL01cXG5IZW5kcml4L01cXG5IZW5sZXkvTVxcbkhlbm5lc3N5L01cXG5IZW5yaS9NXFxuSGVucmlldHRhL01cXG5IZW5yaWsvTVxcbkhlbnJ5L01cXG5IZW5zbGV5L01cXG5IZW5zb24vTVxcbkhlcGJ1cm4vTVxcbkhlcGhhZXN0dXMvTVxcbkhlcHBsZXdoaXRlL01cXG5IZXJhL01cXG5IZXJhY2xlcy9NXFxuSGVyYWNsaXR1cy9NXFxuSGVyYWtsZXMvTVxcbkhlcmJhcnQvTVxcbkhlcmJlcnQvTVxcbkhlcmN1bGFuZXVtL01cXG5IZXJjdWxlYW5cXG5IZXJjdWxlcy9NXFxuSGVyZGVyL01cXG5IZXJlZm9yZC9TTVxcbkhlcmVyby9NXFxuSGVyaWJlcnRvL01cXG5IZXJtYW4vTVxcbkhlcm1hcGhyb2RpdHVzL01cXG5IZXJtZXMvTVxcbkhlcm1pbmlhL01cXG5IZXJtaXRhZ2UvTVxcbkhlcm1pdGUvTVxcbkhlcm1vc2lsbG8vTVxcbkhlcm5hbmRlei9NXFxuSGVyb2QvTVxcbkhlcm9kb3R1cy9NXFxuSGVyb2t1L01cXG5IZXJyL01HXFxuSGVycmVyYS9NXFxuSGVycmljay9NXFxuSGVycmluZy9NXFxuSGVyc2NoZWwvTVxcbkhlcnNleS9NXFxuSGVyc2hlbC9NXFxuSGVyc2hleS9NXFxuSGVydHovTVxcbkhlcnR6c3BydW5nL01cXG5IZXJ6ZWdvdmluYS9NXFxuSGVyemwvTVxcbkhlc2h2YW4vTVxcbkhlc2lvZC9NXFxuSGVzcGVyaWEvTVxcbkhlc3BlcnVzL01cXG5IZXNzL01cXG5IZXNzZS9NXFxuSGVzc2lhbi9NXFxuSGVzdGVyL01cXG5IZXN0b24vTVxcbkhldHRpZS9NXFxuSGV3aXR0L01cXG5IZXdsZXR0L01cXG5IZXllcmRhaGwvTVxcbkhleXdvb2QvTVxcbkhlemJvbGxhaC9NXFxuSGV6ZWtpYWgvTVxcbkhmL01cXG5IZy9NXFxuSGlhbGVhaC9NXFxuSGlhd2F0aGEvTVxcbkhpYmVybmlhL01cXG5IaWJlcm5pYW5cXG5IaWNrbWFuL01cXG5IaWNrb2svTVxcbkhpY2tvcnkvTVxcbkhpY2tzL01cXG5IaWVyb255bXVzL01cXG5IaWdhc2hpb3Nha2FcXG5IaWdnaW5zL01cXG5IaWdobGFuZGVyL1NNXFxuSGlnaGxhbmRzXFxuSGlnaG5lc3MvTVxcbkhpZ2h0c3Rvd24vTVxcbkhpbGFyaW8vTVxcbkhpbGFyeS9NXFxuSGlsYmVydC9NXFxuSGlsZGEvTVxcbkhpbGRlYnJhbmQvTVxcbkhpbGZpZ2VyL01cXG5IaWxsL01cXG5IaWxsYXJ5L01cXG5IaWxsZWwvTVxcbkhpbHRvbi9NXFxuSGltYWxheWEvU01cXG5IaW1hbGF5YW5cXG5IaW1hbGF5YXMvTVxcbkhpbW1sZXIvTVxcbkhpbmF5YW5hL01cXG5IaW5kZW1pdGgvTVxcbkhpbmRlbmJ1cmcvTVxcbkhpbmRpL01cXG5IaW5kdS9TTVxcbkhpbmR1aXNtL1NNXFxuSGluZHVzdGFuL01cXG5IaW5kdXN0YW5pL1NNXFxuSGluZXMvTVxcbkhpbmVzdmlsbGUvTVxcbkhpbnRvbi9NXFxuSGlwcGFyY2h1cy9NXFxuSGlwcG9jcmF0ZXMvTVxcbkhpcHBvY3JhdGljL01cXG5IaXJhbS9NXFxuSGlyb2J1bWkvTVxcbkhpcm9oaXRvL01cXG5IaXJvc2hpbWEvTVxcbkhpc3BhbmljL1NNXFxuSGlzcGFuaW9sYS9NXFxuSGlzcy9NXFxuSGl0YWNoaS9NXFxuSGl0Y2hjb2NrL01cXG5IaXRsZXIvTVNcXG5IaXR0aXRlL1NNXFxuSG1vbmcvTVxcbkhvL01cXG5Ib2JhcnQvTVxcbkhvYmJlcy9NXFxuSG9iYnMvTVxcbkhvY2tuZXkvTVxcbkhvZGdlL1NNXFxuSG9kZ2VzL01cXG5Ib2Rna2luL01cXG5Ib2ZmL01cXG5Ib2ZmYS9NXFxuSG9mZm1hbi9NXFxuSG9mc3RhZHRlci9NXFxuSG9nYW4vTVxcbkhvZ2FydGgvTVxcbkhvZ3dhcnRzL01cXG5Ib2hlbmxvaGUvTVxcbkhvaGVuc3RhdWZlbi9NXFxuSG9oZW56b2xsZXJuL01cXG5Ib2hob3QvTVxcbkhvaG9rYW0vTVxcbkhva2thaWRvL01cXG5Ib2t1c2FpL01cXG5Ib2xiZWluL01cXG5Ib2xjb21iL01cXG5Ib2xkZW4vTVxcbkhvbGRlci9NXFxuSG9saWRheS9NXFxuSG9saW5lc3NcXG5Ib2xsYW5kL1pTTVJcXG5Ib2xsYW5kZXIvTVxcbkhvbGxlcml0aC9NXFxuSG9sbGV5L01cXG5Ib2xsaWUvTVxcbkhvbGxpcy9NXFxuSG9sbG93YXkvTVxcbkhvbGx5L01cXG5Ib2xseXdvb2QvTVxcbkhvbG1hbi9NXFxuSG9sbWVzL01cXG5Ib2xvY2F1c3QvTVxcbkhvbG9jZW5lL01cXG5Ib2xzdC9NXFxuSG9sc3RlaW4vU01cXG5Ib2x0L01cXG5Ib21lci9NXFxuSG9tZXJpYy9NXFxuSG9uXFxuSG9uZGEvTVxcbkhvbmR1cmFuL01TXFxuSG9uZHVyYXMvTVxcbkhvbmVja2VyL01cXG5Ib25leXdlbGwvTVxcbkhvbmdcXG5Ib25pYXJhL01cXG5Ib25vbHVsdS9NXFxuSG9ub3JhYmxlXFxuSG9uc2h1L01cXG5Ib29kL01cXG5Ib29rZS9STVxcbkhvb2tlci9NXFxuSG9vcGVyL01cXG5Ib29zaWVyL01TXFxuSG9vdGVycy9NXFxuSG9vdmVyL01TXFxuSG9wZS9NXFxuSG9wZXdlbGwvTVxcbkhvcGkvU01cXG5Ib3BraW5zL01cXG5Ib3BwZXIvTVxcbkhvcmFjZS9NXFxuSG9yYWNpby9NXFxuSG9yYXRpby9NXFxuSG9ybWVsL01cXG5Ib3JtdXovTVxcbkhvcm4vTVxcbkhvcm5ibG93ZXIvTVxcbkhvcm5lL01cXG5Ib3Jvd2l0ei9NXFxuSG9ydGh5L01cXG5Ib3J0b24vTVxcbkhvcnVzL01cXG5Ib3NlYS9NXFxuSG9zdC9TTVxcbkhvdHBvaW50L01cXG5Ib3R0ZW50b3QvU01cXG5Ib3VkaW5pL01cXG5Ib3VtYS9NXFxuSG91c2UvTVxcbkhvdXNtYW4vTVxcbkhvdXN0b24vTVxcbkhvdXlobmhubS9NXFxuSG92aGFuZXNzL01cXG5Ib3dhcmQvTVxcbkhvd2UvTVxcbkhvd2VsbC9NU1xcbkhvd2VsbHMvTVxcbkhvd3JhaFxcbkhveWxlL01cXG5Icm90aGdhci9NXFxuSHRzXFxuSHVhbmcvTVxcbkh1YmJhcmQvTVxcbkh1YmJsZS9NXFxuSHViZWkvTVxcbkh1YmVyL01cXG5IdWJlcnQvTVxcbkh1Y2svTVxcbkh1ZGRlcnNmaWVsZFxcbkh1ZHNvbi9NXFxuSHVlcnRhL01cXG5IdWV5L01cXG5IdWZmL01cXG5IdWZmbWFuL01cXG5IdWdnaW5zL01cXG5IdWdoL01TXFxuSHVnaGVzL01cXG5IdWdvL01cXG5IdWd1ZW5vdC9NU1xcbkh1aS9NXFxuSHVpdHppbG9wb3RjaGxpL01cXG5IdWxsL01cXG5IdW1iZXJ0by9NXFxuSHVtYm9sZHQvTVxcbkh1bWUvTVxcbkh1bW1lbC9NXFxuSHVtbWVyL01cXG5IdW1waHJleS9TTVxcbkh1bXZlZS9NXFxuSHVuL1NNXFxuSHVuYW4vTVxcbkh1bmcvTVxcbkh1bmdhcmlhbi9TTVxcbkh1bmdhcnkvTVxcbkh1bnNwZWxsL01cXG5IdW50L01SXFxuSHVudGVyL01cXG5IdW50aW5ndG9uL01cXG5IdW50bGV5L01cXG5IdW50c3ZpbGxlL01cXG5IdXJkL01cXG5IdXJsZXkvTVxcbkh1cm9uL01cXG5IdXJzdC9NXFxuSHVzL01cXG5IdXNzZWluL01cXG5IdXNzZXJsL01cXG5IdXNzaXRlL01cXG5IdXN0b24vTVxcbkh1dGNoaW5zb24vTVxcbkh1dHRvbi9NXFxuSHV0dS9NXFxuSHV4bGV5L01cXG5IdXlnZW5zL01cXG5IeWFkZXMvTVxcbkh5ZGUvTVxcbkh5ZGVyYWJhZC9NXFxuSHlkcmEvTVxcbkh5bWVuL01cXG5IeXBlcmlvbi9NXFxuSHl1bmRhaS9NXFxuSHovTVxcbkknZFxcbkknbGxcXG5JJ21cXG5JJ3ZlXFxuSS9NXFxuSUFcXG5JQk0vTVxcbklDQk0vU01cXG5JQ0NcXG5JQ1VcXG5JRC9TTVxcbklERVxcbklFXFxuSUVEXFxuSUVFRVxcbklLRUEvTVxcbklMXFxuSU1GL01cXG5JTUhPXFxuSU1OU0hPXFxuSU1PXFxuSU5cXG5JTkcvTVxcbklOUklcXG5JTlNcXG5JT1UvTVxcbklQXFxuSVBBXFxuSVBPXFxuSVEvTVxcbklSQS9TTVxcbklSQ1xcbklSUy9NXFxuSVNCTlxcbklTSVNcXG5JU08vTVxcbklTUFxcbklTU1xcbklUXFxuSVVEXFxuSVYvU01cXG5JVkZcXG5JYVxcbklhY2NvY2EvTVxcbklhZ28vTVxcbklhbi9NXFxuSWFwZXR1cy9NXFxuSWJhZGFuL01cXG5JYmVyaWEvTVxcbkliZXJpYW4vTVxcbkliaXphL01cXG5JYmxpcy9NXFxuSWJvL01cXG5JYnNlbi9NXFxuSWNhaG4vTVxcbkljYXJ1cy9NXFxuSWNlXFxuSWNlbGFuZC9NUlpcXG5JY2VsYW5kZXIvTVxcbkljZWxhbmRpYy9NXFxuSWRhL01cXG5JZGFoby9TTVxcbklkYWhvYW4vTVNcXG5JZGFob2VzXFxuSWV5YXN1L01cXG5JZ25hY2lvL01cXG5JZ25hdGl1cy9NXFxuSWdvci9NXFxuSWd1YXNzdS9NXFxuSWpzc2VsbWVlci9NXFxuSWtlL01cXG5Ja2huYXRvbi9NXFxuSWxhL01cXG5JbGVuZS9NXFxuSWxpYWQvU01cXG5JbGxcXG5JbGxpbm9pcy9NXFxuSWxsaW5vaXNhbi9NU1xcbklsbHVtaW5hdGkvTVxcbklseXVzaGluL01cXG5JbWVsZGEvTVxcbkltaG90ZXAvTVxcbkltb2RpdW0vTVxcbkltb2dlbmUvTVxcbkltdXMvTVxcbkluL01cXG5JbmEvTVxcbkluY1xcbkluY2EvU01cXG5JbmNob24vTVxcbkluY29ycG9yYXRlZFxcbkluZFxcbkluZGVwZW5kZW5jZS9NXFxuSW5kaWEvTVxcbkluZGlhbi9NU1xcbkluZGlhbmEvTVxcbkluZGlhbmFuL1NNXFxuSW5kaWFuYXBvbGlzL01cXG5JbmRpYW5pYW5cXG5JbmRpZXMvTVxcbkluZGlvL01cXG5JbmRpcmEvTVxcbkluZG9jaGluYS9NXFxuSW5kb2NoaW5lc2UvTVxcbkluZG9uZXNpYS9NXFxuSW5kb25lc2lhbi9TTVxcbkluZG9yZS9NXFxuSW5kcmEvTVxcbkluZHVzL01cXG5JbmR5L1NNXFxuSW5lcy9NXFxuSW5lei9NXFxuSW5nZS9NXFxuSW5nbGV3b29kXFxuSW5ncmFtL01cXG5JbmdyZXMvTVxcbkluZ3JpZC9NXFxuSW5ub2NlbnQvTVxcbklubnNicnVja1xcbklub251L01cXG5JbnF1aXNpdGlvbi9NXFxuSW5zdFxcbkluc3RhZ3JhbS9NXFxuSW5zdGFtYXRpYy9NXFxuSW50ZWwvTVxcbkludGVsc2F0L01cXG5JbnRlcm5hdGlvbmFsZS9NXFxuSW50ZXJuZXQvU01cXG5JbnRlcnBvbC9NXFxuSW51aXQvTVNcXG5JbnVrdGl0dXQvTVxcbkludmFyL01cXG5Jby9NXFxuSW9uZXNjby9NXFxuSW9uaWFuL01TXFxuSW9uaWMvU01cXG5Jb3dhL1NNXFxuSW93YW4vTVNcXG5JcGhpZ2VuaWEvTVxcbklwc3dpY2hcXG5JcWFsdWl0L01cXG5JcWJhbC9NXFxuSXF1aXRvcy9NXFxuSXIvTVxcbklyYS9NXFxuSXJhbi9NXFxuSXJhbmlhbi9TTVxcbklyYXEvTVxcbklyYXFpL01TXFxuSXJlbGFuZC9NXFxuSXJlbmUvTVxcbklyaXMvTVxcbklyaXNoL01SXFxuSXJpc2htYW4vTVxcbklyaXNobWVuL01cXG5JcmlzaHdvbWFuL01cXG5JcmlzaHdvbWVuL01cXG5Jcmt1dHNrL01cXG5Jcm1hL01cXG5Jcm9xdW9pYW4vU01cXG5Jcm9xdW9pcy9NXFxuSXJyYXdhZGR5L01cXG5JcnRpc2gvTVxcbklydmluL01cXG5JcnZpbmUvTVxcbklydmluZy9NXFxuSXJ3aW4vTVxcbklzYWFjL01cXG5Jc2FiZWwvTVxcbklzYWJlbGEvTVxcbklzYWJlbGxhL01cXG5Jc2FiZWxsZS9NXFxuSXNhaWFoL01cXG5Jc2NhcmlvdC9NXFxuSXNmYWhhbi9NXFxuSXNoZXJ3b29kL01cXG5Jc2hpbS9NXFxuSXNobWFlbC9NXFxuSXNodGFyL01cXG5Jc2lhaC9NXFxuSXNpZHJvL01cXG5Jc2lzL01cXG5Jc2xhbS9NU1xcbklzbGFtYWJhZC9NXFxuSXNsYW1pYy9NXFxuSXNsYW1pc20vTVxcbklzbGFtaXN0L01cXG5Jc2xhbW9waG9iaWFcXG5Jc2xhbW9waG9iaWNcXG5Jc21hZWwvTVxcbklzbWFpbC9NXFxuSXNvbGRlL01cXG5Jc3BlbGwvTVxcbklzcmFlbC9TTVxcbklzcmFlbGkvU01cXG5Jc3JhZWxpdGUvTVxcbklzc2FjL01cXG5Jc3NhY2hhci9NXFxuSXN0YW5idWwvTVxcbklzdXp1L01cXG5JdFxcbkl0YWlwdS9NXFxuSXRhbFxcbkl0YWxpYW4vU01cXG5JdGFsaWFuYXRlXFxuSXRhbHkvTVxcbkl0YXNjYS9NXFxuSXRoYWNhL01cXG5JdGhhY2FuL01cXG5JdG8vTVxcbkl2YS9NXFxuSXZhbi9NXFxuSXZhbmhvZS9NXFxuSXZlcy9NXFxuSXZvcmlhblxcbkl2b3J5L01cXG5JdnkvTVxcbkl5YXIvTVxcbkl6YWFrL01cXG5JemFuYWdpL01cXG5JemFuYW1pL01cXG5JemhldnNrL01cXG5Jem1pci9NXFxuSXpvZC9NXFxuSXp2ZXN0aWEvTVxcbkovTURcXG5KQ1NcXG5KRFxcbkpGSy9NXFxuSlBcXG5KUEVHXFxuSlZcXG5KYWNrL01cXG5KYWNraWUvTVxcbkphY2tseW4vTVxcbkphY2tzb24vTVxcbkphY2tzb25pYW4vTVxcbkphY2tzb252aWxsZS9NXFxuSmFja3kvTVxcbkphY2x5bi9NXFxuSmFjb2IvU01cXG5KYWNvYmVhbi9NXFxuSmFjb2JpL01cXG5KYWNvYmluL01cXG5KYWNvYml0ZS9NXFxuSmFjb2JzL01cXG5KYWNvYnNvbi9NXFxuSmFjcXVhcmQvTVxcbkphY3F1ZWxpbmUvTVxcbkphY3F1ZWx5bi9NXFxuSmFjcXVlcy9NXFxuSmFjdXp6aS9NXFxuSmFnZ2VyL01cXG5KYWdpZWxsb24vTVxcbkphZ3Vhci9NXFxuSmFoYW5naXIvTVxcbkphaW1lL01cXG5KYWluL01cXG5KYWluaXNtL01cXG5KYWlwdXIvTVxcbkpha2FydGEvTVxcbkpha2UvTVxcbkphbWFhbC9NXFxuSmFtYWljYS9NXFxuSmFtYWljYW4vU01cXG5KYW1hbC9NXFxuSmFtYXIvTVxcbkphbWUvU01cXG5KYW1lbC9NXFxuSmFtZXMvTVxcbkphbWVzdG93bi9NXFxuSmFtaS9NXFxuSmFtaWUvTVxcbkphbi9NXFxuSmFuYS9NXFxuSmFuYWNlay9NXFxuSmFuZS9NXFxuSmFuZWxsL01cXG5KYW5lbGxlL01cXG5KYW5lc3ZpbGxlL01cXG5KYW5ldC9NXFxuSmFuZXR0ZS9NXFxuSmFuaWNlL01cXG5KYW5pZS9NXFxuSmFuaW5lL01cXG5KYW5pcy9NXFxuSmFuaXNzYXJ5L01cXG5KYW5qYXdlZWQvTVxcbkphbm5hL01cXG5KYW5uaWUvTVxcbkphbnNlbi9NXFxuSmFuc2VuaXN0L01cXG5KYW51YXJ5L1NNXFxuSmFudXMvTVxcbkphcC9TTVxcbkphcGFuL01cXG5KYXBhbmVzZS9NU1xcbkphcHVyYS9NXFxuSmFyZWQvTVxcbkphcmxzYmVyZy9NXFxuSmFycmVkL01cXG5KYXJyZXR0L01cXG5KYXJyb2QvTVxcbkphcnZpcy9NXFxuSmFzbWluZS9NXFxuSmFzb24vTVxcbkphc3Blci9NXFxuSmF0YWthL01cXG5KYXZhL1NNXFxuSmF2YVNjcmlwdC9NXFxuSmF2YW5lc2UvTVxcbkphdmllci9NXFxuSmF4YXJ0ZXMvTVxcbkpheS9NXFxuSmF5YXB1cmEvTVxcbkpheWF3YXJkZW5lL01cXG5KYXljZWUvTVNcXG5KYXljZWVzL01cXG5KYXluZS9NXFxuSmF5c29uL01cXG5KZWFuL01cXG5KZWFuZXR0ZS9NXFxuSmVhbmllL01cXG5KZWFuaW5lL01cXG5KZWFubmUvTVxcbkplYW5uZXR0ZS9NXFxuSmVhbm5pZS9NXFxuSmVhbm5pbmUvTVxcbkplZC9NXFxuSmVkaS9NXFxuSmVlcC9NXFxuSmVldmVzL01cXG5KZWZmL01cXG5KZWZmZXJleS9NXFxuSmVmZmVyc29uL01cXG5KZWZmZXJzb25pYW4vTVxcbkplZmZlcnkvTVxcbkplZmZyZXkvTVxcbkplZmZyeS9NXFxuSmVob3NoYXBoYXQvTVxcbkplaG92YWgvTVxcbkpla3lsbC9NXFxuSmVuaWZlci9NXFxuSmVua2lucy9NXFxuSmVubmEvTVxcbkplbm5lci9NXFxuSmVubmllL01cXG5KZW5uaWZlci9NXFxuSmVubmluZ3MvTVxcbkplbm55L01cXG5KZW5zZW4vTVxcbkplcGh0aGFoL01cXG5KZXJhbGQvTVxcbkplcmVtaWFoL01cXG5KZXJlbWlhaHNcXG5KZXJlbXkvTVxcbkplcmkvTVxcbkplcmljaG8vTVxcbkplcm1haW5lL01cXG5KZXJvYm9hbS9NXFxuSmVyb2xkL01cXG5KZXJvbWUvTVxcbkplcnJpL01cXG5KZXJyb2QvTVxcbkplcnJvbGQvTVxcbkplcnJ5L01cXG5KZXJzZXkvTVNcXG5KZXJ1c2FsZW0vTVxcbkplc3MvTVxcbkplc3NlL01cXG5KZXNzaWNhL01cXG5KZXNzaWUvTVxcbkplc3VpdC9NU1xcbkplc3VzL01cXG5KZXR3YXkvTVxcbkpldy9TTVxcbkpld2VsL01cXG5KZXdlbGwvTVxcbkpld2Vzcy9NU1xcbkpld2lzaC9QTVxcbkpld3J5L01cXG5KZXplYmVsL1NNXFxuSmlhbmdzdS9NXFxuSmlhbmd4aS9NXFxuSmlkZGEvTVxcbkppbGluL01cXG5KaWxsL01cXG5KaWxsaWFuL01cXG5KaW0vTVxcbkppbWVuZXovTVxcbkppbW1pZS9NXFxuSmltbXkvTVxcbkppbmFuL01cXG5KaW5uYWgvTVxcbkppbm55L01cXG5KaXZhcm8vTVxcbkpvL01cXG5Kb2FuL01cXG5Kb2Fubi9NXFxuSm9hbm5hL01cXG5Kb2FubmUvTVxcbkpvYXF1aW4vTVxcbkpvYi9TTVxcbkpvYnMvTVxcbkpvY2FzdGEvTVxcbkpvY2VseW4vTVxcbkpvY2svTVxcbkpvY2tleS9NXFxuSm9kaS9NXFxuSm9kaWUvTVxcbkpvZHkvTVxcbkpvZS9NXFxuSm9lbC9NXFxuSm9leS9NXFxuSm9namFrYXJ0YS9NXFxuSm9oYW5uL01cXG5Kb2hhbm5hL01cXG5Kb2hhbm5lcy9NXFxuSm9oYW5uZXNidXJnL01cXG5Kb2huL1NNXFxuSm9obmF0aGFuL01cXG5Kb2huYXRob24vTVxcbkpvaG5pZS9NXFxuSm9obm5pZS9NXFxuSm9obm55L01cXG5Kb2hucy9NXFxuSm9obnNvbi9NXFxuSm9obnN0b24vTVxcbkpvaG5zdG93bi9NXFxuSm9sZW5lL01cXG5Kb2xzb24vTVxcbkpvbi9NXFxuSm9uYWgvTVxcbkpvbmFoc1xcbkpvbmFzL01cXG5Kb25hdGhhbi9NXFxuSm9uYXRob24vTVxcbkpvbmVzL01cXG5Kb25lc2Jvcm8vTVxcbkpvbmkvTVxcbkpvbnNvbi9NXFxuSm9wbGluL01cXG5Kb3JkYW4vTVxcbkpvcmRhbmlhbi9NU1xcbkpvcmdlL01cXG5Kb3NlL01cXG5Kb3NlZi9NXFxuSm9zZWZhL01cXG5Kb3NlZmluYS9NXFxuSm9zZXBoL01cXG5Kb3NlcGhpbmUvTVxcbkpvc2VwaHNcXG5Kb3NlcGhzb24vTVxcbkpvc2VwaHVzL01cXG5Kb3NoL01cXG5Kb3NodWEvTVxcbkpvc2lhaC9NXFxuSm9zaWUvTVxcbkpvc3VlL01cXG5Kb3VsZS9NXFxuSm92ZS9NXFxuSm92aWFuL01cXG5Kb3kvTVxcbkpveWNlL01cXG5Kb3ljZWFuL01cXG5Kb3luZXIvTVxcbkpwblxcbkpyL01cXG5KdWFuL01cXG5KdWFuYS9NXFxuSnVhbml0YS9NXFxuSnVhcmV6L01cXG5KdWJhbC9NXFxuSnVkYWVvXFxuSnVkYWgvTVxcbkp1ZGFpY1xcbkp1ZGFpY2FsXFxuSnVkYWlzbS9NU1xcbkp1ZGFzL01TXFxuSnVkZC9NXFxuSnVkZS9NXFxuSnVkZWEvTVxcbkp1ZGdlc1xcbkp1ZGl0aC9NXFxuSnVkc29uL01cXG5KdWR5L01cXG5KdWdnZXJuYXV0L01cXG5KdWxcXG5KdWxlcy9NXFxuSnVsaWEvTVxcbkp1bGlhbi9NXFxuSnVsaWFuYS9NXFxuSnVsaWFubmUvTVxcbkp1bGllL01cXG5KdWxpZXQvTVxcbkp1bGlldHRlL01cXG5KdWxpby9NXFxuSnVsaXVzL01cXG5KdWxsaWFyZC9NXFxuSnVseS9TTVxcbkp1bi9NXFxuSnVuZS9TTVxcbkp1bmVhdS9NXFxuSnVuZy9NXFxuSnVuZ2ZyYXUvTVxcbkp1bmdpYW4vTVxcbkp1bmlvci9TTVxcbkp1bmtlci9TTVxcbkp1bm8vTVxcbkp1cGl0ZXIvTVxcbkp1cmFzc2ljL01cXG5KdXJ1YS9NXFxuSnVzdGljZS9NXFxuSnVzdGluL01cXG5KdXN0aW5lL01cXG5KdXN0aW5pYW4vTVxcbkp1dGxhbmQvTVxcbkp1dmVuYWwvTVxcbksvU01OR0pcXG5LQi9NXFxuS0NcXG5LRkMvTVxcbktHQi9NXFxuS0lBXFxuS0tLL01cXG5LTy9NXFxuS1BcXG5LU1xcbktZXFxuS2FhYmEvTVxcbkthYnVsL01cXG5LYWZrYS9NXFxuS2Fma2Flc3F1ZS9NXFxuS2Fnb3NoaW1hL01cXG5LYWhsdWEvTVxcbkthaHVsdWkvTVxcbkthaWZlbmcvTVxcbkthaWx1YS9NXFxuS2Fpc2VyL01TXFxuS2FpdGxpbi9NXFxuS2FsYWhhcmkvTVxcbkthbGFtYXpvby9NXFxuS2FsYXNobmlrb3YvTVxcbkthbGIvTVxcbkthbGV2YWxhL01cXG5LYWxnb29ybGllL01cXG5LYWxpL01cXG5LYWxteWsvTVxcbkthbWEvTVxcbkthbWNoYXRrYS9NXFxuS2FtZWhhbWVoYS9NXFxuS2FtcGFsYS9NXFxuS2FtcHVjaGVhL01cXG5LYW4vU01cXG5LYW5jaGVuanVuZ2EvTVxcbkthbmRhaGFyL01cXG5LYW5kaW5za3kvTVxcbkthbmUvTVxcbkthbmVvaGUvTVxcbkthbmtha2VlL01cXG5LYW5uYWRhL01cXG5LYW5vL01cXG5LYW5wdXIvTVxcbkthbnNhbi9NU1xcbkthbnNhcy9NXFxuS2FudC9NXFxuS2FudGlhbi9NXFxuS2FvaHNpdW5nL01cXG5LYXBvc2kvTVxcbkthcmEvTVxcbkthcmFjaGkvTVxcbkthcmFnYW5kYS9NXFxuS2FyYWtvcnVtL01cXG5LYXJhbWF6b3YvTVxcbkthcmVlbS9NXFxuS2FyZW4vTVxcbkthcmVuaW5hL01cXG5LYXJpL01cXG5LYXJpbi9NXFxuS2FyaW5hL01cXG5LYXJsL01cXG5LYXJsYS9NXFxuS2FybG9mZi9NXFxuS2Fyby9NXFxuS2Fyb2wvTVxcbkthcnJvby9NXFxuS2FyeW4vTVxcbkthc2FpL01cXG5LYXNleS9NXFxuS2FzaG1pci9TTVxcbkthc3Bhcm92L01cXG5LYXRlL01cXG5LYXRlbHluL01cXG5LYXRoYXJpbmUvTVxcbkthdGhlcmluZS9NXFxuS2F0aGVyeW4vTVxcbkthdGhpYXdhci9NXFxuS2F0aGllL01cXG5LYXRobGVlbi9NXFxuS2F0aG1hbmR1L01cXG5LYXRocmluZS9NXFxuS2F0aHJ5bi9NXFxuS2F0aHkvTVxcbkthdGllL01cXG5LYXRpbmEvTVxcbkthdG1haS9NXFxuS2F0b3dpY2UvTVxcbkthdHJpbmEvTVxcbkthdHkvTVxcbkthdWFpL01cXG5LYXVmbWFuL01cXG5LYXVuYXMvTVxcbkthdW5kYS9NXFxuS2F3YWJhdGEvTVxcbkthd2FzYWtpL01cXG5LYXkvTVxcbktheWUvTVxcbktheWxhL01cXG5LYXpha2gvTVxcbkthemFraHNcXG5LYXpha2hzdGFuL01cXG5LYXphbi9NXFxuS2F6YW50emFraXMvTVxcbktiL01cXG5LZWF0b24vTVxcbktlYXRzL01cXG5LZWNrL01cXG5LZWVuYW4vTVxcbktlZXdhdGluL01cXG5LZWlsbG9yL01cXG5LZWlzaGEvTVxcbktlaXRoL01cXG5LZWxsZXIvTVxcbktlbGxleS9NXFxuS2VsbGkvTVxcbktlbGxpZS9NXFxuS2VsbG9nZy9NXFxuS2VsbHkvTVxcbktlbHNleS9NXFxuS2VsdmluL01cXG5LZW1lcm92by9NXFxuS2VtcC9NXFxuS2VtcGlzL01cXG5LZW4vTVxcbktlbmRhbGwvTVxcbktlbmRyYS9NXFxuS2VuZHJpY2svTVxcbktlbm1vcmUvTVxcbktlbm5hbi9NXFxuS2VubmVkeS9NXFxuS2VubmV0aC9NXFxuS2VubmV3aWNrL01cXG5LZW5uaXRoL01cXG5LZW5ueS9NXFxuS2Vub3NoYS9NXFxuS2VudC9NXFxuS2VudG9uL01cXG5LZW50dWNraWFuL01TXFxuS2VudHVja3kvTVxcbktlbnlhL01cXG5LZW55YW4vU01cXG5LZW55YXR0YS9NXFxuS2VueW9uL01cXG5LZW9naC9NXFxuS2Vva3VrL01cXG5LZXBsZXIvTVxcbktlcmVuc2t5L01cXG5LZXJpL01cXG5LZXJtaXQvTVxcbktlcm4vTVxcbktlcm91YWMvTVxcbktlcnIvTVxcbktlcnJpL01cXG5LZXJyeS9NXFxuS2V0dGVyaW5nL01cXG5LZXZlbi9NXFxuS2V2aW4vTVxcbktldmxhci9NXFxuS2V2b3JraWFuL01cXG5LZXdwaWUvTVxcbktleS9NXFxuS2V5bmVzL01cXG5LZXluZXNpYW4vTVxcbktoYWJhcm92c2svTVxcbktoYWNoYXR1cmlhbi9NXFxuS2hhbGlkL01cXG5LaGFuL01cXG5LaGFya292L01cXG5LaGFydG91bS9NXFxuS2hheXlhbS9NXFxuS2hhemFyL01cXG5LaG1lci9NXFxuS2hvaWtob2kvTVxcbktob2lzYW4vTVxcbktob21laW5pL01cXG5LaG9yYW5hL01cXG5LaHJ1c2hjaGV2L01cXG5LaHVmdS9NXFxuS2h1bG5hL01cXG5LaHdhcml6bWkvTVxcbktoeWJlci9NXFxuS2lja2Fwb28vTVxcbktpZGQvTVxcbktpZWwvTVxcbktpZXJrZWdhYXJkL01cXG5LaWV0aC9NXFxuS2lldi9NXFxuS2lnYWxpL01cXG5LaWt1eXUvTVxcbktpbGF1ZWEvTVxcbktpbGltYW5qYXJvL01cXG5LaWxsZWVuL01cXG5LaWxyb3kvTVxcbktpbS9NXFxuS2ltYmVybGV5L01cXG5LaW1iZXJseS9NXFxuS2luZy9NXFxuS2luZ3Nwb3J0L01cXG5LaW5nc3Rvbi9NXFxuS2luZ3N0b3duL01cXG5LaW5rbydzXFxuS2lubmV5L01cXG5LaW5zZXkvTVxcbktpbnNoYXNhL01cXG5LaW93YS9NU1xcbktpcC9NXFxuS2lwbGluZy9NXFxuS2lyYnkvTVxcbktpcmNoaG9mZi9NXFxuS2lyY2huZXIvTVxcbktpcmdoaXN0YW4vTVxcbktpcmdoaXovTVxcbktpcmdoaXppYS9NXFxuS2lyaWJhdGkvTVxcbktpcmlueWFnYS9NXFxuS2lyay9NXFxuS2lya2xhbmQvTVxcbktpcmtwYXRyaWNrL01cXG5LaXJvdi9NXFxuS2lyc3Rlbi9NXFxuS2lzYW5nYW5pL01cXG5LaXNoaW5ldi9NXFxuS2lzbGV2L01cXG5LaXNzaW1tZWUvTVxcbktpc3Npbmdlci9NXFxuS2l0L01cXG5LaXRha3l1c2h1L01cXG5LaXRjaGVuZXIvTVxcbktpdHR5L01cXG5LaXdhbmlzL01cXG5LbGFuL01cXG5LbGFuc21hbi9NXFxuS2xhdXMvTVxcbktsZWUvTVxcbktsZWVuZXgvTVNcXG5LbGVpbi9NXFxuS2xpbXQvTVxcbktsaW5lL01cXG5LbGluZ29uL01cXG5LbG9uZGlrZS9NU1xcbkttYXJ0L01cXG5LbmFwcC9NXFxuS25lc3NldC9NXFxuS25nd2FycmV5ZS9NXFxuS25pY2tlcmJvY2tlci9NXFxuS25pZXZlbC9NXFxuS25pZ2h0L01cXG5Lbm9wZi9NXFxuS25vc3Nvcy9NXFxuS25vd2xlcy9NXFxuS25veC9NXFxuS25veHZpbGxlL01cXG5LbnVkc2VuL01cXG5LbnV0aC9NXFxuS251dGhzXFxuS29iZS9NXFxuS29jaC9NXFxuS29jaGFiL01cXG5Lb2RhY2hyb21lL01cXG5Lb2Rhay9NXFxuS29kYWx5L01cXG5Lb2RpYWsvTVxcbktvZXN0bGVyL01cXG5Lb2hpbm9vci9NXFxuS29obC9NXFxuS29penVtaS9NXFxuS29qYWsvTVxcbktva29tby9NXFxuS29seW1hL01cXG5Lb21tdW5pem1hL01cXG5Lb25nL01cXG5Lb25nby9NXFxuS29ucmFkL01cXG5Lb29udHovTVxcbktvcHBlbC9NXFxuS29yZWEvTVxcbktvcmVhbi9TTVxcbktvcm5iZXJnL01cXG5Lb3J5L01cXG5Lb3J6eWJza2kvTVxcbktvc2NpdXNrby9NXFxuS29zc3V0aC9NXFxuS29zeWdpbi9NXFxuS290bGluL01cXG5Lb3VmYXgvTVxcbktvd2xvb24vTVxcbktyL01cXG5LcmFmdC9NXFxuS3Jha2F0b2EvTVxcbktyYWtvdy9NXFxuS3JhbWVyL01cXG5LcmFzbm9kYXIvTVxcbktyYXNub3lhcnNrL01cXG5LcmVicy9NXFxuS3JlbWxpbi9NXFxuS3JlbWxpbm9sb2dpc3RcXG5LcmVtbGlub2xvZ3lcXG5LcmVzZ2UvTVxcbktyaW5nbGUvTVxcbktyaXMvTVxcbktyaXNobmEvTVxcbktyaXNobmFtdXJ0aS9NXFxuS3Jpc3RhL01cXG5LcmlzdGVuL01cXG5LcmlzdGkvTVxcbktyaXN0aWUvTVxcbktyaXN0aW4vTVxcbktyaXN0aW5hL01cXG5LcmlzdGluZS9NXFxuS3Jpc3RvcGhlci9NXFxuS3Jpc3R5L01cXG5Lcm9jL01cXG5Lcm9nZXIvTVxcbktyb25lY2tlci9NXFxuS3JvcG90a2luL01cXG5LcnVnZXIvTVxcbktydWdlcnJhbmQvTVxcbktydXBwL01cXG5LcnlzdGFsL01cXG5Lc2hhdHJpeWEvTVxcbkt1YmxhaS9NXFxuS3Vicmljay9NXFxuS3Vobi9NXFxuS3VpYnlzaGV2L01cXG5LdWx0aHVtbS9NXFxuS3VubWluZy9NXFxuS3VvbWludGFuZy9NXFxuS3VyZC9NXFxuS3VyZGlzaC9NXFxuS3VyZGlzdGFuL01cXG5LdXJvc2F3YS9NXFxuS3VydC9NXFxuS3VydGlzL01cXG5LdXNjaC9NXFxuS3V0dXpvdi9NXFxuS3V3YWl0L01cXG5LdXdhaXRpL1NNXFxuS3V6bmV0cy9NXFxuS3V6bmV0c2svTVxcbkt3YWtpdXRsL01cXG5Ld2FuL01cXG5Ld2FuZ2p1L01cXG5Ld2FuemFhL01TXFxuS3kvTUhcXG5LeWxlL01cXG5LeW90by9NXFxuS3lyZ3l6c3Rhbi9NXFxuS3l1c2h1L01cXG5MJ0Ftb3VyL01cXG5MJ0VuZmFudFxcbkwnT3JlYWwvTVxcbkwnT3V2ZXJ0dXJlL01cXG5ML01OXFxuTEFcXG5MQU4vTVxcbkxCSi9NXFxuTENcXG5MQ0QvTVxcbkxDTVxcbkxEQ1xcbkxFRC9NXFxuTEcvTVxcbkxHQlRcXG5MSUZPXFxuTExcXG5MTEIvTVxcbkxMRC9NXFxuTE5HXFxuTE9HT1xcbkxQL01cXG5MUEdcXG5MUE4vU01cXG5MU0FUXFxuTFNEL01cXG5MVk5cXG5MYS9TTVxcbkxhYlxcbkxhYmFuL01cXG5MYWJyYWRvci9TTVxcbkxhYnJhZG9yZWFuXFxuTGFjZXkvTVxcbkxhY2hlc2lzL01cXG5MYWN0b2JhY2lsbHVzXFxuTGFjeS9NXFxuTGFkb2dhL01cXG5MYWRvbm5hL01cXG5MYWR5L01cXG5MYWR5c2hpcC9NU1xcbkxhZmF5ZXR0ZS9NXFxuTGFmaXR0ZS9NXFxuTGFnb3MvTVxcbkxhZ3JhbmdlL01cXG5MYWdyYW5naWFuL01cXG5MYWhvcmUvTVxcbkxhaXVzL01cXG5MYWpvcy9NXFxuTGFrZWlzaGEvTVxcbkxha2VsYW5kL01cXG5MYWtld29vZFxcbkxha2lzaGEvTVxcbkxha290YS9NXFxuTGFrc2htaS9NXFxuTGFtYWlzbS9TTVxcbkxhbWFyL01cXG5MYW1hcmNrL01cXG5MYW1hemUvTVxcbkxhbWIvTVxcbkxhbWJlcnQvTVxcbkxhbWJvcmdoaW5pL01cXG5MYW1icnVzY28vTVxcbkxhbWVudGF0aW9uc1xcbkxhbW9udC9NXFxuTGFuYS9NXFxuTGFuYWkvTVxcbkxhbmNhc2hpcmUvTVxcbkxhbmNhc3Rlci9NXFxuTGFuY2UvTVxcbkxhbmNlbG90L01cXG5MYW5kL01cXG5MYW5kb24vTVxcbkxhbmRyeS9NXFxuTGFuZHNhdC9NXFxuTGFuZHN0ZWluZXIvTVxcbkxhbmUvTVxcbkxhbmcvTVxcbkxhbmdlcmhhbnMvTVxcbkxhbmdsYW5kL01cXG5MYW5nbGV5L01cXG5MYW5nbXVpci9NXFxuTGFua2EvTVxcbkxhbmthbi9NXFxuTGFubnkvTVxcbkxhbnNpbmcvTVxcbkxhbnpob3UvTVxcbkxhby9TTVxcbkxhb2Nvb24vTVxcbkxhb3MvTVxcbkxhb3RpYW4vU01cXG5MYXBsYWNlL01cXG5MYXBsYWNpYW5cXG5MYXBsYW5kL01SXFxuTGFwcC9TTVxcbkxhcmEvTVxcbkxhcmFtaWUvTVxcbkxhcmRuZXIvTVxcbkxhcmVkby9NXFxuTGFyb3Vzc2UvTVxcbkxhcnJ5L01cXG5MYXJzL01OXFxuTGFyc2VuL01cXG5MYXJzb24vTVxcbkxhc2NhdXgvTVxcbkxhc3NhL01cXG5MYXNzZW4vTVxcbkxhc3NpZS9NXFxuTGF0L01cXG5MYXRhc2hhL01cXG5MYXRlcmFuL01cXG5MYXRoYW0vTVxcbkxhdGluL01SU1xcbkxhdGluYVxcbkxhdGluby9TTVxcbkxhdGlueFxcbkxhdGlzaGEvTVxcbkxhdG9ueWEvTVxcbkxhdG95YS9NXFxuTGF0cm9iZS9NXFxuTGF0dmlhL01cXG5MYXR2aWFuL01TXFxuTGF1ZC9NUlxcbkxhdWRlci9NXFxuTGF1ZS9NXFxuTGF1bmRyb21hdC9NXFxuTGF1cmEvTVxcbkxhdXJhc2lhL01cXG5MYXVyZWwvTVxcbkxhdXJlbi9NXFxuTGF1cmVuY2UvTVxcbkxhdXJlbnQvTVxcbkxhdXJpL01cXG5MYXVyaWUvTVxcbkxhdmFsL01cXG5MYXZlcm4vTVxcbkxhdmVybmUvTVxcbkxhdm9pc2llci9NXFxuTGF2b25uZS9NXFxuTGF3YW5kYS9NXFxuTGF3cmVuY2UvTVxcbkxhd3Nvbi9NXFxuTGF3dG9uL01cXG5MYXlhbW9uL01cXG5MYXlsYS9NXFxuTGF5dG9uL01cXG5MYXphcm8vTVxcbkxhemFydXMvTVxcbkxlL1NNXFxuTGVhL01cXG5MZWFjaC9NXFxuTGVhZGJlbGx5L01cXG5MZWFoL01cXG5MZWFrZXkvTVxcbkxlYW4vTVxcbkxlYW5kZXIvTVxcbkxlYW5uL01cXG5MZWFubmEvTVxcbkxlYW5uZS9NXFxuTGVhci9NXFxuTGVhcmpldC9NXFxuTGVhcnkvTVxcbkxlYXZlbndvcnRoL01cXG5MZWJhbmVzZS9NXFxuTGViYW5vbi9NXFxuTGViZXNndWUvTVxcbkxlYmxhbmMvTVxcbkxlZGEvTVxcbkxlZGVyYmVyZy9NXFxuTGVlL01cXG5MZWVkcy9NXFxuTGVlc2J1cmcvTVxcbkxlZXV3ZW5ob2VrL01cXG5MZWV3YXJkL01cXG5MZWZ0XFxuTGVnZW5kcmUvTVxcbkxlZ2VyL01cXG5MZWdob3JuL01cXG5MZWdvL01cXG5MZWdyZWUvTVxcbkxlaG1hbi9NXFxuTGVpYm5pei9NXFxuTGVpY2VzdGVyL1NNXFxuTGVpZGVuL01cXG5MZWlmL01cXG5MZWlnaC9NXFxuTGVpbGEvTVxcbkxlaXB6aWcvTVxcbkxlbGEvTVxcbkxlbGFuZC9NXFxuTGVsaWEvTVxcbkxlbWFpdHJlL01cXG5MZW11ZWwvTVxcbkxlbXVyaWEvTVxcbkxlbi9NXFxuTGVuYS9NXFxuTGVuYXJkL01cXG5MZW5pbi9NXFxuTGVuaW5ncmFkL01cXG5MZW5pbmlzbS9NXFxuTGVuaW5pc3QvTVxcbkxlbm5vbi9NXFxuTGVubnkvTVxcbkxlbm8vTVxcbkxlbm9pci9NXFxuTGVub3JhL01cXG5MZW5vcmUvTVxcbkxlbnQvU01OXFxuTGVudGVuL01cXG5MZW8vU01cXG5MZW9sYS9NXFxuTGVvbWluc3Rlci9NXFxuTGVvbi9NXFxuTGVvbmEvTVxcbkxlb25hcmQvTVxcbkxlb25hcmRvL01cXG5MZW9uY2F2YWxsby9NXFxuTGVvbmVsL01cXG5MZW9uaWQvTVxcbkxlb25pZGFzL01cXG5MZW9ub3IvTVxcbkxlb3BvbGQvTVxcbkxlb3BvbGRvL01cXG5MZXBpZHVzL01cXG5MZXBrZS9NXFxuTGVwdXMvTVxcbkxlcm5lci9NXFxuTGVyb3kvTVxcbkxlcy9NXFxuTGVzYS9NXFxuTGVzbGV5L01cXG5MZXNsaWUvTVxcbkxlc290aG8vTVxcbkxlc3NlcHMvTVxcbkxlc3NpZS9NXFxuTGVzdGVyL01cXG5MZXN0cmFkZS9NXFxuTGV0YS9NXFxuTGV0aGEvTVxcbkxldGhlL01cXG5MZXRpY2lhL01cXG5MZXRpdGlhL01cXG5MZXR0ZXJtYW4vTVxcbkxldmFudC9NXFxuTGV2ZXNxdWUvTVxcbkxldmkvU01cXG5MZXZpYXRoYW4vTVxcbkxldmluZS9NXFxuTGV2aXRpY3VzL01cXG5MZXZpdHQvTVxcbkxldnkvTVxcbkxldy9NXFxuTGV3aW5za3kvTVxcbkxld2lzL01cXG5MZXdpc3Rvbi9NXFxuTGV3aXN2aWxsZS9NXFxuTGV4aW5ndG9uL01cXG5MZXh1cy9NXFxuTGhhc2EvTVNcXG5MaG90c2UvTVxcbkxpL01ZXFxuTGlhb25pbmcvTVxcbkxpYmJ5L01cXG5MaWJlcmFjZS9NXFxuTGliZXJhbFxcbkxpYmVyaWEvTVxcbkxpYmVyaWFuL1NNXFxuTGlicmEvTVNcXG5MaWJyZU9mZmljZS9NXFxuTGlicmV2aWxsZS9NXFxuTGlicml1bS9NXFxuTGlieWEvTVxcbkxpYnlhbi9TTVxcbkxpY2h0ZW5zdGVpbi9NXFxuTGlkaWEvTVxcbkxpZS9NXFxuTGllYmVybWFuL01cXG5MaWViZnJhdW1pbGNoL01cXG5MaWVjaHRlbnN0ZWluL1pNUlxcbkxpZWNodGVuc3RlaW5lci9NXFxuTGllZ2UvTVxcbkxpZXV0XFxuTGlsYS9NXFxuTGlsaWEvTVxcbkxpbGlhbi9NXFxuTGlsaWFuYS9NXFxuTGlsaXRoL01cXG5MaWxpdW9rYWxhbmkvTVxcbkxpbGxlL01cXG5MaWxsaWFuL01cXG5MaWxsaWUvTVxcbkxpbGxpcHV0L01cXG5MaWxsaXB1dGlhbi9NU1xcbkxpbGx5L01cXG5MaWxvbmd3ZS9NXFxuTGlseS9NXFxuTGltYS9NXFxuTGltYmF1Z2gvTVxcbkxpbWJvXFxuTGltYnVyZ2VyL01cXG5MaW1vZ2VzL01cXG5MaW1vdXNpbi9NXFxuTGltcG9wby9NXFxuTGluL01cXG5MaW5hL01cXG5MaW5jb2xuL01TXFxuTGluZC9NXFxuTGluZGEvTVxcbkxpbmRiZXJnaC9NXFxuTGluZHNheS9NXFxuTGluZHNleS9NXFxuTGluZHkvTVxcbkxpbm5hZXVzL01cXG5MaW5vdHlwZS9NXFxuTGludG9uL01cXG5MaW51cy9NXFxuTGludXgvTVNcXG5MaW53b29kL01cXG5MaW9uZWwvTVxcbkxpcGl6emFuZXIvTVxcbkxpcHBpL01cXG5MaXBwbWFubi9NXFxuTGlwc2NvbWIvTVxcbkxpcHRvbi9NXFxuTGlzYS9NXFxuTGlzYm9uL01cXG5MaXNzYWpvdXMvTVxcbkxpc3Rlci9NXFxuTGlzdGVyaW5lL01cXG5MaXN0b24vTVxcbkxpc3p0L01cXG5MaXRodWFuaWEvTVxcbkxpdGh1YW5pYW4vTVNcXG5MaXR0bGUvTVxcbkxpdHRvbi9NXFxuTGl2ZXJtb3JlL01cXG5MaXZlcnBvb2wvTVxcbkxpdmVycHVkbGlhbi9TTVxcbkxpdmlhL01cXG5MaXZpbmdzdG9uL01cXG5MaXZpbmdzdG9uZS9NXFxuTGl2b25pYS9NXFxuTGl2eS9NXFxuTGl6L01cXG5MaXphL01cXG5MaXp6aWUvTVxcbkxpenp5L01cXG5ManVibGphbmEvTVxcbkxsZXdlbGx5bi9NXFxuTGxveWQvTVxcbkxuXFxuTG9hZmVyL1NNXFxuTG9iYWNoZXZza3kvTVxcbkxvY2hpbnZhci9NXFxuTG9ja2UvTVxcbkxvY2tlYW4vTVxcbkxvY2toZWVkL01cXG5Mb2Nrd29vZC9NXFxuTG9kZ2UvTVxcbkxvZGkvTVxcbkxvZHovTVxcbkxvZXdlL01cXG5Mb2V3aS9NXFxuTG9ld3MvTVxcbkxvZ2FuL01cXG5Mb2hlbmdyaW4vTVxcbkxvaXJlL01cXG5Mb2lzL01cXG5Mb2tpL01cXG5Mb2xhL01cXG5Mb2xpdGEvTVxcbkxvbGxhcmQvTVxcbkxvbGxvYnJpZ2lkYS9NXFxuTG9tYmFyZC9NXFxuTG9tYmFyZGkvTVxcbkxvbWJhcmR5L01cXG5Mb21lL01cXG5Mb21wb2MvTVxcbkxvbi9NXFxuTG9uZG9uL01SWlxcbkxvbmRvbmVyL01cXG5Mb25nL01cXG5Mb25nZmVsbG93L01cXG5Mb25nbW9udC9NXFxuTG9uZ3N0cmVldC9NXFxuTG9uZ3VldWlsXFxuTG9uZ3ZpZXcvTVxcbkxvbm5pZS9NXFxuTG9wZXovTVxcbkxvcmEvTVxcbkxvcmFpbi9NXFxuTG9yYWluZS9NXFxuTG9yZC9TTVxcbkxvcmRzaGlwL1NNXFxuTG9yZWxlaS9NXFxuTG9yZW4vTVxcbkxvcmVuYS9NXFxuTG9yZW5lL01cXG5Mb3JlbnR6L01cXG5Mb3JlbnR6aWFuXFxuTG9yZW56L01cXG5Mb3JlbnpvL01cXG5Mb3JldHRhL01cXG5Mb3JpL01cXG5Mb3JpZS9NXFxuTG9ybmEvTVxcbkxvcnJhaW5lL01cXG5Mb3JyZS9NXFxuTG9ycmllL01cXG5Mb3NcXG5Mb3QvTVxcbkxvdGhhcmlvL1NNXFxuTG90dC9NXFxuTG90dGllL01cXG5Mb3UvTVxcbkxvdWVsbGEvTVxcbkxvdWllL01cXG5Mb3Vpcy9NXFxuTG91aXNhL01cXG5Mb3Vpc2UvTVxcbkxvdWlzaWFuYS9NXFxuTG91aXNpYW5hbi9NU1xcbkxvdWlzaWFuaWFuL01TXFxuTG91aXN2aWxsZS9NXFxuTG91cmRlcy9NXFxuTG91dnJlL01cXG5Mb3ZlL01cXG5Mb3ZlY3JhZnQvTVxcbkxvdmVsYWNlL01cXG5Mb3dlL01cXG5Mb3dlbGwvTVxcbkxvd2VuYnJhdS9NXFxuTG93ZXJ5L01cXG5Mb3dsYW5kc1xcbkxveWFuZy9NXFxuTG95ZC9NXFxuTG95b2xhL01cXG5Mclxcbkx0XFxuTHRkXFxuTHUvTVxcbkx1YW5kYS9NXFxuTHVhbm4vTVxcbkx1YmF2aXRjaGVyL01cXG5MdWJib2NrL01cXG5MdWJ1bWJhc2hpL01cXG5MdWNhcy9NXFxuTHVjZS9NXFxuTHVjaWEvTVxcbkx1Y2lhbi9NXFxuTHVjaWFuby9NXFxuTHVjaWVuL01cXG5MdWNpZmVyL01cXG5MdWNpbGUvTVxcbkx1Y2lsbGUvTVxcbkx1Y2luZGEvTVxcbkx1Y2lvL01cXG5MdWNpdGUvU01cXG5MdWNpdXMvTVxcbkx1Y2tub3cvTVxcbkx1Y3JldGlhL01cXG5MdWNyZXRpdXMvTVxcbkx1Y3kvTVxcbkx1ZGRpdGUvTVNcXG5MdWRoaWFuYS9NXFxuTHVkd2lnL01cXG5MdWVsbGEvTVxcbkx1ZnRoYW5zYS9NXFxuTHVmdHdhZmZlL01cXG5MdWdlci9NXFxuTHVnb3NpL01cXG5MdWlnaS9NXFxuTHVpcy9NXFxuTHVpc2EvTVxcbkx1a2UvTVxcbkx1bGEvTVxcbkx1bGx5L01cXG5MdWx1L01cXG5MdW1pZXJlL01cXG5MdW5hL01cXG5MdXBlL01cXG5MdXBlcmNhbGlhL01cXG5MdXB1cy9NXFxuTHVyaWEvTVxcbkx1c2FrYS9NXFxuTHVzaXRhbmlhL01cXG5MdXRoZXIvTVxcbkx1dGhlcmFuL1NNXFxuTHV0aGVyYW5pc20vTVNcXG5MdXZzL01cXG5MdXhlbWJvdXJnL1pNUlxcbkx1eGVtYm91cmdlci9NXFxuTHV4ZW1ib3VyZ2lhblxcbkx1ei9NXFxuTHV6b24vTVxcbkx2b3YvTVxcbkx5WC9NXFxuTHlhbGxwdXJcXG5MeWNyYS9NXFxuTHljdXJndXMvTVxcbkx5ZGlhL01cXG5MeWRpYW4vU01cXG5MeWVsbC9NXFxuTHlsZS9NXFxuTHlseS9NXFxuTHltYW4vTVxcbkx5bWUvTVxcbkx5bmNoL01cXG5MeW5jaGJ1cmcvTVxcbkx5bmRhL01cXG5MeW5kb24vTVxcbkx5bmV0dGUvTVxcbkx5bm4vTVxcbkx5bm5lL01cXG5MeW5uZXR0ZS9NXFxuTHlvbi9TTVxcbkx5b25zL01cXG5MeXJhL01cXG5MeXNlbmtvL01cXG5MeXNpc3RyYXRhL01cXG5MeXNvbC9NXFxuTS9TTUdCXFxuTUEvTVxcbk1BU0hcXG5NQi9NXFxuTUJBL01cXG5NQ1xcbk1DSS9NXFxuTUQvTVxcbk1EVFxcbk1FXFxuTUVHTy9TXFxuTUZBL01cXG5NR00vTVxcbk1Ielxcbk1JL01cXG5NSUFcXG5NSURJL01cXG5NSVBTXFxuTUlSVlxcbk1JVC9NXFxuTU1cXG5NTlxcbk1PXFxuTU9PQ1xcbk1QL01cXG5NUEVHXFxuTVJJL01cXG5NUy9NXFxuTVNHL01cXG5NU1QvTVxcbk1TV1xcbk1UL01cXG5NVFYvTVxcbk1WUC9NXFxuTVdcXG5NYWFsb3gvTVxcbk1hYmVsL01cXG5NYWJsZS9NXFxuTWFjL01cXG5NYWNBcnRodXIvTVxcbk1hY0JyaWRlL01cXG5NYWNEb25hbGQvTVxcbk1hY0xlaXNoL01cXG5NYWNhby9NXFxuTWFjYXVsYXkvTVxcbk1hY2JldGgvTVxcbk1hY2NhYmVlc1xcbk1hY2NhYmV1cy9NXFxuTWFjZS9NXFxuTWFjZWRvbi9NXFxuTWFjZWRvbmlhL01cXG5NYWNlZG9uaWFuL1NNXFxuTWFjaC9NXFxuTWFjaGlhdmVsbGkvTVxcbk1hY2hpYXZlbGxpYW4vTVxcbk1hY2lhcy9NXFxuTWFjaW50b3NoL01cXG5NYWNrL01cXG5NYWNrZW56aWUvTVxcbk1hY2tpbmFjL01cXG5NYWNraW5hdy9NXFxuTWFjbWlsbGFuL01cXG5NYWNvbi9NXFxuTWFjdW1iYS9NXFxuTWFjeS9NXFxuTWFkYWdhc2Nhbi9TTVxcbk1hZGFnYXNjYXIvTVxcbk1hZGFtXFxuTWFkZGVuL01cXG5NYWRkb3gvTVxcbk1hZGVpcmEvU01cXG5NYWRlbGVpbmUvTVxcbk1hZGVsaW5lL01cXG5NYWRlbHluL01cXG5NYWRlcmEvTVxcbk1hZGdlL01cXG5NYWRpc29uL01cXG5NYWRvbm5hL1NNXFxuTWFkcmFzL01cXG5NYWRyaWQvTVxcbk1hZHVyYWkvTVxcbk1hZS9NXFxuTWFldGVybGluY2svTVxcbk1hZmlhL01TXFxuTWFmaW9zby9NXFxuTWFnZGFsZW5hL01cXG5NYWdkYWxlbmUvTVxcbk1hZ2VsbGFuL01cXG5NYWdlbGxhbmljL01cXG5NYWdnaWUvTVxcbk1hZ2hyZWIvTVxcbk1hZ2lcXG5NYWdpbm90L01cXG5NYWduaWZpY2F0XFxuTWFnbml0b2dvcnNrL01cXG5NYWdvZy9NXFxuTWFnb28vTVxcbk1hZ3JpdHRlL01cXG5NYWdzYXlzYXkvTVxcbk1hZ3VzXFxuTWFneWFyL1NNXFxuTWFoYWJoYXJhdGEvTVxcbk1haGFyYXNodHJhL01cXG5NYWhhdmlyYS9NXFxuTWFoYXlhbmEvTVxcbk1haGF5YW5pc3QvTVxcbk1haGRpL01cXG5NYWhmb3V6L01cXG5NYWhpY2FuL1NNXFxuTWFobGVyL01cXG5NYWkvTVxcbk1haWRlbmZvcm0vTVxcbk1haWdyZXQvTVxcbk1haWxlci9NXFxuTWFpbGxvbC9NXFxuTWFpbWFuL01cXG5NYWltb25pZGVzL01cXG5NYWluZS9NWlJcXG5NYWluZXIvTVxcbk1haXNpZS9NXFxuTWFpdHJleWEvTVxcbk1halxcbk1hamVzdHlcXG5NYWpvci9NXFxuTWFqb3JjYS9NXFxuTWFqdXJvL01cXG5NYWthcmlvcy9NXFxuTWFrZXIvTVxcbk1hbGFiYXIvTVxcbk1hbGFiby9NXFxuTWFsYWNjYS9NXFxuTWFsYWNoaS9NXFxuTWFsYWdhc3kvTVxcbk1hbGFtdWQvTVxcbk1hbGFwcm9wL01cXG5NYWxhd2kvTVxcbk1hbGF3aWFuL1NNXFxuTWFsYXkvTVNcXG5NYWxheWEvTVxcbk1hbGF5YWxhbS9NXFxuTWFsYXlhbi9NU1xcbk1hbGF5c2lhL01cXG5NYWxheXNpYW4vTVNcXG5NYWxjb2xtL01cXG5NYWxkaXZlL01TXFxuTWFsZGl2ZXMvTVxcbk1hbGRpdmlhbi9NU1xcbk1hbGRvbmFkby9NXFxuTWFsZS9NXFxuTWFsaS9NXFxuTWFsaWFuL1NNXFxuTWFsaWJ1L01cXG5NYWxpbmRhL01cXG5NYWxpbm93c2tpL01cXG5NYWxsYXJtZS9NXFxuTWFsbG9tYXJzL01cXG5NYWxsb3J5L01cXG5NYWxvbmUvTVxcbk1hbG9yeS9NXFxuTWFscGxhcXVldC9NXFxuTWFscmF1eC9NXFxuTWFsdGEvTVxcbk1hbHRlc2UvTVxcbk1hbHRodXMvTVxcbk1hbHRodXNpYW4vU01cXG5NYW1lbHVrZS9NXFxuTWFtZXQvTVxcbk1hbWllL01cXG5NYW1vcmUvTVxcbk1hbi9NXFxuTWFuYWd1YS9NXFxuTWFuYW1hL01cXG5NYW5hc3NlaC9NXFxuTWFuY2hlc3Rlci9NXFxuTWFuY2h1L1NNXFxuTWFuY2h1cmlhL01cXG5NYW5jaHVyaWFuL01cXG5NYW5jaW5pL01cXG5NYW5jdW5pYW4vTVNcXG5NYW5kYWxheS9NXFxuTWFuZGFyaW4vTVxcbk1hbmRlbGEvTVxcbk1hbmRlbGJyb3QvTVxcbk1hbmRldmlsbGUvTVxcbk1hbmRpbmdvL01cXG5NYW5kcmVsbC9NXFxuTWFuZHkvTVxcbk1hbmV0L01cXG5NYW5mcmVkL01cXG5NYW5oYXR0YW4vU01cXG5NYW5pL01cXG5NYW5pY2hlYW4vTVxcbk1hbmlsYS9TTVxcbk1hbml0b2JhL01cXG5NYW5pdG91bGluL01cXG5NYW5rYXRvL01cXG5NYW5sZXkvTVxcbk1hbm4vR01cXG5NYW5uaGVpbS9NXFxuTWFubmluZy9NXFxuTWFuc2ZpZWxkL01cXG5NYW5zb24vTVxcbk1hbnRlY2EvTVxcbk1hbnRlZ25hL01cXG5NYW50bGUvTVxcbk1hbnVlbC9NXFxuTWFudWVsYS9NXFxuTWFueC9NXFxuTWFvL01cXG5NYW9pc20vU01cXG5NYW9pc3QvU01cXG5NYW9yaS9NU1xcbk1hcHBsZXRob3JwZS9NXFxuTWFwdXRvL01cXG5NYXIvU01cXG5NYXJhL01cXG5NYXJhY2FpYm8vTVxcbk1hcmF0L01cXG5NYXJhdGhhL01cXG5NYXJhdGhpL01cXG5NYXJhdGhvbi9NXFxuTWFyYy9NXFxuTWFyY2VhdS9NXFxuTWFyY2VsL01cXG5NYXJjZWxpbm8vTVxcbk1hcmNlbGxhL01cXG5NYXJjZWxvL01cXG5NYXJjaC9NU1xcbk1hcmNpL01cXG5NYXJjaWEvTVxcbk1hcmNpYW5vL01cXG5NYXJjaWUvTVxcbk1hcmNvL01TXFxuTWFyY29uaS9NXFxuTWFyY29zL01cXG5NYXJjdXMvTVxcbk1hcmN1c2VcXG5NYXJjeS9NXFxuTWFyZHVrL01cXG5NYXJnYXJldC9NXFxuTWFyZ2FyaXRhL01cXG5NYXJnYXJpdG8vTVxcbk1hcmdlL01cXG5NYXJnZXJ5L01cXG5NYXJnaWUvTVxcbk1hcmdvL01cXG5NYXJnb3RcXG5NYXJncmV0L01cXG5NYXJncmV0aGUvTVxcbk1hcmd1ZXJpdGUvTVxcbk1hcmkvU01cXG5NYXJpYS9NXFxuTWFyaWFEQi9NXFxuTWFyaWFuL01cXG5NYXJpYW5hL1NNXFxuTWFyaWFuYXMvTVxcbk1hcmlhbm5lL01cXG5NYXJpYW5vL01cXG5NYXJpYmVsL01cXG5NYXJpY2VsYS9NXFxuTWFyaWUvTVxcbk1hcmlldHRhL01cXG5NYXJpbHluL01cXG5NYXJpbi9NXFxuTWFyaW5hL01cXG5NYXJpbmUvU01cXG5NYXJpby9NXFxuTWFyaW9uL01cXG5NYXJpcy9NXFxuTWFyaXNhL01cXG5NYXJpc29sL01cXG5NYXJpc3NhL01cXG5NYXJpdGFpbi9NXFxuTWFyaXR6YS9NXFxuTWFyaXVwb2xcXG5NYXJpdXMvTVxcbk1hcmpvcmllL01cXG5NYXJqb3J5L01cXG5NYXJrL1NNXFxuTWFya2FiL01cXG5NYXJraGFtL01cXG5NYXJrb3YvTVxcbk1hcmtzL01cXG5NYXJsYS9NXFxuTWFybGJvcm8vTVxcbk1hcmxib3JvdWdoL01cXG5NYXJsZW5lL01cXG5NYXJsZXkvTVxcbk1hcmxpbi9NXFxuTWFybG9uL01cXG5NYXJsb3dlL01cXG5NYXJtYXJhL01cXG5NYXJuZS9NXFxuTWFyb25pdGUvTVxcbk1hcnBsZS9NXFxuTWFycXVlc2FzL01cXG5NYXJxdWV0dGUvTVxcbk1hcnF1ZXovTVxcbk1hcnF1aXMvTVxcbk1hcnF1aXRhL01cXG5NYXJyYWtlc2gvTVxcbk1hcnJpb3R0L01cXG5NYXJzL01TXFxuTWFyc2FsYS9NXFxuTWFyc2VpbGxhaXNlL01TXFxuTWFyc2VpbGxlcy9NXFxuTWFyc2gvTVxcbk1hcnNoYS9NXFxuTWFyc2hhbGwvTVxcbk1hcnRhL01cXG5NYXJ0ZWwvTVxcbk1hcnRoYS9NXFxuTWFydGlhbC9NXFxuTWFydGlhbi9TTVxcbk1hcnRpbi9NXFxuTWFydGluYS9NXFxuTWFydGluZXovTVxcbk1hcnRpbmlxdWUvTVxcbk1hcnR5L01cXG5NYXJ2YS9NXFxuTWFydmVsbC9NXFxuTWFydmluL01cXG5NYXJ4L01cXG5NYXJ4aWFuXFxuTWFyeGlzbS9TTVxcbk1hcnhpc3QvU01cXG5NYXJ5L01cXG5NYXJ5YW5uL01cXG5NYXJ5YW5uZS9NXFxuTWFyeWVsbGVuL01cXG5NYXJ5bGFuZC9NUlxcbk1hcnlsYW5kZXIvTVxcbk1hcnlsb3UvTVxcbk1hcnlzdmlsbGUvTVxcbk1hc2FkYS9NXFxuTWFzYWkvTVxcbk1hc2FyeWsvTVxcbk1hc2NhZ25pL01cXG5NYXNlZmllbGQvTVxcbk1hc2VyYXRpL01cXG5NYXNlcnUvTVxcbk1hc2hoYWQvTVxcbk1hc29uL01TXFxuTWFzb25pYy9NXFxuTWFzb25pdGUvTVxcbk1hc3MvTVNcXG5NYXNzYWNodXNldHRzL01cXG5NYXNzYXNvaXQvTVxcbk1hc3NlbmV0L01cXG5NYXNzZXkvTVxcbk1hc3Rlci9TXFxuTWFzdGVyQ2FyZC9NXFxuTWFzdGVycy9NXFxuTWF0aGVyL01cXG5NYXRoZXNvbi9NXFxuTWF0aGV3L1NNXFxuTWF0aGV3cy9NXFxuTWF0aGV3c29uL01cXG5NYXRoaWFzL01cXG5NYXRoaXMvTVxcbk1hdGlsZGEvTVxcbk1hdGlzc2UvTVxcbk1hdGxhYi9NXFxuTWF0dC9NXFxuTWF0dGVsL01cXG5NYXR0ZXJob3JuL01cXG5NYXR0aGV3L1NNXFxuTWF0dGhld3MvTVxcbk1hdHRoaWFzL01cXG5NYXR0aWUvTVxcbk1hdWQvTVxcbk1hdWRlL01cXG5NYXVnaGFtL01cXG5NYXVpL01cXG5NYXVsZGluL01cXG5NYXVwYXNzYW50L01cXG5NYXVyYS9NXFxuTWF1cmVlbi9NXFxuTWF1cmlhYy9NXFxuTWF1cmljZS9NXFxuTWF1cmljaW8vTVxcbk1hdXJpbmUvTVxcbk1hdXJpdGFuaWEvTVxcbk1hdXJpdGFuaWFuL1NNXFxuTWF1cml0aWFuL1NNXFxuTWF1cml0aXVzL01cXG5NYXVyby9NXFxuTWF1cm9pcy9NXFxuTWF1cnlhbi9NXFxuTWF1c2VyL01cXG5NYXZpcy9NXFxuTWF4L01cXG5NYXhpbWlsaWFuL01cXG5NYXhpbmUvTVxcbk1heHdlbGwvTVxcbk1heS9TTVJcXG5NYXlhL1NNXFxuTWF5YW4vTVNcXG5NYXllci9NXFxuTWF5ZmFpci9NXFxuTWF5Zmxvd2VyL01cXG5NYXluYXJkL01cXG5NYXlvL01cXG5NYXlwb2xlXFxuTWF5cmEvTVxcbk1heXMvTVxcbk1heXRhZy9NXFxuTWF6YW1hL01cXG5NYXphcmluL01cXG5NYXphdGxhbi9NXFxuTWF6ZGEvTVxcbk1hem9sYS9NXFxuTWF6emluaS9NXFxuTWIvTVxcbk1iYWJhbmUvTVxcbk1iaW5pL01cXG5NY0FkYW0vTVxcbk1jQWxsZW4vTVxcbk1jQnJpZGUvTVxcbk1jQ2Fpbi9NXFxuTWNDYWxsL01cXG5NY0NhcnRoeS9NXFxuTWNDYXJ0aHlpc20vTVxcbk1jQ2FydG5leS9NXFxuTWNDYXJ0eS9NXFxuTWNDbGFpbi9NXFxuTWNDbGVsbGFuL01cXG5NY0NsdXJlL01cXG5NY0Nvbm5lbGwvTVxcbk1jQ29ybWljay9NXFxuTWNDb3kvTVxcbk1jQ3JheS9NXFxuTWNDdWxsb3VnaC9NXFxuTWNEYW5pZWwvTVxcbk1jRG9uYWxkL01cXG5NY0Rvbm5lbGwvTVxcbk1jRG93ZWxsL01cXG5NY0Vucm9lL01cXG5NY0ZhZGRlbi9NXFxuTWNGYXJsYW5kL01cXG5NY0dlZS9NXFxuTWNHb3Zlcm4vTVxcbk1jR293YW4vTVxcbk1jR3VmZmV5L01cXG5NY0d1aXJlL01cXG5NY0hlbnJ5L01cXG5NY0ludG9zaC9NXFxuTWNJbnR5cmUvTVxcbk1jSm9iXFxuTWNLYXkvTVxcbk1jS2VlL01cXG5NY0tlbnppZS9NXFxuTWNLaW5sZXkvTVxcbk1jS2lubmV5L01cXG5NY0tuaWdodC9NXFxuTWNMYXVnaGxpbi9NXFxuTWNMZWFuL01cXG5NY0xlb2QvTVxcbk1jTHVoYW4vTVxcbk1jTWFob24vTVxcbk1jTWlsbGFuL01cXG5NY05hbWFyYS9NXFxuTWNOYXVnaHRvbi9NXFxuTWNOZWlsL01cXG5NY1BoZXJzb24vTVxcbk1jUXVlZW4vTVxcbk1jVmVpZ2gvTVxcbk1kL01cXG5NZVxcbk1lYWQvTVxcbk1lYWRlL01cXG5NZWFkb3dzL01cXG5NZWFnYW4vTVxcbk1lYW55L01cXG5NZWNjYS9NU1xcbk1lZGFuL01cXG5NZWRlYS9NXFxuTWVkZWxsaW4vTVxcbk1lZGZvcmQvTVxcbk1lZGlhL01cXG5NZWRpY2FpZC9TTVxcbk1lZGljYXJlL1NNXFxuTWVkaWNpL01cXG5NZWRpbmEvTVxcbk1lZGl0ZXJyYW5lYW4vTVNcXG5NZWR1c2EvTVxcbk1lZy9NXFxuTWVnYW4vTVxcbk1lZ2hhbi9NXFxuTWVpZXIvTVxcbk1laWdoZW4vTVxcbk1laWppL01cXG5NZWlyL01cXG5NZWppYS9NXFxuTWVrb25nL01cXG5NZWwvTVxcbk1lbGFuZXNpYS9NXFxuTWVsYW5lc2lhbi9NXFxuTWVsYW5pZS9NXFxuTWVsYmEvTVxcbk1lbGJvdXJuZS9NXFxuTWVsY2hpb3IvTVxcbk1lbGNoaXplZGVrL01cXG5NZWxlbmRlei9NXFxuTWVsaW5kYS9NXFxuTWVsaXNhL01cXG5NZWxpc2FuZGUvTVxcbk1lbGlzc2EvTVxcbk1lbGxvbi9NXFxuTWVsb2R5L01cXG5NZWxwb21lbmUvTVxcbk1lbHRvbi9NXFxuTWVsdmEvTVxcbk1lbHZpbGxlL01cXG5NZWx2aW4vTVxcbk1lbWNhY2hlZC9NXFxuTWVtbGluZy9NXFxuTWVtcGhpcy9NXFxuTWVuYW5kZXIvTVxcbk1lbmNpdXMvTVxcbk1lbmNrZW4vTVxcbk1lbmRlbC9NXFxuTWVuZGVsZWV2L01cXG5NZW5kZWxpYW4vTVxcbk1lbmRlbHNzb2huL01cXG5NZW5kZXovTVxcbk1lbmRvY2luby9NXFxuTWVuZG96YS9NXFxuTWVuZWxhdXMvTVxcbk1lbmVsaWsvTVxcbk1lbmVzL01cXG5NZW5nemlcXG5NZW5pZmVlL01cXG5NZW5rYWxpbmFuL01cXG5NZW5rYXIvTVxcbk1lbmtlbnQvTVxcbk1lbm5lbi9NXFxuTWVubm9uaXRlL01TXFxuTWVub21pbmVlL01cXG5NZW5vdHRpL01cXG5NZW5zYS9NXFxuTWVudGhvbGF0dW0vTVxcbk1lbnVoaW4vTVxcbk1lbnppZXMvTVxcbk1lcGhpc3RvXFxuTWVwaGlzdG9waGVsZXMvTVxcbk1lcmFrL01cXG5NZXJjYWRvL01cXG5NZXJjYXRvci9NXFxuTWVyY2VkL01cXG5NZXJjZWRlcy9NXFxuTWVyY2VyL01cXG5NZXJjaWEvTVxcbk1lcmNrL01cXG5NZXJjdXJvY2hyb21lL01cXG5NZXJjdXJ5L1NNXFxuTWVyZWRpdGgvTVxcbk1lcmluby9NXFxuTWVybGUvTVxcbk1lcmxpbi9NXFxuTWVybG90L01cXG5NZXJvdmluZ2lhbi9NXFxuTWVycmlhbS9NXFxuTWVycmljay9NXFxuTWVycmlsbC9NXFxuTWVycmltYWNrL01cXG5NZXJyaXR0L01cXG5NZXJ0aGlvbGF0ZS9NXFxuTWVydG9uL01cXG5NZXJ2aW4vTVxcbk1lc2EvTVxcbk1lc2FiaS9NXFxuTWVzbWVyL01cXG5NZXNvbGl0aGljL01cXG5NZXNvcG90YW1pYS9NXFxuTWVzb3BvdGFtaWFuXFxuTWVzb3pvaWMvTVxcbk1lc3NlcnNjaG1pZHQvTVxcbk1lc3NpYWVuL01cXG5NZXNzaWFoL01cXG5NZXNzaWFoc1xcbk1lc3NpYW5pY1xcbk1lc3NpZXVyc1xcbk1ldGFsbGljYS9NXFxuTWV0YW11Y2lsL01cXG5NZXRob2Rpc20vU01cXG5NZXRob2Rpc3QvU01cXG5NZXRodXNlbGFoL01cXG5NZXR0ZXJuaWNoL01cXG5NZXVzZS9NXFxuTWV4XFxuTWV4aWNhbGkvTVxcbk1leGljYW4vTVNcXG5NZXhpY28vTVxcbk1leWVyL01TXFxuTWV5ZXJiZWVyL01cXG5NZXllcnMvTVxcbk1mdW1lL01cXG5NZy9NXFxuTWdyXFxuTWlHL01cXG5NaWEvTVxcbk1pYW1pL01TXFxuTWlhcGxhY2lkdXMvTVxcbk1pY2FoL01cXG5NaWNhd2Jlci9NXFxuTWljaC9NXFxuTWljaGFlbC9NXFxuTWljaGFlbG1hcy9NU1xcbk1pY2hlYWwvTVxcbk1pY2hlbC9NXFxuTWljaGVsYW5nZWxvL01cXG5NaWNoZWxlL01cXG5NaWNoZWxpbi9NXFxuTWljaGVsbGUvTVxcbk1pY2hlbG9iL01cXG5NaWNoZWxzb24vTVxcbk1pY2hpZ2FuL01cXG5NaWNoaWdhbmRlci9NU1xcbk1pY2hpZ2FuaXRlXFxuTWljay9NXFxuTWlja2V5L01cXG5NaWNraWUvTVxcbk1pY2t5L01cXG5NaWNtYWMvU01cXG5NaWNyb25lc2lhL01cXG5NaWNyb25lc2lhbi9NXFxuTWljcm9zb2Z0L01cXG5NaWRhcy9NXFxuTWlkZGxldG9uL01cXG5NaWRkbGV0b3duL01cXG5NaWRlYXN0XFxuTWlkZWFzdGVyblxcbk1pZGxhbmQvTVNcXG5NaWR3YXkvTVxcbk1pZHdlc3QvTVxcbk1pZHdlc3Rlcm4vTVJcXG5NaWd1ZWwvTVxcbk1pa2UvTVxcbk1pa2hhaWwvTVxcbk1pa295YW4vTVxcbk1pbGFncm9zL01cXG5NaWxhbi9NXFxuTWlsYW5lc2VcXG5NaWxkcmVkL01cXG5NaWxlcy9NXFxuTWlsZm9yZC9NXFxuTWlsa2VuL01cXG5NaWxsL1NNUlxcbk1pbGxhcmQvTVxcbk1pbGxheS9NXFxuTWlsbGVyL01cXG5NaWxsZXQvTVxcbk1pbGxpY2VudC9NXFxuTWlsbGllL01cXG5NaWxsaWthbi9NXFxuTWlsbHMvTVxcbk1pbG5lL01cXG5NaWxvL01cXG5NaWxvc2V2aWMvTVxcbk1pbHF1ZXRvYXN0L01cXG5NaWx0aWFkZXMvTVxcbk1pbHRvbi9NXFxuTWlsdG9uaWFuXFxuTWlsdG9uaWMvTVxcbk1pbHRvd24vTVxcbk1pbHdhdWtlZS9NXFxuTWltaS9NXFxuTWltb3NhL01cXG5NaW4vTVxcbk1pbmFtb3RvL01cXG5NaW5kYW5hby9NXFxuTWluZG9yby9NXFxuTWluZHkvTVxcbk1pbmVydmEvTVxcbk1pbmcvTVxcbk1pbmd1cy9NXFxuTWlublxcbk1pbm5lYXBvbGlzL01cXG5NaW5uZWxsaS9NXFxuTWlubmVzb3RhL01cXG5NaW5uZXNvdGFuL1NNXFxuTWlubmllL01cXG5NaW5vYW4vTVNcXG5NaW5vbHRhL01cXG5NaW5vcy9NXFxuTWlub3QvTVxcbk1pbm90YXVyL01cXG5NaW5zay9NXFxuTWluc2t5L01cXG5NaW50YWthL01cXG5NaW51aXQvTVxcbk1pbnV0ZW1hbi9NXFxuTWlvY2VuZS9NXFxuTWlyL01cXG5NaXJhL01cXG5NaXJhYmVhdS9NXFxuTWlyYWNoL01cXG5NaXJhbmRhL01cXG5NaXJmYWsvTVxcbk1pcmlhbS9NXFxuTWlyby9NXFxuTWlyemFtL01cXG5NaXNraXRvL01cXG5NaXNzXFxuTWlzc2lzc2F1Z2EvTVxcbk1pc3Npc3NpcHBpL01cXG5NaXNzaXNzaXBwaWFuL1NNXFxuTWlzc291bGEvTVxcbk1pc3NvdXJpL01cXG5NaXNzb3VyaWFuL01TXFxuTWlzc3kvTVxcbk1pc3Rhc3NpbmkvTVxcbk1pc3Rlclxcbk1pc3RyZXNzXFxuTWlzdHkvTVxcbk1pdGNoL01cXG5NaXRjaGVsL01cXG5NaXRjaGVsbC9NXFxuTWl0Zm9yZC9NXFxuTWl0aHJhL01cXG5NaXRocmlkYXRlcy9NXFxuTWl0c3ViaXNoaS9NXFxuTWl0dGVycmFuZC9NXFxuTWl0dHkvTVxcbk1pdHppL01cXG5NaXh0ZWMvTVxcbk1pemFyL01cXG5Na1xcbk1sbGVcXG5NbWUvU1xcbk1uL01cXG5NbmVtb3N5bmUvTVxcbk1vL01cXG5Nb2JpbC9NXFxuTW9iaWxlL01cXG5Nb2J1dHUvTVxcbk1vZGVzdG8vTVxcbk1vZGlnbGlhbmkvTVxcbk1vZS9NXFxuTW9ldC9NXFxuTW9nYWRpc2h1L01cXG5Nb2d1bC9NU1xcbk1vaGFjcy9NXFxuTW9oYW1lZC9NXFxuTW9oYW1tYWQvTVxcbk1vaGFtbWVkYW4vU01cXG5Nb2hhbW1lZGFuaXNtL1NNXFxuTW9oYXZlL1NNXFxuTW9oYXdrL1NNXFxuTW9oZWdhblxcbk1vaG8vTVxcbk1vaG9yb3ZpY2ljL01cXG5Nb2lyYS9NXFxuTW9pc2VzL01cXG5Nb2lzZXlldi9NXFxuTW9qYXZlL1NNXFxuTW9sZGF2aWEvTVxcbk1vbGRhdmlhblxcbk1vbGRvdmEvTVxcbk1vbGRvdmFuXFxuTW9saWVyZS9NXFxuTW9saW5hL01cXG5Nb2xsL01cXG5Nb2xsaWUvTVxcbk1vbGx5L01cXG5Nb2xuYXIvTVxcbk1vbG9jaC9NXFxuTW9sb2thaS9NXFxuTW9sb3Rvdi9NXFxuTW9sdWNjYXMvTVxcbk1vbWJhc2EvTVxcbk1vbi9TTVxcbk1vbmEvTVxcbk1vbmFjYW5cXG5Nb25hY28vTVxcbk1vbmRhbGUvTVxcbk1vbmRheS9TTVxcbk1vbmRyaWFuL01cXG5Nb25lZ2FzcXVlL1NNXFxuTW9uZXJhL01cXG5Nb25lc3Nlbi9NXFxuTW9uZXQvTVxcbk1vbmdvREIvTVxcbk1vbmdvbC9TTVxcbk1vbmdvbGlhL01cXG5Nb25nb2xpYW4vU01cXG5Nb25nb2xpYy9NXFxuTW9uZ29sb2lkXFxuTW9uaWNhL01cXG5Nb25pcXVlL01cXG5Nb25rL01cXG5Nb25tb3V0aC9NXFxuTW9ub25nYWhlbGEvTVxcbk1vbnJvZS9NXFxuTW9ucm92aWEvTVxcbk1vbnNhbnRvL01cXG5Nb25zaWV1ci9NXFxuTW9uc2lnbm9yL1NNXFxuTW9udC9NXFxuTW9udGFndWUvTVxcbk1vbnRhaWduZS9NXFxuTW9udGFuYS9NXFxuTW9udGFuYW4vU01cXG5Nb250Y2FsbS9NXFxuTW9udGUvTVxcbk1vbnRlbmVncmluL01cXG5Nb250ZW5lZ3JvL01cXG5Nb250ZXJleS9NXFxuTW9udGVycmV5L01cXG5Nb250ZXNxdWlldS9NXFxuTW9udGVzc29yaS9NXFxuTW9udGV2ZXJkaS9NXFxuTW9udGV2aWRlby9NXFxuTW9udGV6dW1hL01cXG5Nb250Z29sZmllci9NXFxuTW9udGdvbWVyeS9NXFxuTW9udGljZWxsby9NXFxuTW9udG95YS9NXFxuTW9udHBlbGllci9NXFxuTW9udHJhY2hldC9NXFxuTW9udHJlYWwvTVxcbk1vbnRzZXJyYXQvTVxcbk1vbnR5L01cXG5Nb29keS9NXFxuTW9vZy9NXFxuTW9vbi9NXFxuTW9vbmV5L01cXG5Nb29yL1NNXFxuTW9vcmUvTVxcbk1vb3Jpc2gvTVxcbk1vcmFsZXMvTVxcbk1vcmFuL01cXG5Nb3JhdmlhL01cXG5Nb3Jhdmlhbi9NXFxuTW9yZHJlZC9NXFxuTW9yZS9NXFxuTW9yZW5vL01cXG5Nb3JnYW4vU01cXG5Nb3JnYW50b3duL01cXG5Nb3JpYXJ0eS9NXFxuTW9yaW4vTVxcbk1vcmlzb24vTVxcbk1vcml0YS9NXFxuTW9ybGV5L01cXG5Nb3Jtb24vU01cXG5Nb3Jtb25pc20vU01cXG5Nb3JvL01cXG5Nb3JvY2Nhbi9TTVxcbk1vcm9jY28vTVxcbk1vcm9uaS9NXFxuTW9ycGhldXMvTVxcbk1vcnBoeS9NXFxuTW9ycmlzL01cXG5Nb3JyaXNvbi9NXFxuTW9ycmlzdG93bi9NXFxuTW9ycm93L01cXG5Nb3JzZS9NXFxuTW9ydC9NXFxuTW9ydGltZXIvTVxcbk1vcnRvbi9NXFxuTW9zYWljL01cXG5Nb3Njb3cvTVxcbk1vc2VsZXkvTVxcbk1vc2VsbGUvTVxcbk1vc2VzL01cXG5Nb3NsZXkvTVxcbk1vc3MvTVxcbk1vc3VsL01cXG5Nb3Rvcm9sYS9NXFxuTW90b3duL01cXG5Nb3RyaW4vTVxcbk1vdHQvTVxcbk1vdWx0b24vTVxcbk1vdW50L01cXG5Nb3VudGJhdHRlbi9NXFxuTW91bnRpZS9NU1xcbk1vdXNzb3Jnc2t5L01cXG5Nb3V0aGUvTVxcbk1vdXRvbi9NXFxuTW93Z2xpL01cXG5Nb3phbWJpY2FuL1NNXFxuTW96YW1iaXF1ZS9NXFxuTW96YXJ0L01cXG5Nb3ppbGxhL01cXG5Nci9TTVxcbk1zL1NcXG5Nc2dyXFxuTXRcXG5NdWF3aXlhL01cXG5NdWJhcmFrL01cXG5NdWVsbGVyL01cXG5NdWVuc3Rlci9NU1xcbk11Z2FiZS9NXFxuTXVoYW1tYWQvTVxcbk11aGFtbWFkYW4vTVNcXG5NdWhhbW1hZGFuaXNtL1NNXFxuTXVpci9NXFxuTXVqaWIvTVxcbk11bGRlci9NXFxuTXVsbGVuL01cXG5NdWxsZXIvTVxcbk11bGxpZ2FuL01cXG5NdWxsaWthbi9NXFxuTXVsbGlucy9NXFxuTXVscm9uZXkvTVxcbk11bHRhbi9NXFxuTXVsdGljc1xcbk11bWJhaS9NXFxuTXVtZm9yZC9NXFxuTXVuY2gvTVxcbk11bmNoaGF1c2VuL01cXG5NdW5jaWUvTVxcbk11bmljaC9NXFxuTXVub3ovTVxcbk11bnJvL01cXG5NdW5zdGVyL01cXG5NdXBwZXQvTVxcbk11cmFzYWtpL01cXG5NdXJhdC9NXFxuTXVyY2hpc29uL01cXG5NdXJjaWFcXG5NdXJkb2NoL01cXG5NdXJmcmVlc2Jvcm8vTVxcbk11cmllbC9NXFxuTXVyaWxsby9NXFxuTXVyaW5lL01cXG5NdXJtYW5zay9NXFxuTXVycGh5L01cXG5NdXJyYXkvTVxcbk11cnJpZXRhL01cXG5NdXJyb3cvTVxcbk11cnJ1bWJpZGdlZS9NXFxuTXVzY2F0L01cXG5NdXNjb3ZpdGUvTVxcbk11c2NvdnkvTVxcbk11c2UvTVxcbk11c2hhcnJhZi9NXFxuTXVzaWFsL01cXG5NdXNrZWdvbi9NXFxuTXVza29nZWUvTVxcbk11c2xpbS9NU1xcbk11c3NvbGluaS9NXFxuTXVzc29yZ3NreS9NXFxuTXV0c3VoaXRvL01cXG5NdXphay9NXFxuTXlTUUwvTVxcbk15U3BhY2UvTVxcbk15YW5tYXIvTVxcbk15Y2VuYWUvTVxcbk15Y2VuYWVhbi9NXFxuTXllcnMvTVxcbk15bGFyL01TXFxuTXlsZXMvTVxcbk15cmEvTVxcbk15cmRhbC9NXFxuTXlybmEvTVxcbk15cm9uL01cXG5NeXJ0bGUvTVxcbk15c29yZS9NXFxuTXlzdC9NXFxuTidEamFtZW5hXFxuTi9NRFxcbk5BQUNQL01cXG5OQUZUQS9NXFxuTkFTQS9NXFxuTkFTQ0FSL01cXG5OQVNEQVEvTVxcbk5BVE8vTVxcbk5CXFxuTkJBL01cXG5OQkMvTVxcbk5CU1xcbk5DXFxuTkNBQS9NXFxuTkNPXFxuTkRcXG5ORS9NXFxuTkVIXFxuTkZcXG5ORkNcXG5ORkwvTVxcbk5IXFxuTkhML01cXG5OSUhcXG5OSU1CWVxcbk5KXFxuTkxSQlxcbk5NXFxuTk9SQUQvTVxcbk5PV1xcbk5QXFxuTlBSL01cXG5OUlxcbk5SQVxcbk5SQ1xcbk5TXFxuTlNBL01cXG5OU0NcXG5OU0ZcXG5OU0ZXXFxuTlRcXG5OVlxcbk5WSURJQS9NXFxuTlcvTVxcbk5XVFxcbk5ZXFxuTllDXFxuTllTRVxcbk5aXFxuTmEvTVxcbk5hYmlzY28vTVxcbk5hYm9rb3YvTVxcbk5hZGVyL01cXG5OYWRpYS9NXFxuTmFkaW5lL01cXG5OYWdhc2FraS9NXFxuTmFnb3lhL01cXG5OYWdwdXIvTVxcbk5hZ3kvTVxcbk5haHVhdGwvTVNcXG5OYWh1bS9NXFxuTmFpcGF1bC9NXFxuTmFpci9NXFxuTmFpcm9iaS9NXFxuTmFpc21pdGgvTVxcbk5hbS9NXFxuTmFtYXRoL01cXG5OYW1pYmlhL01cXG5OYW1pYmlhbi9NU1xcbk5hbXBhL01cXG5OYW4vTVxcbk5hbmFrL01cXG5OYW5jaGFuZy9NXFxuTmFuY3kvTVxcbk5hbmV0dGUvTVxcbk5hbmppbmcvTVxcbk5hbm5pZS9NXFxuTmFub29rL01cXG5OYW5zZW4vTVxcbk5hbnRlcy9NXFxuTmFudHVja2V0L01cXG5OYW9taS9NXFxuTmFwYS9NXFxuTmFwaHRhbGkvTVxcbk5hcGllci9NXFxuTmFwbGVzL01cXG5OYXBvbGVvbi9NU1xcbk5hcG9sZW9uaWMvTVxcbk5hcHN0ZXIvTVxcbk5hcmNpc3N1cy9NXFxuTmFybWFkYS9NXFxuTmFybmlhL01cXG5OYXJyYWdhbnNldFxcbk5hcnJhZ2Fuc2V0dC9NXFxuTmFzaC9NXFxuTmFzaHVhL01cXG5OYXNodmlsbGUvTVxcbk5hc3NhdS9NXFxuTmFzc2VyL01cXG5OYXQvTVxcbk5hdGFsaWEvTVxcbk5hdGFsaWUvTVxcbk5hdGFzaGEvTVxcbk5hdGNoZXovTVxcbk5hdGUvTU5cXG5OYXRoYW4vU01cXG5OYXRoYW5pZWwvTVxcbk5hdGhhbnMvTVxcbk5hdGlvbi9NXFxuTmF0aW9ud2lkZS9NXFxuTmF0aXZpdHkvTVxcbk5hdWdhaHlkZS9NXFxuTmF1cnUvTVxcbk5hdXRpbHVzL01cXG5OYXZham8vU01cXG5OYXZham9lc1xcbk5hdmFycmUvTVxcbk5hdmFycm8vTVxcbk5hdnJhdGlsb3ZhL01cXG5OYXZ5XFxuTmF6YXJlbmUvTVxcbk5hemFyZXRoL01cXG5OYXpjYS9NXFxuTmF6aS9TTVxcbk5hemlzbS9NU1xcbk5iL01cXG5OZC9NXFxuTmRqYW1lbmEvTVxcbk5lL01cXG5OZVdTXFxuTmVXU2VzXFxuTmVhbC9NXFxuTmVhbmRlcnRoYWwvU01cXG5OZWFwb2xpdGFuL01cXG5OZWJcXG5OZWJyXFxuTmVicmFza2EvTVxcbk5lYnJhc2thbi9NU1xcbk5lYnVjaGFkbmV6emFyL01cXG5OZWQvTVxcbk5lZmVydGl0aS9NXFxuTmVnZXYvTVxcbk5lZ3Jlc3MvTVNcXG5OZWdyaXR1ZGVcXG5OZWdyby9NU1xcbk5lZ3JvZXNcXG5OZWdyb2lkL1NNXFxuTmVncm9zL01cXG5OZWhlbWlhaC9NXFxuTmVocnUvTVxcbk5laWwvTVxcbk5lbGRhL01cXG5OZWxsL01cXG5OZWxsaWUvTVxcbk5lbGx5L01cXG5OZWxzZW4vTVxcbk5lbHNvbi9NXFxuTmVtYnV0YWwvTVxcbk5lbWVzaXMvTVxcbk5lby9NXFxuTmVvZ2VuZS9NXFxuTmVvbGl0aGljXFxuTmVwYWwvTVxcbk5lcGFsZXNlL01cXG5OZXBhbGkvTVNcXG5OZXB0dW5lL01cXG5OZXJlaWQvTVxcbk5lcmYvTVxcbk5lcm8vTVxcbk5lcnVkYS9NXFxuTmVzY2FmZS9NXFxuTmVzc2Vscm9kZS9NXFxuTmVzdGxlL01cXG5OZXN0b3IvTVxcbk5lc3Rvcml1cy9NXFxuTmV0ZmxpeC9NXFxuTmV0aGVybGFuZGVyL1NNXFxuTmV0aGVybGFuZHMvTVxcbk5ldHNjYXBlL01cXG5OZXR0aWUvTVxcbk5ldHphaHVhbGNveW90bC9NXFxuTmV2L01cXG5OZXZhL01cXG5OZXZhZGEvTVxcbk5ldmFkYW4vU01cXG5OZXZhZGlhblxcbk5ldmlzL01cXG5OZXZza3kvTVxcbk5ld2Fyay9NXFxuTmV3YnVyZ2gvTVxcbk5ld2Nhc3RsZS9NXFxuTmV3Zm91bmRsYW5kL01SU1xcbk5ld21hbi9NXFxuTmV3cG9ydC9NXFxuTmV3c3dlZWsvTVxcbk5ld3Rvbi9NXFxuTmV3dG9uaWFuL01cXG5OZXhpcy9NXFxuTmdhbGllbWEvTVxcbk5ndXllbi9NXFxuTmkvTVxcbk5pYWdhcmEvTVxcbk5pYW1leS9NXFxuTmliZWx1bmcvTVxcbk5pY2FlYS9NXFxuTmljYXJhZ3VhL01cXG5OaWNhcmFndWFuL1NNXFxuTmljY29sby9NXFxuTmljZS9NXFxuTmljZW5lL01cXG5OaWNoaXJlbi9NXFxuTmljaG9sYXMvTVxcbk5pY2hvbGUvTVxcbk5pY2hvbHMvTVxcbk5pY2hvbHNvbi9NXFxuTmljay9NXFxuTmlja2Vsb2Rlb24vTVxcbk5pY2tsYXVzL01cXG5OaWNrb2xhcy9NXFxuTmljb2Jhci9NXFxuTmljb2RlbXVzL01cXG5OaWNvbGEvU01cXG5OaWNvbGFzL01cXG5OaWNvbGUvTVxcbk5pY29zaWEvTVxcbk5pZWJ1aHIvTVxcbk5pZWxzZW4vTVxcbk5pZXR6c2NoZS9NXFxuTmlldmVzL01cXG5OaWdlbC9NXFxuTmlnZXIvTVxcbk5pZ2VyaWEvTVxcbk5pZ2VyaWFuL01TXFxuTmlnZXJpZW4vTVxcbk5pZ2h0aW5nYWxlL01cXG5OaWppbnNreS9NXFxuTmlrZS9NXFxuTmlraXRhL01cXG5OaWtrZWkvTVxcbk5pa2tpL01cXG5OaWtvbGFpL01cXG5OaWtvbi9NXFxuTmlsZS9NXFxuTmltaXR6L01cXG5OaW1yb2QvTVxcbk5pbmEvTVxcbk5pbmV2ZWgvTVxcbk5pbnRlbmRvL01cXG5OaW9iZS9NXFxuTmlwcG9uL01cXG5OaXBwb25lc2UvTVxcbk5pcmVuYmVyZy9NXFxuTmlydmFuYS9NXFxuTmlzYW4vTVxcbk5pc2VpL01cXG5OaXNzYW4vTVxcbk5pdGEvTVxcbk5pdmVhL01cXG5OaXhvbi9NXFxuTmtydW1haC9NXFxuTm8vU01cXG5Ob0Rvei9NXFxuTm9haC9NXFxuTm9iZWwvTVxcbk5vYmVsaXN0L01TXFxuTm9ibGUvTVxcbk5vZS9NXFxuTm9lbC9TTVxcbk5vZWxsZS9NXFxuTm9lbWkvTVxcbk5va2lhL01cXG5Ob2xhL01cXG5Ob2xhbi9NXFxuTm9tZS9NXFxuTm9uYS9NXFxuTm9vdGthL01cXG5Ob3JhL01cXG5Ob3JiZXJ0L01cXG5Ob3JiZXJ0by9NXFxuTm9yZGljL01TXFxuTm9yZWVuL01cXG5Ob3Jmb2xrL01cXG5Ob3JpZWdhL01cXG5Ob3JtYS9NXFxuTm9ybWFsL01cXG5Ob3JtYW4vTVNcXG5Ob3JtYW5kL01cXG5Ob3JtYW5keS9NXFxuTm9ycGxhbnQvTVxcbk5vcnJpcy9NXFxuTm9yc2UvTVxcbk5vcnNlbWFuL01cXG5Ob3JzZW1lbi9NXFxuTm9ydGgvTVxcbk5vcnRoYW1wdG9uL01cXG5Ob3J0aGVhc3QvTVNcXG5Ob3J0aGVybmVyL01cXG5Ob3J0aHJvcC9NXFxuTm9ydGhydXAvTVxcbk5vcnRoc1xcbk5vcnRod2VzdC9TTVxcbk5vcnRvbi9NXFxuTm9yd1xcbk5vcndheS9NXFxuTm9yd2VnaWFuL1NNXFxuTm9yd2ljaC9NXFxuTm9zZmVyYXR1L01cXG5Ob3N0cmFkYW11cy9NXFxuTm90dGluZ2hhbS9NXFxuTm91YWtjaG90dC9NXFxuTm91bWVhL01cXG5Ob3YvTVxcbk5vdmEvTVxcbk5vdmFydGlzL01cXG5Ob3ZlbWJlci9NU1xcbk5vdmdvcm9kL01cXG5Ob3ZvY2Fpbi9NU1xcbk5vdm9jYWluZVxcbk5vdm9rdXpuZXRzay9NXFxuTm92b3NpYmlyc2svTVxcbk5veHplbWEvTVxcbk5veWNlL01cXG5Ob3llcy9NXFxuTnAvTVxcbk51YmlhL01cXG5OdWJpYW4vTVxcbk51a3VhbG9mYS9NXFxuTnVtYmVycy9NXFxuTnVuYXZ1dC9NXFxuTnVuZXovTVxcbk51bmtpL01cXG5OdXJlbWJlcmcvTVxcbk51cmV5ZXYvTVxcbk51dHJhU3dlZXQvTVxcbk55UXVpbC9NXFxuTnlhc2EvTVxcbk55ZXJlcmUvTVxcbk8nQnJpZW4vTVxcbk8nQ2FzZXkvTVxcbk8nQ29ubmVsbC9NXFxuTydDb25ub3IvTVxcbk8nRG9ubmVsbC9NXFxuTydIYXJhL01cXG5PJ0hpZ2dpbnMvTVxcbk8nS2VlZmZlL01cXG5PJ05laWwvTVxcbk8nTmVpbGwvTVxcbk8nUm91cmtlL01cXG5PJ1Rvb2xlL01cXG5PL1NNXFxuT0FTL01cXG5PQlxcbk9DUlxcbk9EL1NNXFxuT0VcXG5PRURcXG5PSFxcbk9IU0EvTVxcbk9KXFxuT0svU01ER1xcbk9NQi9NXFxuT05cXG5PUEVDL01cXG5PUlxcbk9TL01cXG5PU0hBL01cXG5PU2VzXFxuT1RcXG5PVEJcXG5PVENcXG5PVE9IXFxuT2FodS9NXFxuT2FrbGFuZC9NXFxuT2FrbGV5L01cXG5PYXRlcy9NXFxuT2F4YWNhL01cXG5PYi9NXFxuT2JhZGlhaC9NXFxuT2JhbWEvTVxcbk9iYW1hY2FyZVxcbk9iZXJsaW4vTVxcbk9iZXJvbi9NXFxuT2NhbGEvTVxcbk9jYW1sL01cXG5PY2NhbS9NXFxuT2NjaWRlbnRcXG5PY2NpZGVudGFsL01TXFxuT2NlYW5pYS9NXFxuT2NlYW5zaWRlXFxuT2NlYW51cy9NXFxuT2Nob2EvTVxcbk9jdC9NXFxuT2N0YXZpYS9NXFxuT2N0YXZpYW4vTVxcbk9jdGF2aW8vTVxcbk9jdG9iZXIvU01cXG5PZGVsbC9NXFxuT2Rlci9NXFxuT2Rlc3NhL01cXG5PZGV0cy9NXFxuT2Rpbi9NXFxuT2Rpcy9NXFxuT2RvbS9NXFxuT2R5c3NldXMvTVxcbk9keXNzZXkvTVxcbk9lZGlwYWwvTVxcbk9lZGlwdXMvTVxcbk9lcnN0ZWQvTVxcbk9mZWxpYS9NXFxuT2ZmZW5iYWNoL01cXG5PZmZpY2VNYXgvTVxcbk9nYm9tb3Noby9NXFxuT2dkZW4vTVxcbk9naWx2eS9NXFxuT2dsZXRob3JwZS9NXFxuT2hpby9NXFxuT2hpb2FuL1NNXFxuT2lzZS9NXFxuT2ppYndhL1NNXFxuT2theWFtYVxcbk9rZWVjaG9iZWUvTVxcbk9rZWZlbm9rZWUvTVxcbk9raG90c2svTVxcbk9raW5hd2EvTVxcbk9raW5hd2FuXFxuT2tsYVxcbk9rbGFob21hL01cXG5Pa2xhaG9tYW4vTVxcbk9rdG9iZXJmZXN0L01cXG5PbGEvTVxcbk9sYWYvTVxcbk9sYWp1d29uL01cXG5PbGF2L01cXG5PbGRlbmJ1cmcvTVxcbk9sZGZpZWxkL01cXG5PbGRzbW9iaWxlL01cXG5PbGR1dmFpL01cXG5PbGVuL01cXG5PbGVuZWsvTVxcbk9sZ2EvTVxcbk9saWdvY2VuZS9NXFxuT2xpbi9NXFxuT2xpdmUvTVJcXG5PbGl2ZXIvTVxcbk9saXZldHRpL01cXG5PbGl2aWEvTVxcbk9saXZpZXIvTVxcbk9sbGllL01cXG5PbG1lYy9NXFxuT2xtc3RlZC9NXFxuT2xzZW4vTVxcbk9sc29uL01cXG5PbHltcGlhL1NNXFxuT2x5bXBpYWQvTVNcXG5PbHltcGlhbi9NU1xcbk9seW1waWMvU01cXG5PbHltcGljcy9NXFxuT2x5bXB1cy9NXFxuT21haGEvTVNcXG5PbWFuL01cXG5PbWFuaS9NU1xcbk9tYXIvTVxcbk9tYXl5YWQvTVxcbk9tZHVybWFuL01cXG5PbW5pcG90ZW50XFxuT21zay9NXFxuT25hc3Npcy9NXFxuT25lYWwvTVxcbk9uZWdhL01cXG5PbmVnaW4vTVxcbk9uZWlkYS9NU1xcbk9uaW9uL01cXG5Pbm8vTVxcbk9ub25kYWdhL01TXFxuT25zYWdlci9NXFxuT250XFxuT250YXJpYW5cXG5PbnRhcmlvL01cXG5Pb3J0L01cXG5PcGFsL01cXG5PcGVsL01cXG5PcGVuT2ZmaWNlL01cXG5PcGhlbGlhL01cXG5PcGhpdWNodXMvTVxcbk9wcGVuaGVpbWVyL01cXG5PcHBvc2l0aW9uXFxuT3ByYWgvTVxcbk9yYS9NXFxuT3JhY2xlL01cXG5PcmFuL01cXG5PcmFuZ2UvTVxcbk9yYW5qZXN0YWQvTVxcbk9yYmlzb24vTVxcbk9yZG92aWNpYW4vTVxcbk9yZS9OXFxuT3JlZ1xcbk9yZWdvbi9NXFxuT3JlZ29uaWFuL1NNXFxuT3JlbS9NXFxuT3Jlby9NXFxuT3Jlc3Rlcy9NXFxuT3JpZW50L01cXG5PcmllbnRhbC9NU1xcbk9yaWVudGFsaXNtXFxuT3Jpbi9NXFxuT3Jpbm9jby9NXFxuT3Jpb24vTVxcbk9yaXlhL01cXG5Pcml6YWJhL01cXG5PcmtuZXkvTVxcbk9ybGFuZG8vTVxcbk9ybGVhbnMvTVxcbk9ybG9uL01TXFxuT3JseS9NXFxuT3JwaGV1cy9NXFxuT3JwaGljL01cXG5PcnIvTVxcbk9ydGVnYS9NXFxuT3J0aG9kb3hcXG5PcnRpei9NXFxuT3J2YWwvTVxcbk9ydmlsbGUvTVxcbk9yd2VsbC9NXFxuT3J3ZWxsaWFuL01cXG5Pcy9NXFxuT3NhZ2UvTVNcXG5Pc2FrYS9NXFxuT3NiZXJ0L01cXG5Pc2Jvcm4vTVxcbk9zYm9ybmUvTVxcbk9zY2FyL01TXFxuT3NjZW9sYS9NXFxuT3Nnb29kL01cXG5Pc2hhd2EvTVxcbk9zaGtvc2gvTVxcbk9zaXJpcy9NXFxuT3Nsby9NXFxuT3NtYW4vTVxcbk9zdHJvZ290aC9NXFxuT3N0d2FsZC9NXFxuT3N2YWxkby9NXFxuT3N3YWxkL01cXG5PdGhlbGxvL01cXG5PdGlzL01cXG5PdHRhd2EvU01cXG5PdHRvL01cXG5PdHRvbWFuL01cXG5PdWFnYWRvdWdvdS9NXFxuT3VpamEvTVNcXG5PdmlkL01cXG5Pd2VuL1NNXFxuT3dlbnMvTVxcbk93ZW5zYm9yby9NXFxuT3hmb3JkL1NNXFxuT3huYXJkL01cXG5PeG9uaWFuL01cXG5PeHVzL01cXG5PeHljb250aW4vTVxcbk96L01cXG5PemFyay9NU1xcbk96YXJrcy9NXFxuT3p5bWFuZGlhcy9NXFxuT3p6aWUvTVxcblAvTU5cXG5QQS9NXFxuUEFDL01cXG5QQVJDL1NcXG5QQVNDQUxcXG5QQlMvTVxcblBCWFxcblBDL1NNXFxuUENCXFxuUENNQ0lBXFxuUENQL01cXG5QRFxcblBERlxcblBEUVxcblBEVFxcblBFXFxuUEVUL01cXG5QRkNcXG5QR1xcblBHUFxcblBIUC9NXFxuUElOXFxuUEonc1xcblBMTy9NXFxuUE0vU01ER1xcblBNUy9NXFxuUE9cXG5QT1cvTVxcblBQXFxuUFBTXFxuUFJcXG5QUkMvTVxcblBST1xcblBTL01cXG5QU1QvTVxcblBUXFxuUFRBL01cXG5QVE9cXG5QVkMvTVxcblBXXFxuUFhcXG5QYS9NXFxuUGFhci9NXFxuUGFibG8vTVxcblBhYmx1bS9NXFxuUGFic3QvTVxcblBhY2UvTVxcblBhY2hlY28vTVxcblBhY2lmaWMvTVxcblBhY2luby9NXFxuUGFja2FyZC9NXFxuUGFkYW5nXFxuUGFkZXJld3NraS9NXFxuUGFkaWxsYS9NXFxuUGFnYW5pbmkvTVxcblBhZ2UvTVxcblBhZ2xpYS9NXFxuUGFobGF2aS9NXFxuUGFpZ2UvTVxcblBhaW5lL01cXG5QYWl1dGUvU01cXG5QYWtpc3Rhbi9NXFxuUGFraXN0YW5pL1NNXFxuUGFsZW1iYW5nL01cXG5QYWxlb2NlbmUvTVxcblBhbGVvZ2VuZS9NXFxuUGFsZW9saXRoaWMvTVxcblBhbGVvem9pYy9NXFxuUGFsZXJtby9NXFxuUGFsZXN0aW5lL01cXG5QYWxlc3Rpbmlhbi9TTVxcblBhbGVzdHJpbmEvTVxcblBhbGV5L01cXG5QYWxpa2lyL01cXG5QYWxpc2FkZXMvTVxcblBhbGxhZGlvL01cXG5QYWxtZGFsZS9NXFxuUGFsbWVyL01cXG5QYWxtZXJzdG9uL01cXG5QYWxtb2xpdmUvTVxcblBhbG15cmEvTVxcblBhbG9tYXIvTVxcblBhbS9NXFxuUGFtZWxhL01cXG5QYW1pcnMvTVxcblBhbXBlcnMvTVxcblBhbi9NXFxuUGFuYW1hL1NNXFxuUGFuYW1hbmlhbi9NU1xcblBhbmFzb25pYy9NXFxuUGFuZG9yYS9NXFxuUGFuZ2FlYS9NXFxuUGFua2h1cnN0L01cXG5QYW5tdW5qb20vTVxcblBhbnN5L01cXG5QYW50YWdydWVsL01cXG5QYW50YWxvb24vTVxcblBhbnRoZW9uL01cXG5QYW56YS9NXFxuUGFyYWNlbHN1cy9NXFxuUGFyYWNsZXRlL01cXG5QYXJhZGlzZVxcblBhcmFndWF5L01cXG5QYXJhZ3VheWFuL01TXFxuUGFyYWx5bXBpYy9TXFxuUGFyYW1hcmliby9NXFxuUGFyYW1vdW50L01cXG5QYXJhbmEvTVxcblBhcmNoZWVzaS9NXFxuUGFyZXRvL01cXG5QYXJpcy9NXFxuUGFyaXNpYW4vTVNcXG5QYXJrL1NNUlxcblBhcmtlci9NXFxuUGFya2Vyc2J1cmcvTVxcblBhcmtpbnNvbi9NXFxuUGFya2luc29uaXNtXFxuUGFya21hbi9NXFxuUGFya3MvTVxcblBhcmxpYW1lbnQvTVxcblBhcm1lbmlkZXNcXG5QYXJtZXNhbi9NU1xcblBhcm5hc3N1cy9NU1xcblBhcm5lbGwvTVxcblBhcnIvTVxcblBhcnJpc2gvTVxcblBhcnNpZmFsL01cXG5QYXJzb25zL01cXG5QYXJ0aGVub24vTVxcblBhcnRoaWEvTVxcblBhc2FkZW5hL01cXG5QYXNjYWdvdWxhL01cXG5QYXNjYWwvU01cXG5QYXNjby9NXFxuUGFzcXVhbGUvTVxcblBhc3Npb24vU01cXG5QYXNzb3Zlci9NU1xcblBhc3Rlcm5hay9NXFxuUGFzdGV1ci9NXFxuUGF0L01cXG5QYXRhZ29uaWEvTVxcblBhdGFnb25pYW4vTVxcblBhdGUvTVxcblBhdGVsL01cXG5QYXRlcnNvbi9NXFxuUGF0bmEvTVxcblBhdHJpY2EvTVxcblBhdHJpY2UvTVxcblBhdHJpY2lhL01cXG5QYXRyaWNrL01cXG5QYXRzeS9NXFxuUGF0dGVyc29uL01cXG5QYXR0aS9NXFxuUGF0dG9uL01cXG5QYXR0eS9NXFxuUGF1bC9HTVxcblBhdWxhL01cXG5QYXVsZXR0ZS9NXFxuUGF1bGkvTVxcblBhdWxpbmUvTVxcblBhdWxpbmcvTVxcblBhdmFyb3R0aS9NXFxuUGF2bG92L01cXG5QYXZsb3ZhL01cXG5QYXZsb3ZpYW4vTVxcblBhd25lZS9TTVxcblBheVBhbC9NXFxuUGF5bmUvTVxcblBiL01cXG5QZC9NXFxuUGVhYm9keS9NXFxuUGVhY2UvTVxcblBlYWxlL01cXG5QZWFybC9NXFxuUGVhcmxpZS9NXFxuUGVhcnNvbi9NXFxuUGVhcnkvTVxcblBlY2hvcmEvTVxcblBlY2svTVxcblBlY2tpbnBhaC9NXFxuUGVjb3MvTVxcblBlZHJvL01cXG5QZWVsL01cXG5QZWcvTVxcblBlZ2FzdXMvTVNcXG5QZWdneS9NXFxuUGVpL01cXG5QZWlwaW5nL01cXG5QZWtpbmcvU01cXG5QZWtpbmdlc2UvU01cXG5QZWxlL01cXG5QZWxlZS9NXFxuUGVsb3Bvbm5lc2UvTVxcblBlbWJyb2tlL01cXG5QZW4vTVxcblBlbmEvTVxcblBlbmRlcmVja2kvTVxcblBlbmVsb3BlL01cXG5QZW5uL01cXG5QZW5uYVxcblBlbm5leS9NXFxuUGVubmluZ3Rvbi9NXFxuUGVubnN5bHZhbmlhL01cXG5QZW5uc3lsdmFuaWFuL01TXFxuUGVubnkvTVxcblBlbm56b2lsL01cXG5QZW5zYWNvbGEvTVxcblBlbnRhZ29uL01cXG5QZW50YXRldWNoL01cXG5QZW50YXgvTVxcblBlbnRlY29zdC9TTVxcblBlbnRlY29zdGFsL01TXFxuUGVudGVjb3N0YWxpc21cXG5QZW50aXVtL1NNXFxuUGVvcmlhL01cXG5QZXBpbi9NXFxuUGVwc2kvTVxcblBlcHlzL01cXG5QZXF1b3QvTVxcblBlcmNoZXJvbi9NXFxuUGVyY2l2YWwvTVxcblBlcmN5L01cXG5QZXJlbG1hbi9NXFxuUGVyZXovTVxcblBlcmljbGVhbi9NXFxuUGVyaWNsZXMvTVxcblBlcmtpbnMvTVxcblBlcmwvU01cXG5QZXJtL01cXG5QZXJtYWxsb3kvTVxcblBlcm1pYW4vTVxcblBlcm5vZC9NXFxuUGVyb24vTVxcblBlcm90L01cXG5QZXJyaWVyL01cXG5QZXJyeS9STVxcblBlcnNlaWQvTVxcblBlcnNlcGhvbmUvTVxcblBlcnNlcG9saXMvTVxcblBlcnNldXMvTVxcblBlcnNoaW5nL01cXG5QZXJzaWEvTVxcblBlcnNpYW4vU01cXG5QZXJ0aC9NXFxuUGVydS9NXFxuUGVydXZpYW4vTVNcXG5QZXNoYXdhci9NXFxuUGV0YWluL01cXG5QZXRhbHVtYS9NXFxuUGV0ZS9STVpcXG5QZXRlci9NXFxuUGV0ZXJzL01OXFxuUGV0ZXJzZW4vTVxcblBldGVyc29uL01cXG5QZXRyYS9NXFxuUGV0cmFyY2gvTVxcblBldHR5L01cXG5QZXVnZW90L01cXG5QZmNcXG5QZml6ZXIvTVxcblBoRC9NXFxuUGhhZWRyYS9NXFxuUGhhZXRob24vTVxcblBoYW5lcm96b2ljL01cXG5QaGFyYW9oL01cXG5QaGFyYW9oc1xcblBoYXJpc2FpY1xcblBoYXJpc2FpY2FsXFxuUGhhcmlzZWUvTVNcXG5QaGVrZGEvTVxcblBoZWxwcy9NXFxuUGhpZGlhcy9NXFxuUGhpbC9NWVxcblBoaWxhZGVscGhpYS9NXFxuUGhpbGJ5L01cXG5QaGlsZW1vbi9NXFxuUGhpbGlwL01TXFxuUGhpbGlwcGUvTVxcblBoaWxpcHBpYW5zL01cXG5QaGlsaXBwaW5lL1NNXFxuUGhpbGlwcGluZXMvTVxcblBoaWxpcHMvTVxcblBoaWxpc3RpbmUvTVxcblBoaWxsaXAvU01cXG5QaGlsbGlwYS9NXFxuUGhpbGxpcHMvTVxcblBoaWxseS9NXFxuUGhpcHBzL01cXG5QaG9ib3MvTVxcblBob2ViZS9NXFxuUGhvZW5pY2lhL01cXG5QaG9lbmljaWFuL1NNXFxuUGhvZW5peC9NXFxuUGhvdG9zdGF0L01TXFxuUGhvdG9zdGF0dGVkXFxuUGhvdG9zdGF0dGluZ1xcblBocnlnaWEvTVxcblBoeWxsaXMvTVxcblBpYWYvTVxcblBpYWdldC9NXFxuUGlhbm9sYS9NXFxuUGljYXNzby9NXFxuUGljY2FkaWxseS9NXFxuUGlja2VyaW5nL01cXG5QaWNrZXR0L01cXG5QaWNrZm9yZC9NXFxuUGlja3dpY2svTVxcblBpY3QvTVxcblBpZWRtb250L01cXG5QaWVyY2UvTVxcblBpZXJyZS9NXFxuUGllcnJvdC9NXFxuUGlrZS9NXFxuUGlsYXRlL01TXFxuUGlsYXRlcy9NXFxuUGlsY29tYXlvL01cXG5QaWxncmltL1NNXFxuUGlsbHNidXJ5L01cXG5QaW5hdHViby9NXFxuUGluY3VzL01cXG5QaW5kYXIvTVxcblBpbmtlcnRvbi9NXFxuUGlub2NjaGlvL01cXG5QaW5vY2hldC9NXFxuUGludGVyL01cXG5QaW55aW5cXG5QaXBwaW4vTVxcblBpcmFldXMvTVxcblBpcmFuZGVsbG8vTVxcblBpc2EvTVxcblBpc2Nlcy9NXFxuUGlzaXN0cmF0dXMvTVxcblBpc3Nhcm8vTVxcblBpdGNhaXJuL01cXG5QaXR0L1NNXFxuUGl0dG1hbi9NXFxuUGl0dHMvTVxcblBpdHRzYnVyZ2gvTVxcblBpdHRzZmllbGQvTVxcblBpdXMvTVxcblBpemFycm8vTVxcblBrd3lcXG5QbFxcblBsYW5jay9NXFxuUGxhbm9cXG5QbGFudGFnZW5ldC9NXFxuUGxhc3RpY2luZS9NXFxuUGxhdGFlYS9NXFxuUGxhdGgvTVxcblBsYXRvL01cXG5QbGF0b25pY1xcblBsYXRvbmlzbS9NXFxuUGxhdG9uaXN0L01cXG5QbGF0dGUvTVxcblBsYXV0dXMvTVxcblBsYXlTdGF0aW9uL01cXG5QbGF5Ym95L01cXG5QbGF5dGV4L01cXG5QbGVpYWRlcy9NXFxuUGxlaXN0b2NlbmUvTVxcblBsZXhpZ2xhcy9NU1xcblBsaW55L01cXG5QbGlvY2VuZS9TTVxcblBsdXRhcmNoL01cXG5QbHV0by9NXFxuUGx5bW91dGgvTVxcblBtL01cXG5Qby9NXFxuUG9jYWhvbnRhcy9NXFxuUG9jYXRlbGxvL01cXG5Qb2Nvbm8vU01cXG5Qb2Nvbm9zL01cXG5Qb2Rnb3JpY2EvTVxcblBvZGhvcmV0ei9NXFxuUG9kdW5rL01cXG5Qb2UvTVxcblBvZ28vTVxcblBvaW5jYXJlL01cXG5Qb2lyZXQvTVxcblBvaXJvdC9NXFxuUG9pc3Nvbi9NXFxuUG9pdGllci9NXFxuUG9rZW1vbi9NXFxuUG9sL01ZXFxuUG9sYW5kL01cXG5Qb2xhbnNraS9NXFxuUG9sYXJpcy9NXFxuUG9sYXJvaWQvTVNcXG5Qb2xlL1NNXFxuUG9saXNoL01cXG5Qb2xpdGJ1cm8vTVxcblBvbGsvTVxcblBvbGxhcmQvTVxcblBvbGxvY2svTVxcblBvbGx1eC9NXFxuUG9sbHkvTVxcblBvbGx5YW5uYS9NXFxuUG9sby9NXFxuUG9sdGF2YS9NXFxuUG9seWh5bW5pYS9NXFxuUG9seW5lc2lhL01cXG5Qb2x5bmVzaWFuL01TXFxuUG9seXBoZW11cy9NXFxuUG9tZXJhbmlhL01cXG5Qb21lcmFuaWFuL01cXG5Qb21vbmEvTVxcblBvbXBhZG91ci9NXFxuUG9tcGVpYW5cXG5Qb21wZWlpL01cXG5Qb21wZXkvTVxcblBvbmNlL01cXG5Qb250Y2hhcnRyYWluL01cXG5Qb250aWFjL01cXG5Qb250aWFuYWsvTVxcblBvb2gvTVxcblBvb2xlL01cXG5Qb29uYS9NXFxuUG9wZS9NXFxuUG9wZXllL01cXG5Qb3BvY2F0ZXBldGwvTVxcblBvcHBlci9NXFxuUG9wcGlucy9NXFxuUG9wc2ljbGUvTVxcblBvcmZpcmlvL01cXG5Qb3JyaW1hL01cXG5Qb3JzY2hlL01cXG5Qb3J0L01SXFxuUG9ydGVyL01cXG5Qb3J0ZXJ2aWxsZS9NXFxuUG9ydGlhL01cXG5Qb3J0bGFuZC9NXFxuUG9ydG8vTVxcblBvcnRzbW91dGgvTVxcblBvcnR1Z2FsL01cXG5Qb3J0dWd1ZXNlL01cXG5Qb3NlaWRvbi9NXFxuUG9zdC9NXFxuUG9zdGdyZVNRTC9NXFxuUG90ZW1raW4vTVxcblBvdG9tYWMvTVxcblBvdHNkYW0vTVxcblBvdHRhd2F0b21pZS9NXFxuUG90dGVyL01cXG5Qb3R0cy9NXFxuUG90dHN0b3duL01cXG5Qb3VnaGtlZXBzaWUvTVxcblBvdW5kL01cXG5Qb3Vzc2luL01cXG5Qb3dlbGwvTVxcblBvd2VyUEMvTVxcblBvd2VyUG9pbnQvTVxcblBvd2Vycy9NXFxuUG93aGF0YW4vTVxcblBvem5hbi9NXFxuUHIvTVxcblByYWRhL01cXG5QcmFkby9NXFxuUHJhZXRvcmlhbi9NXFxuUHJhZ3VlL01cXG5QcmFpYS9NXFxuUHJha3JpdC9NXFxuUHJhdGNoZXR0L01cXG5QcmF0dC9NXFxuUHJhdmRhL01cXG5QcmF4aXRlbGVzL01cXG5QcmVha25lc3MvTVxcblByZWNhbWJyaWFuL01cXG5QcmVtaW5nZXIvTVxcblByZW15c2xpZC9NXFxuUHJlbnNhL01cXG5QcmVudGljZS9NXFxuUHJlc1xcblByZXNieXRlcmlhbi9TTVxcblByZXNieXRlcmlhbmlzbS9NU1xcblByZXNjb3R0L01cXG5QcmVzbGV5L01cXG5QcmVzdG9uL01cXG5QcmV0b3JpYS9NXFxuUHJpYW0vTVxcblByaWJpbG9mL01cXG5QcmljZS9NXFxuUHJpY2VsaW5lL01cXG5Qcmllc3RsZXkvTVxcblByaW5jZS9NXFxuUHJpbmNldG9uL01cXG5QcmluY2lwZS9NXFxuUHJpc2NpbGxhL01cXG5Qcml1cy9NXFxuUHJpdmF0ZVxcblByb2NydXN0ZWFuL01cXG5Qcm9jcnVzdGVzL01cXG5Qcm9jdGVyL01cXG5Qcm9jeW9uL01cXG5Qcm9mXFxuUHJvaGliaXRpb25cXG5Qcm9rb2ZpZXYvTVxcblByb21ldGhlYW4vTVxcblByb21ldGhldXMvTVxcblByb3BoZXRzXFxuUHJvc2VycGluYS9NXFxuUHJvc2VycGluZS9NXFxuUHJvdGFnb3Jhcy9NXFxuUHJvdGVyb3pvaWMvTVxcblByb3Rlc3RhbnQvTVNcXG5Qcm90ZXN0YW50aXNtL1NNXFxuUHJvdGV1cy9NXFxuUHJvdWRob24vTVxcblByb3VzdC9NXFxuUHJvdmVuY2FsL01TXFxuUHJvdmVuY2UvTVxcblByb3ZlcmJzXFxuUHJvdmlkZW5jZS9TTVxcblByb3ZvL01cXG5Qcm96YWMvTVNcXG5QcnVkZW5jZS9NXFxuUHJ1ZGVudGlhbC9NXFxuUHJ1aXR0L01cXG5QcnVzc2lhL01cXG5QcnVzc2lhbi9NU1xcblBydXQvTVxcblByeW9yL01cXG5Qc2FsbXMvTVxcblBzYWx0ZXIvTVNcXG5Qc3ljaGUvTVxcblB0L01cXG5QdGFoL01cXG5QdG9sZW1haWMvTVxcblB0b2xlbXkvU01cXG5QdS9NXFxuUHVjY2luaS9NXFxuUHVjay9NXFxuUHVja2V0dC9NXFxuUHVlYmxhL01cXG5QdWVibG8vTVxcblB1ZXJ0b1xcblB1Z2V0L01cXG5QdWdoL01cXG5QdWxhc2tpL01cXG5QdWxpdHplci9NXFxuUHVsbG1hbi9NU1xcblB1bmNoL01cXG5QdW5pYy9NXFxuUHVuamFiL01cXG5QdW5qYWJpL01cXG5QdXJhbmEvTVxcblB1cmNlbGwvTVxcblB1cmR1ZS9NXFxuUHVyaW0vTVNcXG5QdXJpbmEvTVxcblB1cml0YW4vTVxcblB1cml0YW5pc20vTVNcXG5QdXJ1cy9NXFxuUHVzYW4vTVxcblB1c2V5L01cXG5QdXNoa2luL01cXG5QdXNodHUvTVxcblB1dGluL01cXG5QdXRuYW0vTVxcblB1em8vTVxcblB2dFxcblB5VG9yY2gvTVxcblB5Z21hbGlvbi9NXFxuUHlnbXkvU01cXG5QeWxlL01cXG5QeW0vTVxcblB5bmNob24vTVxcblB5b25neWFuZy9NXFxuUHlvdHIvTVxcblB5cmVuZWVzL01cXG5QeXJleC9NU1xcblB5cnJoaWMvTVxcblB5dGhhZ29yYXMvTVxcblB5dGhhZ29yZWFuL01cXG5QeXRoaWFzL01cXG5QeXRob24vTVxcblFcXG5RQVxcblFCXFxuUUNcXG5RRURcXG5RTVxcblFXRVJUWVxcblFhZGRhZmkvTVxcblFhbnRhcy9NXFxuUWF0YXIvTVxcblFhdGFyaS9NU1xcblFpbmdkYW8vTVxcblFpbmdoYWkvTVxcblFpcWloYXIvTVxcblFvbS9NXFxuUXVhYWx1ZGUvTVxcblF1YWtlci9NU1xcblF1YWtlcmlzbS9TTVxcblF1YWxjb21tL01cXG5RdWFvYXIvTVxcblF1YXNpbW9kby9NXFxuUXVhdGVybmFyeS9NXFxuUXVheWxlL01cXG5RdWVcXG5RdWViZWMvTVxcblF1ZWJlY29pcy9NXFxuUXVlY2h1YS9NXFxuUXVlZW4vTVNcXG5RdWVlbnMvTVxcblF1ZWVuc2xhbmQvTVxcblF1ZW50aW4vTVxcblF1ZXR6YWxjb2F0bC9NXFxuUXVlem9uL01cXG5RdWluY3kvTVxcblF1aW5uL01cXG5RdWludGlsaWFuL01cXG5RdWludG9uL01cXG5RdWlyaW5hbC9NXFxuUXVpc2xpbmcvTVxcblF1aXRvL01cXG5RdWl4b3RlL01cXG5RdWl4b3Rpc20vTVxcblF1bXJhbi9NXFxuUXVvbnNldC9NXFxuUXVyYW5cXG5RdXJhbmljXFxuUi9NXFxuUkFGL01cXG5SQU0vU01cXG5SQklcXG5SQ1xcblJDQS9NXFxuUkNNUFxcblJEXFxuUkRBXFxuUkRTL01cXG5SRUlUXFxuUkVNL1NNXFxuUkZcXG5SRkMvU1xcblJGRFxcblJJXFxuUklGXFxuUklQXFxuUklTQ1xcblJOL01cXG5STkEvTVxcblJPRkxcXG5ST00vTVxcblJPVEMvTVxcblJQXFxuUlJcXG5SU0ZTUlxcblJTSVxcblJTVlxcblJTVlBcXG5SVEZNXFxuUlYvU01cXG5SYS9NXFxuUmFiYXQvTVxcblJhYmVsYWlzL01cXG5SYWJlbGFpc2lhbi9NXFxuUmFiaW4vTVxcblJhY2hhZWwvTVxcblJhY2hlbC9NXFxuUmFjaGVsbGUvTVxcblJhY2htYW5pbm9mZi9NXFxuUmFjaW5lL01cXG5SYWRjbGlmZi9NXFxuUmFkY2xpZmZlL01cXG5SYWUvTVxcblJhZmFlbC9NXFxuUmFmZmxlcy9NXFxuUmFnbmFyb2svTVxcblJhaW5pZXIvTVxcblJhbGVpZ2gvTVxcblJhbHBoL01cXG5SYW1hL01cXG5SYW1hZGEvTVxcblJhbWFkYW4vTVNcXG5SYW1ha3Jpc2huYS9NXFxuUmFtYW51amFuL01cXG5SYW1heWFuYS9NXFxuUmFtYm8vTVxcblJhbWlyZXovTVxcblJhbWlyby9NXFxuUmFtb24vTVxcblJhbW9uYS9NXFxuUmFtb3MvTVxcblJhbXNheS9NXFxuUmFtc2VzL01cXG5SYW1zZXkvTVxcblJhbmQvTVxcblJhbmRhbC9NXFxuUmFuZGFsbC9NXFxuUmFuZGVsbC9NXFxuUmFuZGkvTVxcblJhbmRvbHBoL01cXG5SYW5keS9NXFxuUmFuZ29vbi9NXFxuUmFua2luL01cXG5SYW5raW5lL01cXG5SYW91bC9NXFxuUmFwaGFlbC9NXFxuUmFwcGFwb3J0L01cXG5SYXB1bnplbC9NXFxuUmFxdWVsL01cXG5SYXNhbGdldGhpL01cXG5SYXNhbGhhZ3VlL01cXG5SYXNtdXNzZW4vTVxcblJhc3B1dGluL01cXG5SYXN0YVxcblJhc3RhYmFuL01cXG5SYXN0YWZhcmlhbi9NU1xcblJhc3RhZmFyaWFuaXNtXFxuUmF0aGVyL01cXG5SYXRsaWZmL01cXG5SYXVsL01cXG5SYXZlbC9NXFxuUmF3YWxwaW5kaS9NXFxuUmF5L01cXG5SYXlCYW4vTVxcblJheWJ1cm4vTVxcblJheWxlaWdoL01cXG5SYXltb25kL01cXG5SYXltdW5kby9NXFxuUmIvTVxcblJkXFxuUmUvTVxcblJlYWRpbmcvTVxcblJlYWdhbi9NXFxuUmVhZ2Fub21pY3MvTVxcblJlYWx0b3IvTVxcblJlYXNvbmVyL01cXG5SZWJhL01cXG5SZWJla2FoL01cXG5SZWNpZmUvTVxcblJlY29uc3RydWN0aW9uL01cXG5SZWRkaW5nL01cXG5SZWRlZW1lci9NXFxuUmVkZm9yZC9NXFxuUmVkZ3JhdmUvTVxcblJlZGlzL01cXG5SZWRtb25kL01cXG5SZWRzaGlmdC9NXFxuUmVlYm9rL01cXG5SZWVkL01cXG5SZWVzZS9NXFxuUmVldmVzL01cXG5SZWZvcm1hdGlvbi9NU1xcblJlZnVnaW8vTVxcblJlZ2dpZS9NXFxuUmVnaW5hL01cXG5SZWdpbmFlL01cXG5SZWdpbmFsZC9NXFxuUmVnb3IvTVxcblJlZ3VsdXMvTVxcblJlaG5xdWlzdC9NXFxuUmVpY2gvTVxcblJlaWNoc3RhZydzXFxuUmVpZC9NXFxuUmVpbGx5L01cXG5SZWluYWxkby9NXFxuUmVpbmhhcmR0L01cXG5SZWluaG9sZC9NXFxuUmVtYXJxdWUvTVxcblJlbWJyYW5kdC9NXFxuUmVtaW5ndG9uL01cXG5SZW11cy9NXFxuUmVuYS9NXFxuUmVuYWlzc2FuY2UvU01cXG5SZW5hc2NlbmNlXFxuUmVuYXVsdC9NXFxuUmVuZS9NXFxuUmVuZWUvTVxcblJlbm8vTVxcblJlbm9pci9NXFxuUmVwXFxuUmVwcmVzZW50YXRpdmVcXG5SZXB1YmxpY2FuL1NNXFxuUmVwdWJsaWNhbmlzbVxcblJlcXVpZW0vTVNcXG5SZXNpc3RhbmNlXFxuUmVzdG9yYXRpb24vTVxcblJlc3VycmVjdGlvblxcblJldWJlbi9NXFxuUmV1bmlvbi9NXFxuUmV1dGVycy9NXFxuUmV1dGhlci9NXFxuUmV2XFxuUmV2YS9NXFxuUmV2ZWxhdGlvbi9TTVxcblJldmVsYXRpb25zL01cXG5SZXZlcmUvTVxcblJldmVyZW5kL01cXG5SZXZsb24vTVxcblJleC9NXFxuUmV5ZXMvTVxcblJleWtqYXZpay9NXFxuUmV5bmEvTVxcblJleW5hbGRvL01cXG5SZXlub2xkcy9NXFxuUmYvTVxcblJoL01cXG5SaGVhL01cXG5SaGVlL01cXG5SaGVpbmdhdS9NXFxuUmhlbmlzaC9NXFxuUmhpYW5ub24vTVxcblJoaW5lL01cXG5SaGluZWxhbmQvTVxcblJob2RhL01cXG5SaG9kZS9TXFxuUmhvZGVzL01cXG5SaG9kZXNpYS9NXFxuUmhvZGVzaWFuXFxuUmhvbmRhL01cXG5SaG9uZS9NXFxuUmliYmVudHJvcC9NXFxuUmljYXJkby9NXFxuUmljZS9NXFxuUmljaC9NXFxuUmljaGFyZC9NU1xcblJpY2hhcmRzL01cXG5SaWNoYXJkc29uL01cXG5SaWNoZWxpZXUvTVxcblJpY2hpZS9NXFxuUmljaG1vbmQvTVxcblJpY2h0ZXIvTVxcblJpY2h0aG9mZW4vTVxcblJpY2svTVxcblJpY2tlbmJhY2tlci9NXFxuUmlja2V5L01cXG5SaWNraWUvTVxcblJpY2tvdmVyL01cXG5SaWNreS9NXFxuUmljby9NXFxuUmlkZGxlL01cXG5SaWRlL01cXG5SaWVmZW5zdGFobC9NXFxuUmllbC9NXFxuUmllbWFubi9NXFxuUmllc2xpbmcvTVNcXG5SaWdhL01cXG5SaWdlbC9NXFxuUmlnZ3MvTVxcblJpZ2h0XFxuUmlnb2JlcnRvL01cXG5SaWdvbGV0dG8vTVxcblJpbGV5L01cXG5SaWxrZS9NXFxuUmltYmF1ZC9NXFxuUmluZ2xpbmcvTVxcblJpbmdvL01cXG5SaW8vU01cXG5SaW9zL01cXG5SaXBsZXkvTVxcblJpc29yZ2ltZW50by9NXFxuUml0YS9NXFxuUml0YWxpbi9NXFxuUml0ei9NXFxuUml2YXMvTVxcblJpdmVyYS9NXFxuUml2ZXJzL01cXG5SaXZlcnNpZGUvTVxcblJpdmllcmEvTVNcXG5SaXlhZGgvTVxcblJpemFsL01cXG5Sbi9NXFxuUm9hY2gvTVxcblJvYW5va2UvTVxcblJvYi9NXFxuUm9iYmllL01cXG5Sb2JiaW4vTVNcXG5Sb2JiaW5zL01cXG5Sb2JieS9NXFxuUm9iZXJzb24vTVxcblJvYmVydC9NU1xcblJvYmVydGEvTVxcblJvYmVydG8vTVxcblJvYmVydHMvTVxcblJvYmVydHNvbi9NXFxuUm9iZXNvbi9NXFxuUm9iZXNwaWVycmUvTVxcblJvYmluL01cXG5Sb2JpbnNvbi9NXFxuUm9iaXR1c3Npbi9NXFxuUm9ibGVzL01cXG5Sb2Jzb24vTVxcblJvYnQvTVxcblJvYnluL01cXG5Sb2Njby9NXFxuUm9jaGEvTVxcblJvY2hhbWJlYXUvTVxcblJvY2hlL01cXG5Sb2NoZWxsZS9NXFxuUm9jaGVzdGVyL01cXG5Sb2NrL01cXG5Sb2NrZWZlbGxlci9NXFxuUm9ja2ZvcmQvTVxcblJvY2tpZXMvTVxcblJvY2tuZS9NXFxuUm9ja3dlbGwvTVxcblJvY2t5L1NNXFxuUm9kL01cXG5Sb2RkZW5iZXJyeS9NXFxuUm9kZXJpY2svTVxcblJvZGdlci9NU1xcblJvZGdlcnMvTVxcblJvZGluL01cXG5Sb2RuZXkvTVxcblJvZG9sZm8vTVxcblJvZHJpY2svTVxcblJvZHJpZ28vTVxcblJvZHJpZ3Vlei9NXFxuUm9kcmlxdWV6L01cXG5Sb2VnL01cXG5Sb2VudGdlblxcblJvZ2VsaW8vTVxcblJvZ2VyL01TXFxuUm9nZXJzL01cXG5Sb2dldC9NXFxuUm9qYXMvTVxcblJva3UvTVxcblJvbGFpZHMvTVxcblJvbGFuZC9NXFxuUm9sYW5kby9NXFxuUm9sZXgvTVxcblJvbGxhbmQvTVxcblJvbGxlcmJsYWRlL01cXG5Sb2xsaW5zL01cXG5Sb2xvZGV4L01cXG5Sb2x2YWFnL01cXG5Sb21cXG5Sb21hbi9NU1xcblJvbWFuZXNxdWUvTVNcXG5Sb21hbmlhL01cXG5Sb21hbmlhbi9NU1xcblJvbWFuby9NXFxuUm9tYW5vdi9NXFxuUm9tYW5zL01cXG5Sb21hbnNoL01cXG5Sb21hbnRpY2lzbVxcblJvbWFueS9TTVxcblJvbWUvU01cXG5Sb21lby9NXFxuUm9tZXJvL01cXG5Sb21tZWwvTVxcblJvbW5leS9NXFxuUm9tdWx1cy9NXFxuUm9uL01cXG5Sb25hbGQvTVxcblJvbmRhL01cXG5Sb25uaWUvTVxcblJvbm55L01cXG5Sb25zdGFkdC9NXFxuUm9udGdlblxcblJvb25leS9NXFxuUm9vc2V2ZWx0L01cXG5Sb290L01cXG5Sb3F1ZWZvcnQvU01cXG5Sb3JzY2hhY2gvTVxcblJvcnkvTVxcblJvc2EvTVxcblJvc2FsZXMvTVxcblJvc2FsaWUvTVxcblJvc2FsaW5kL01cXG5Sb3NhbGluZGEvTVxcblJvc2FseW4vTVxcblJvc2FubmEvTVxcblJvc2FubmUvTVxcblJvc2FyaW8vTVxcblJvc2NvZS9NXFxuUm9zZS9NXFxuUm9zZWFubi9NXFxuUm9zZWF1L01cXG5Sb3NlY3JhbnMvTVxcblJvc2VsbGEvTVxcblJvc2VtYXJpZS9NXFxuUm9zZW1hcnkvTVxcblJvc2VuYmVyZy9NXFxuUm9zZW5kby9NXFxuUm9zZW56d2VpZy9NXFxuUm9zZXR0YS9NXFxuUm9zaWNydWNpYW4vTVxcblJvc2llL01cXG5Sb3NseW4vTVxcblJvc3MvTVxcblJvc3NldHRpL01cXG5Sb3NzaW5pL01cXG5Sb3N0YW5kL01cXG5Sb3N0b3YvTVxcblJvc3Ryb3BvdmljaC9NXFxuUm9zd2VsbC9NXFxuUm90YXJpYW4vTVxcblJvdGgvTVxcblJvdGhrby9NXFxuUm90aHNjaGlsZC9NXFxuUm90dGVyZGFtL01cXG5Sb3R0d2VpbGVyL01cXG5Sb3VhdWx0L01cXG5Sb3Vya2UvTVxcblJvdXNzZWF1L01cXG5Sb3ZlL1JNXFxuUm92ZXIvTVxcblJvd2UvTVxcblJvd2VuYS9NXFxuUm93bGFuZC9NXFxuUm93bGluZy9NXFxuUm94YW5uZS9NXFxuUm94aWUvTVxcblJveHkvTVxcblJveS9NXFxuUm95YWwvTVxcblJveWNlL01cXG5Sb3plbGxlL01cXG5SdGVcXG5SdS9NSFxcblJ1YmFpeWF0L01cXG5SdWJiZXJtYWlkL01cXG5SdWJlbi9TTVxcblJ1YmVucy9NXFxuUnViaWNvbi9NU1xcblJ1YmlrL01cXG5SdWJpbi9NXFxuUnViaW5zdGVpbi9NXFxuUnVieS9NXFxuUnVjaGJhaC9NXFxuUnVkb2xmL01cXG5SdWRvbHBoL01cXG5SdWR5L01cXG5SdWR5YXJkL01cXG5SdWZ1cy9NXFxuUnVoci9NXFxuUnVpei9NXFxuUnVrZXlzZXIvTVxcblJ1bXBlbHN0aWx0c2tpbi9NXFxuUnVtc2ZlbGQvTVxcblJ1bm55bWVkZS9NXFxuUnVueW9uL01cXG5SdXBlcnQvTVxcblJ1c2gvTVxcblJ1c2hkaWUvTVxcblJ1c2htb3JlL01cXG5SdXNraW4vTVxcblJ1c3MvTVxcblJ1c3NlbC9NXFxuUnVzc2VsbC9NXFxuUnVzc2lhL01cXG5SdXNzaWFuL1NNXFxuUnVzc28vTVxcblJ1c3RiZWx0L01cXG5SdXN0eS9NXFxuUnV0YW4vTVxcblJ1dGdlcnMvTVxcblJ1dGgvTVxcblJ1dGhlcmZvcmQvTVxcblJ1dGhpZS9NXFxuUnV0bGVkZ2UvTVxcblJ3YW5kYS9NU1xcblJ3YW5kYW4vU01cXG5Sd3lcXG5SeFxcblJ5XFxuUnlhbi9NXFxuUnlkYmVyZy9NXFxuUnlkZXIvTVxcblJ5dWt5dS9NXFxuUy9NTlxcblNBXFxuU0FDXFxuU0FMVC9NXFxuU0FNL01cXG5TQVAvTVxcblNBUlMvTVxcblNBU0VcXG5TQVRcXG5TQkFcXG5TQy9NXFxuU0NTSS9NXFxuU0RcXG5TRElcXG5TRS9NXFxuU0VBVE9cXG5TRUMvTVxcblNGXFxuU0dNTC9NXFxuU0lEUy9NXFxuU0pcXG5TSldcXG5TS1xcblNMUlxcblNPL1NcXG5TT0IvTVxcblNPUC9NXFxuU09TL01cXG5TT1Nlc1xcblNQQ0FcXG5TUEZcXG5TUUxcXG5TUUxpdGUvTVxcblNST1xcblNTXFxuU1NBXFxuU1NFL01cXG5TU1NcXG5TU1RcXG5TU1cvTVxcblNUXFxuU1REXFxuU1RPTFxcblNVU0UvTVxcblNVVlxcblNWTi9NXFxuU1cvTVxcblNXQUtcXG5TV0FUXFxuU2FhYi9NXFxuU2Fhci9NXFxuU2FhcmluZW4vTVxcblNhYXRjaGkvTVxcblNhYmJhdGgvTVxcblNhYmJhdGhzXFxuU2FiaWsvTVxcblNhYmluL01cXG5TYWJpbmEvTVxcblNhYmluZS9NXFxuU2FicmUvTVxcblNhYnJpbmEvTVxcblNhY2FqYXdlYS9NXFxuU2FjY28vTVxcblNhY2hzL01cXG5TYWNyYW1lbnRvL01cXG5TYWRhdC9NXFxuU2FkZGFtL01cXG5TYWRkdWNlZS9NXFxuU2FkZS9NXFxuU2FkaWUvTVxcblNhZHIvTVxcblNhZmF2aWQvTVxcblNhZmV3YXkvTVxcblNhZ2FuL01cXG5TYWdpbmF3L01cXG5TYWdpdHRhcml1cy9NU1xcblNhaGFyYS9NXFxuU2FoYXJhbi9NXFxuU2FoZWwvTVxcblNhaWdvbi9NXFxuU2FpcGgvTVxcblNha2FpL01cXG5TYWtoYS9NXFxuU2FraGFsaW4vTVxcblNha2hhcm92L01cXG5TYWtpL01cXG5TYWtzL01cXG5TYWwvTVlcXG5TYWxhZGluL01cXG5TYWxhZG8vTVxcblNhbGFtaXMvTVxcblNhbGFzL01cXG5TYWxhemFyL01cXG5TYWxlbS9NXFxuU2FsZXJuby9NXFxuU2FsZXNmb3JjZS9NXFxuU2FsaW5hcy9NXFxuU2FsaW5nZXIvTVxcblNhbGlzYnVyeS9NXFxuU2FsaXNoL01cXG5TYWxrL01cXG5TYWxsaWUvTVxcblNhbGx1c3QvTVxcblNhbGx5L01cXG5TYWxvbWUvTVxcblNhbG9uaWthL01cXG5TYWx0b24vTVxcblNhbHZhZG9yL01cXG5TYWx2YWRvcmFuL1NNXFxuU2FsdmFkb3JlYW4vTVNcXG5TYWx2YWRvcmlhbi9NU1xcblNhbHZhdG9yZS9NXFxuU2Fsd2Vlbi9NXFxuU2FseXV0L01cXG5TYW0vTVxcblNhbWFudGhhL01cXG5TYW1hci9NXFxuU2FtYXJhL01cXG5TYW1hcml0YW4vTVNcXG5TYW1hcmthbmQvTVxcblNhbW1pZS9NXFxuU2FtbXkvTVxcblNhbW9hL01cXG5TYW1vYW4vU01cXG5TYW1vc2V0L01cXG5TYW1veWVkL01cXG5TYW1wc29uL01cXG5TYW1zb24vTVxcblNhbXNvbml0ZS9NXFxuU2Ftc3VuZy9NXFxuU2FtdWVsL01cXG5TYW11ZWxzb24vTVxcblNhbidhXFxuU2FuL01cXG5TYW5hL01cXG5TYW5jaGV6L01cXG5TYW5jaG8vTVxcblNhbmQvWk1cXG5TYW5kYnVyZy9NXFxuU2FuZGVycy9NXFxuU2FuZGluaXN0YS9NXFxuU2FuZG92YWwvTVxcblNhbmRyYS9NXFxuU2FuZHkvTVxcblNhbmZvcmQvTVxcblNhbmZvcml6ZWQvTVxcblNhbmcvTVJcXG5TYW5nZXIvTVxcblNhbmhlZHJpbi9NXFxuU2Fua2EvTVxcblNhbmthcmEvTVxcblNhbnNrcml0L01cXG5TYW50YS9NXFxuU2FudGFuYS9NXFxuU2FudGF5YW5hL01cXG5TYW50ZXJpYS9NXFxuU2FudGlhZ28vTVxcblNhbnRvcy9NXFxuU2FwcGhvL01cXG5TYXBwb3JvL01cXG5TYXJhL01cXG5TYXJhY2VuL01TXFxuU2FyYWdvc3NhL01cXG5TYXJhaC9NXFxuU2FyYWpldm8vTVxcblNhcmFuL01cXG5TYXJhc290YS9NXFxuU2FyYXRvdi9NXFxuU2FyYXdhay9NXFxuU2FyZGluaWEvTVxcblNhcmdhc3NvL01cXG5TYXJnZW50L01cXG5TYXJnb24vTVxcblNhcm5vZmYvTVxcblNhcm95YW4vTVxcblNhcnRvL01cXG5TYXJ0cmUvTVxcblNhc2hhL01cXG5TYXNrXFxuU2Fza2F0Y2hld2FuL01cXG5TYXNrYXRvb24vTVxcblNhc3F1YXRjaC9NU1xcblNhc3Nhbmlhbi9NXFxuU2Fzc29vbi9NXFxuU2F0L01cXG5TYXRhbi9NXFxuU2F0YW5pc20vTVxcblNhdGFuaXN0L01cXG5TYXR1cmRheS9NU1xcblNhdHVybi9NXFxuU2F0dXJuYWxpYS9NXFxuU2F1ZGkvTVNcXG5TYXVsL01cXG5TYXVuZGVycy9NXFxuU2F1bmRyYS9NXFxuU2F1c3N1cmUvTVxcblNhdXRlcm5lc1xcblNhdmFnZS9NXFxuU2F2YW5uYWgvTVxcblNhdmlvci9NXFxuU2F2b25hcm9sYS9NXFxuU2F2b3kvTVxcblNhdm95YXJkL01cXG5TYXd5ZXIvTVxcblNheG9uL01TXFxuU2F4b255L01cXG5TYXllcnMvTVxcblNiL01cXG5TYy9NXFxuU2NhbGEvTVxcblNjYW5cXG5TY2FuZGluYXZpYS9NXFxuU2NhbmRpbmF2aWFuL01TXFxuU2NhcmFtb3VjaC9NXFxuU2NhcmJvcm91Z2gvTVxcblNjYXJsYXR0aS9NXFxuU2NoZWF0L01cXG5TY2hlZGFyL01cXG5TY2hlaGVyYXphZGUvTVxcblNjaGVsbGluZy9NXFxuU2NoZW5lY3RhZHkvTVxcblNjaGlhcGFyZWxsaS9NXFxuU2NoaWNrL01cXG5TY2hpbGxlci9NXFxuU2NoaW5kbGVyL01cXG5TY2hsZXNpbmdlci9NXFxuU2NobGllbWFubi9NXFxuU2NobGl0ei9NXFxuU2NobG9zcy9NXFxuU2NobWlkdC9NXFxuU2NobmFiZWwvTVxcblNjaG5hdXplci9NXFxuU2NobmVpZGVyL01cXG5TY2hvZW5iZXJnL01cXG5TY2hvcGVuaGF1ZXIvTVxcblNjaHJpZWZmZXIvTVxcblNjaHJvZGluZ2VyL01cXG5TY2hyb2VkZXIvTVxcblNjaHViZXJ0L01cXG5TY2h1bHR6L01cXG5TY2h1bHovTVxcblNjaHVtYW5uL01cXG5TY2h1bXBldGVyL01cXG5TY2h1eWxlci9NXFxuU2NodXlsa2lsbC9NXFxuU2Nod2FydHovTVxcblNjaHdhcnplbmVnZ2VyL01cXG5TY2h3YXJ6a29wZi9NXFxuU2Nod2VpdHplci9NXFxuU2Nod2VwcGVzL01cXG5TY2h3aW5nZXIvTVxcblNjaHdpbm4vTVxcblNjaWVudG9sb2dpc3QvU01cXG5TY2llbnRvbG9neS9NXFxuU2NpcGlvL01cXG5TY29wZXMvTVxcblNjb3JwaW8vU01cXG5TY29ycGl1cy9NXFxuU2NvcnNlc2UvTVxcblNjb3QvU01cXG5TY290Y2gvTVNcXG5TY290Y2htYW4vTVxcblNjb3RjaG1lbi9NXFxuU2NvdGNod29tYW4vTVxcblNjb3RjaHdvbWVuL01cXG5TY290aWEvTVxcblNjb3RsYW5kL01cXG5TY290c21hbi9NXFxuU2NvdHNtZW4vTVxcblNjb3Rzd29tYW4vTVxcblNjb3Rzd29tZW4vTVxcblNjb3R0L01cXG5TY290dGllL1NNXFxuU2NvdHRpc2gvTVxcblNjb3R0c2RhbGUvTVxcblNjcmFiYmxlL01TXFxuU2NyYW50b24vTVxcblNjcmlhYmluL01cXG5TY3JpYm5lci9NXFxuU2NyaXB0dXJlL1NNXFxuU2Nyb29nZS9NXFxuU2NydWdncy9NXFxuU2N1ZC9NXFxuU2N1bGxleS9NXFxuU2N5bGxhL01cXG5TY3l0aGlhL01cXG5TY3l0aGlhbi9NXFxuU2UvTUhcXG5TZWFib3JnL01cXG5TZWFncmFtL01cXG5TZWFuL01cXG5TZWFycy9NXFxuU2Vhc2lkZS9NXFxuU2VhdHRsZS9NXFxuU2ViYXN0aWFuL01cXG5TZWJyaW5nL01cXG5TZWNcXG5TZWNvbmFsL01cXG5TZWNyZXRhcmlhdC9NXFxuU2VjcmV0YXJ5XFxuU2VkZXIvTVNcXG5TZWRuYS9NXFxuU2VlYmVjay9NXFxuU2VlZ2VyL01cXG5TZWdhL01cXG5TZWdvdmlhL01cXG5TZWdyZS9NXFxuU2VndW5kby9NXFxuU2Vnd2F5L1NcXG5TZWlrby9NXFxuU2VpbmUvTVxcblNlaW5mZWxkL01cXG5TZWpvbmcvTVxcblNlbGFzc2llL01cXG5TZWxlY3RyaWMvTVxcblNlbGVuYS9NXFxuU2VsZXVjaWQvTVxcblNlbGV1Y3VzL01cXG5TZWxpbS9NXFxuU2VsanVrL01cXG5TZWxraXJrL01cXG5TZWxsZXJzL01cXG5TZWxtYS9NXFxuU2Vsem5pY2svTVxcblNlbWFyYW5nL01cXG5TZW1pbm9sZS9NU1xcblNlbWlyYW1pcy9NXFxuU2VtaXRlL01TXFxuU2VtaXRpYy9TTVxcblNlbXRleC9NXFxuU2VuYXRlL01TXFxuU2VuZGFpL01cXG5TZW5lY2EvTVNcXG5TZW5lZ2FsL01cXG5TZW5lZ2FsZXNlL01cXG5TZW5naG9yL01cXG5TZW5pb3IvTVxcblNlbm5hY2hlcmliL01cXG5TZW5uZXR0L01cXG5TZW5zdXJyb3VuZC9NXFxuU2VvdWwvTVxcblNlcFxcblNlcGhhcmRpL01cXG5TZXBveS9NXFxuU2VwdC9NXFxuU2VwdGVtYmVyL01TXFxuU2VwdHVhZ2ludC9NU1xcblNlcXVveWEvTVxcblNlcmIvU01cXG5TZXJiaWEvTVxcblNlcmJpYW4vTVNcXG5TZXJlbmEvTVxcblNlcmVuZ2V0aS9NXFxuU2VyZ2VpL01cXG5TZXJnaW8vTVxcblNlcnBlbnMvTVxcblNlcnJhL01cXG5TZXJyYW5vL01cXG5TZXQvTVxcblNldGgvTVxcblNldG9uL01cXG5TZXVyYXQvTVxcblNldXNzL01cXG5TZXZhc3RvcG9sL01cXG5TZXZlcm4vTVxcblNldmVydXMvTVxcblNldmlsbGUvTVxcblNldnJlcy9NXFxuU2V3YXJkL01cXG5TZXh0YW5zL01cXG5TZXh0b24vTVxcblNleWNoZWxsZXMvTVxcblNleWZlcnQvTVxcblNleW1vdXIvTVxcblNndFxcblNoYWFueGkvTVxcblNoYWNrbGV0b24vTVxcblNoYWZmZXIvTVxcblNoYWgvTVxcblNoYWthL01cXG5TaGFrZXJcXG5TaGFrZXNwZWFyZS9NXFxuU2hha2VzcGVhcmVhbi9NXFxuU2hhbmEvTVxcblNoYW5kb25nL01cXG5TaGFuZS9NXFxuU2hhbmdoYWkvTVxcblNoYW5rYXJhL01cXG5TaGFubmEvTVxcblNoYW5ub24vTVxcblNoYW50dW5nL01cXG5TaGFueGkvTVxcblNoYXBpcm8vTVxcblNoYXJlUG9pbnQvTVxcblNoYXJpJ2EvTVxcblNoYXJpL01cXG5TaGFyaWYvTVxcblNoYXJsZW5lL01cXG5TaGFyb24vTVxcblNoYXJwL01cXG5TaGFycGUvTVxcblNoYXJyb24vTVxcblNoYXN0YS9NXFxuU2hhdWxhL01cXG5TaGF1bi9NXFxuU2hhdW5hL01cXG5TaGF2aWFuL01cXG5TaGF2dW90L01cXG5TaGF3L01cXG5TaGF3bi9NXFxuU2hhd25hL01cXG5TaGF3bmVlL1NNXFxuU2hjaGFyYW5za3kvTVxcblNoZWEvTVxcblNoZWJhL01cXG5TaGViZWxpL01cXG5TaGVib3lnYW4vTVxcblNoZWVuYS9NXFxuU2hlZXRyb2NrL01cXG5TaGVmZmllbGQvTVxcblNoZWlsYS9NXFxuU2hlbGJ5L01cXG5TaGVsZG9uL01cXG5TaGVsaWEvTVxcblNoZWxsL01cXG5TaGVsbGV5L01cXG5TaGVsbHkvTVxcblNoZWx0b24vTVxcblNoZW5hbmRvYWgvTVxcblNoZW55YW5nL01cXG5TaGVvbC9NXFxuU2hlcGFyZC9NXFxuU2hlcGhlcmQvTVxcblNoZXBwYXJkL01cXG5TaGVyYXRhbi9NXFxuU2hlcmF0b24vTVxcblNoZXJlZS9NXFxuU2hlcmkvTVxcblNoZXJpZGFuL01cXG5TaGVybG9jay9NXFxuU2hlcm1hbi9NXFxuU2hlcnBhL01cXG5TaGVycmkvTVxcblNoZXJyaWUvTVxcblNoZXJyeS9NXFxuU2hlcndvb2QvTVxcblNoZXJ5bC9NXFxuU2hldGxhbmQvU01cXG5TaGV0bGFuZHMvTVxcblNoZXZhcmRuYWR6ZS9NXFxuU2hldmF0L01cXG5TaGknaXRlL01cXG5TaGllbGRzL01cXG5TaGlpdGUvTVNcXG5TaGlqaWF6aHVhbmcvTVxcblNoaWtva3UvTVxcblNoaWxsb25nL01cXG5TaGlsb2gvTVxcblNoaW50by9NU1xcblNoaW50b2lzbS9NU1xcblNoaW50b2lzdC9NU1xcblNoaXJhei9NXFxuU2hpcmxleS9NXFxuU2hpdmEvTVxcblNob2NrbGV5L01cXG5TaG9ydC9NXFxuU2hvcnRob3JuL01cXG5TaG9zaG9uZS9TTVxcblNob3N0YWtvdml0Y2gvTVxcblNocmVrL01cXG5TaHJldmVwb3J0L01cXG5TaHJpbmVyL01cXG5TaHJvcHNoaXJlL01cXG5TaHVsYS9NXFxuU2h5bG9jay9NXFxuU2h5bG9ja2lhbi9NXFxuU2kvTVxcblNpYW0vTVxcblNpYW1lc2UvTVxcblNpYmVsaXVzL01cXG5TaWJlcmlhL01cXG5TaWJlcmlhbi9NU1xcblNpYnlsL01cXG5TaWNodWFuL01cXG5TaWNpbGlhbi9TTVxcblNpY2lseS9NXFxuU2lkL01cXG5TaWRkaGFydGhhL01cXG5TaWRuZXkvTVxcblNpZWdmcmllZC9NXFxuU2llbWVucy9NXFxuU2llcnBpbnNraS9NXFxuU2llcnJhc1xcblNpZ2lzbXVuZC9NXFxuU2lnbXVuZC9NXFxuU2lndXJkL01cXG5TaWhhbm91ay9NXFxuU2lraC9NXFxuU2lraGlzbVxcblNpa2hzXFxuU2lra2ltL01cXG5TaWtraW1lc2UvTVxcblNpa29yc2t5L01cXG5TaWxhcy9NXFxuU2lsZXNpYS9NXFxuU2lsdXJpYW4vU01cXG5TaWx2YS9NXFxuU2lsdmlhL01cXG5TaW1lbm9uL01cXG5TaW1tZW50YWwvTVxcblNpbW1vbnMvTVxcblNpbW9uL01cXG5TaW1vbmUvTVxcblNpbXBzb24vU01cXG5TaW1wc29ucy9NXFxuU2ltcHNvbnZpbGxlL01cXG5TaW1zL01cXG5TaW5haS9NXFxuU2luYXRyYS9NXFxuU2luYmFkL01cXG5TaW5jbGFpci9NXFxuU2luZGJhZC9NXFxuU2luZGhpL01cXG5TaW5nYXBvcmUvTVxcblNpbmdhcG9yZWFuL1NNXFxuU2luZ2VyL01cXG5TaW5naC9NXFxuU2luZ2xldG9uL01cXG5TaW5oYWxlc2UvTVxcblNpbmtpYW5nL01cXG5TaW91eC9NXFxuU2lyL1NNXFxuU2lyaXVzL01cXG5TaXN0aW5lL01cXG5TaXN5cGhlYW4vTVxcblNpc3lwaHVzL01cXG5TaXZhL01cXG5TaXZhbi9NXFxuU2phZWxsYW5kL01cXG5Ta2lubmVyL01cXG5Ta2lwcHkvTVxcblNrb3BqZS9NXFxuU2t5ZS9NXFxuU2t5bGFiL01cXG5Ta3lwZS9NXFxuU2xhY2t3YXJlL01cXG5TbGFzaGRvdC9NXFxuU2xhdGVyL01cXG5TbGF2L1NNXFxuU2xhdmljL01cXG5TbGF2b25pYy9NXFxuU2xpZGVsbC9NXFxuU2xpbmt5L01cXG5TbG9hbi9NXFxuU2xvYW5lL01cXG5TbG9jdW0vTVxcblNsb3Zhay9TTVxcblNsb3Zha2lhL01cXG5TbG92YWtpYW5cXG5TbG92ZW5lL1NNXFxuU2xvdmVuaWEvTVxcblNsb3Zlbmlhbi9NU1xcblNsdXJwZWUvTVxcblNtL01cXG5TbWFsbC9NXFxuU21ldGFuYS9NXFxuU21pcm5vZmYvTVxcblNtaXRoL01cXG5TbWl0aHNvbi9NXFxuU21pdGhzb25pYW4vTVxcblNtb2tleS9NXFxuU21vbGVuc2svTVxcblNtb2xsZXR0L01cXG5TbXV0cy9NXFxuU215cm5hXFxuU24vTVxcblNuYWtlL01cXG5TbmFwcGxlL01cXG5TbmVhZC9NXFxuU25lbGwvTVxcblNuaWNrZXJzL01cXG5TbmlkZXIvTVxcblNub29weS9NXFxuU25vdy9NXFxuU25vd2JlbHQvTVxcblNueWRlci9NXFxuU29hdmUvTVxcblNvY1xcblNvY2FzdGVlL01cXG5Tb2NvcnJvL01cXG5Tb2NyYXRlcy9NXFxuU29jcmF0aWMvTVxcblNvZGR5L01cXG5Tb2RvbS9NXFxuU29maWEvTVxcblNvaG8vTVxcblNvbC9NXFxuU29saXMvTVxcblNvbG9tb24vTVxcblNvbG9uL01cXG5Tb2x6aGVuaXRzeW4vTVxcblNvbWFsaS9TTVxcblNvbWFsaWEvTVxcblNvbWFsaWFuL01TXFxuU29tbWUvTVxcblNvbW96YS9NXFxuU29uL01cXG5Tb25kaGVpbS9NXFxuU29uZHJhL01cXG5Tb25naGFpL01cXG5Tb25naHVhL01cXG5Tb25pYS9NXFxuU29uamEvTVxcblNvbm55L01cXG5Tb25vcmEvTVxcblNvbnRhZy9NXFxuU29ueS9NXFxuU29ueWEvTVxcblNvcGhpYS9NXFxuU29waGllL01cXG5Tb3Bob2NsZWFuL01cXG5Tb3Bob2NsZXMvTVxcblNvcHdpdGgvTVxcblNvcmJvbm5lL01cXG5Tb3NhL01cXG5Tb3RvL01cXG5Tb3VwaGFub3V2b25nL01cXG5Tb3VyY2Vmb3JnZS9NXFxuU291c2EvTVxcblNvdXRoL01cXG5Tb3V0aGFtcHRvbi9NXFxuU291dGhlYXN0L01TXFxuU291dGhlcm5lci9TTVxcblNvdXRoZXkvTVxcblNvdXRoc1xcblNvdXRod2VzdC9NU1xcblNvdmlldC9NXFxuU293ZXRvL01cXG5Tb3lpbmthL01cXG5Tb3l1ei9NXFxuU3BcXG5TcGFhdHovTVxcblNwYWNrbGUvTVxcblNwYWhuL01cXG5TcGFpbi9NXFxuU3BhbS9NXFxuU3BhblxcblNwYW5nbGlzaFxcblNwYW5pYXJkL1NNXFxuU3BhbmlzaC9NXFxuU3BhcmtzL01cXG5TcGFydGEvTVxcblNwYXJ0YWN1cy9NXFxuU3BhcnRhbi9NU1xcblNwYXJ0YW5idXJnL01cXG5TcGVhcnMvTVxcblNwZWVyL01cXG5TcGVuY2UvUk1cXG5TcGVuY2VyL01cXG5TcGVuY2VyaWFuL01cXG5TcGVuZ2xlci9NXFxuU3BlbmdsZXJpYW4vTVxcblNwZW5zZXIvTVxcblNwZW5zZXJpYW4vTVxcblNwZXJyeS9NXFxuU3BoaW54L01cXG5TcGljYS9NXFxuU3BpZWxiZXJnL01cXG5TcGlsbGFuZS9NXFxuU3Bpbm96YS9NXFxuU3BpbngvTVxcblNwaXJvL01cXG5TcGlyb2dyYXBoL01cXG5TcGl0c2Jlcmdlbi9NXFxuU3BpdHovTVxcblNwb2NrL01cXG5TcG9rYW5lL01cXG5TcHJpbmdkYWxlL01cXG5TcHJpbmdmaWVsZC9NXFxuU3ByaW5nc3RlZW4vTVxcblNwcmludC9NXFxuU3ByaXRlL01cXG5TcHV0bmlrL01cXG5TcVxcblNxdWFudG8vTVxcblNxdWliYi9NXFxuU3IvTVxcblNyaW5hZ2FyL01cXG5Tcml2aWpheWEvTVxcblN0XFxuU3RhXFxuU3RhY2V5L01cXG5TdGFjaS9NXFxuU3RhY2llL01cXG5TdGFjeS9NXFxuU3RhZWwvTVxcblN0YWZmb3JkL01cXG5TdGFpck1hc3Rlci9NXFxuU3RhbGluL01cXG5TdGFsaW5ncmFkL01cXG5TdGFsaW5pc3QvTVxcblN0YWxsb25lL01cXG5TdGFtZm9yZC9NXFxuU3Rhbi9NXFxuU3RhbmRpc2gvTVxcblN0YW5mb3JkL01cXG5TdGFuaXNsYXZza3kvTVxcblN0YW5sZXkvTVxcblN0YW50b24vTVxcblN0YXBsZXMvTVxcblN0YXJidWNrcy9NXFxuU3RhcmsvTVxcblN0YXJrZXkvTVxcblN0YXJyL01cXG5TdGF0ZW4vTVxcblN0YXRlc1xcblN0YXViYWNoL01cXG5TdGF1bnRvbi9NXFxuU3RlXFxuU3RlYWRpY2FtL01cXG5TdGVlbGUvTVxcblN0ZWZhbi9NXFxuU3RlZmFuaWUvTVxcblN0ZWluL01SXFxuU3RlaW5iZWNrL01cXG5TdGVpbmVtL01cXG5TdGVpbmVyL01cXG5TdGVpbm1ldHovTVxcblN0ZWlud2F5L01cXG5TdGVsbGEvTVxcblN0ZW5kaGFsL01cXG5TdGVuZ2VsL01cXG5TdGVwaGFuL01cXG5TdGVwaGFuaWUvTVxcblN0ZXBoZW4vTVNcXG5TdGVwaGVucy9NXFxuU3RlcGhlbnNvbi9NXFxuU3RlcmxpbmcvTVxcblN0ZXJuL01cXG5TdGVybmUvTVxcblN0ZXJuby9NXFxuU3RldHNvbi9NXFxuU3RldWJlbi9NXFxuU3RldWJlbnZpbGxlL01cXG5TdGV2ZS9NXFxuU3RldmVuL01TXFxuU3RldmVucy9NXFxuU3RldmVuc29uL01cXG5TdGV2aWUvTVxcblN0ZXdhcnQvTVxcblN0aWVnbGl0ei9NXFxuU3RpbHRvbi9TTVxcblN0aW1zb24vTVxcblN0aW5lL01cXG5TdGlybGluZy9NXFxuU3RvY2toYXVzZW4vTVxcblN0b2NraG9sbS9NXFxuU3RvY2t0b24vTVxcblN0b2ljL1NNXFxuU3RvaWNpc20vTVNcXG5TdG9rZXMvTVxcblN0b2xpY2huYXlhL01cXG5TdG9seXBpbi9NXFxuU3RvbmUvTVxcblN0b25laGVuZ2UvTVxcblN0b3BwYXJkL01cXG5TdG91dC9NXFxuU3Rvd2UvTVxcblN0cmFiby9NXFxuU3RyYWRpdmFyaVxcblN0cmFkaXZhcml1cy9NXFxuU3RyYXNib3VyZy9NXFxuU3RyYXVzcy9NXFxuU3RyYXZpbnNreS9NXFxuU3RyZWlzYW5kL01cXG5TdHJpY2tsYW5kL01cXG5TdHJpbmRiZXJnL01cXG5TdHJvbWJvbGkvTVxcblN0cm9uZy9NXFxuU3R1L01cXG5TdHVhcnQvTVNcXG5TdHVkZWJha2VyL01cXG5TdHV0dGdhcnQvTVxcblN0dXl2ZXNhbnQvTVxcblN0eWdpYW4vTVxcblN0eXJvZm9hbS9TTVxcblN0eXJvbi9NXFxuU3R5eC9NXFxuU3VhcmV6L01cXG5TdWJhcnUvTVxcblN1Y3JlL01cXG5TdWNyZXRzL01cXG5TdWRhbi9NXFxuU3VkYW5lc2UvTVxcblN1ZGV0ZW5sYW5kL01cXG5TdWRva3UvTVxcblN1ZHJhL01cXG5TdWUvTVxcblN1ZXRvbml1cy9NXFxuU3Vlei9NXFxuU3VmZm9say9NXFxuU3VmaS9NXFxuU3VmaXNtL01cXG5TdWhhcnRvL01cXG5TdWkvTVxcblN1a2Fybm8vTVxcblN1a2tvdFxcblN1bGF3ZXNpL01cXG5TdWxlaW1hbi9NXFxuU3VsbGEvTVxcblN1bGxpdmFuL01cXG5TdW1hdHJhL01cXG5TdW1hdHJhbi9TTVxcblN1bWVyaWEvTVxcblN1bWVyaWFuL1NNXFxuU3VtbWVyL01TXFxuU3VtbWVycy9NXFxuU3VtbmVyL01cXG5TdW10ZXIvTVxcblN1bi9TTVxcblN1bmJlYW0vTVxcblN1bmJlbHQvTVxcblN1bmRhbmVzZS9NXFxuU3VuZGFzL01cXG5TdW5kYXkvTVNcXG5TdW5nL01cXG5TdW5raXN0L01cXG5TdW5uaS9TTVxcblN1bm5pdGUvTVNcXG5TdW5ueXZhbGUvTVxcblN1cGVyYm93bC9NXFxuU3VwZXJmdW5kL01cXG5TdXBlcmdsdWUvTVxcblN1cGVyaW9yL01cXG5TdXBlcm1hbi9NXFxuU3VwdFxcblN1cmFiYXlhL01cXG5TdXJhdC9NXFxuU3VyaW5hbWUvTVxcblN1cmluYW1lc2VcXG5TdXJ5YS9NXFxuU3VzYW4vTVxcblN1c2FuYS9NXFxuU3VzYW5uYS9NXFxuU3VzYW5uZS9NXFxuU3VzaWUvTVxcblN1c3F1ZWhhbm5hL01cXG5TdXNzZXgvTVxcblN1dGhlcmxhbmQvTVxcblN1dHRvbi9NXFxuU3V2YS9NXFxuU3V3YW5lZS9NXFxuU3V6YW5uZS9NXFxuU3V6ZXR0ZS9NXFxuU3V6aG91L01cXG5TdXp1a2kvTVxcblN1enkvTVxcblN2YWxiYXJkL01cXG5TdmVuL01cXG5TdmVuZ2FsaS9NXFxuU3ZlcmRsb3Zza1xcblN3YWhpbGkvU01cXG5Td2FtbWVyZGFtL01cXG5Td2FuZWUvTVxcblN3YW5zZWEvTVxcblN3YW5zb24vTVxcblN3YXppL1NNXFxuU3dhemlsYW5kL01cXG5Td2VkL05cXG5Td2VkZS9TTVxcblN3ZWRlbi9NXFxuU3dlZGVuYm9yZy9NXFxuU3dlZGlzaC9NXFxuU3dlZW5leS9NXFxuU3dlZXQvTVxcblN3aWZ0L01cXG5Td2luYnVybmUvTVxcblN3aXNzL01TXFxuU3dpc3NhaXIvTVxcblN3aXR6XFxuU3dpdHplcmxhbmQvTVxcblN5YmlsL01cXG5TeWRuZXkvTVxcblN5a2VzL01cXG5TeWx2ZXN0ZXIvTVxcblN5bHZpYS9NXFxuU3lsdmllL01cXG5TeW5nZS9NXFxuU3lyYWN1c2UvTVxcblN5cmlhL01cXG5TeXJpYWMvTVxcblN5cmlhbi9NU1xcblN6aWxhcmQvTVxcblN6eW1ib3Jza2EvTVxcblQnYW5nL01cXG5UL01ER1xcblRBXFxuVEFSUFxcblRCL01cXG5UQkFcXG5URFxcblRERFxcblRFRkxcXG5URUxORVQvU1xcblRFTE5FVFRlZFxcblRFTE5FVFRpbmdcXG5URVNMXFxuVEVTT0xcXG5UR0lGXFxuVEhDXFxuVEtPL01cXG5UTEMvTVxcblRNXFxuVE5cXG5UTlQvTVxcblRPRUZMXFxuVFFNXFxuVFYvU01cXG5UVkFcXG5UV0EvTVxcblRXWFxcblRYXFxuVGEvTVxcblRhYmFzY28vU01cXG5UYWJhdGhhL01cXG5UYWJlcm5hY2xlL01TXFxuVGFiaXRoYS9NXFxuVGFicml6L01TXFxuVGFjaXR1cy9NXFxuVGFjb21hL01cXG5UYWQvTVxcblRhZHpoaWsvTVxcblRhZWd1L01cXG5UYWVqb24vTVxcblRhZnQvTVxcblRhZ2Fsb2cvU01cXG5UYWdvcmUvTVxcblRhZ3VzL01cXG5UYWhpdGkvTVxcblRhaGl0aWFuL01TXFxuVGFob2UvTVxcblRhaWNodW5nL01cXG5UYWluYW5cXG5UYWluZS9NXFxuVGFpcGVpL01cXG5UYWlwaW5nL01cXG5UYWl3YW4vTVxcblRhaXdhbmVzZS9NXFxuVGFpeXVhbi9NXFxuVGFqaWtpc3Rhbi9NXFxuVGFrbGFtYWthbi9NXFxuVGFsYm90L01cXG5UYWxpYmFuL01cXG5UYWxpZXNpbi9NXFxuVGFsbGFoYXNzZWUvTVxcblRhbGxjaGllZi9NXFxuVGFsbGV5L01cXG5UYWxsZXlyYW5kL01cXG5UYWxsaW5uL01cXG5UYWxtdWQvTVNcXG5UYWxtdWRpY1xcblRhbG11ZGlzdFxcblRhbWFyYS9NXFxuVGFtZWthL01cXG5UYW1lcmEvTVxcblRhbWVybGFuZS9NXFxuVGFtaS9NXFxuVGFtaWthL01cXG5UYW1pbC9NU1xcblRhbW1hbnkvTVxcblRhbW1pL01cXG5UYW1taWUvTVxcblRhbW11ei9NXFxuVGFtbXkvTVxcblRhbXBhL01cXG5UYW1wYXgvTVxcblRhbXJhL01cXG5UYW13b3J0aC9NXFxuVGFuY3JlZC9NXFxuVGFuZXkvTVxcblRhbmdhbnlpa2EvTVxcblRhbmdpZXIvTVNcXG5UYW5nc2hhbi9NXFxuVGFuaWEvTVxcblRhbmlzaGEvTVxcblRhbm5lci9NXFxuVGFubmhhdXNlci9NXFxuVGFudGFsdXMvTVxcblRhbnlhL01cXG5UYW56YW5pYS9NXFxuVGFuemFuaWFuL1NNXFxuVGFvL01cXG5UYW9pc20vTVNcXG5UYW9pc3QvTVNcXG5UYXJhL01cXG5UYXJhbnRpbm8vTVxcblRhcmF3YS9NXFxuVGFyYXplZC9NXFxuVGFyYmVsbC9NXFxuVGFyZ2V0L01cXG5UYXJpbS9NXFxuVGFya2VudG9uL01cXG5UYXJraW5ndG9uL01cXG5UYXJ0YXJ5L01cXG5UYXJ0dWZmZS9NXFxuVGFyemFuL01cXG5UYXNoYS9NXFxuVGFzaGtlbnQvTVxcblRhc21hbi9NXFxuVGFzbWFuaWEvTVxcblRhc21hbmlhbi9NXFxuVGFzcy9NXFxuVGF0YXIvTVNcXG5UYXRlL01cXG5UYXR1bS9NXFxuVGF1cnVzL01TXFxuVGF2YXJlcy9NXFxuVGF3bmV5L01cXG5UYXlsb3IvTVxcblRiL01cXG5UYmlsaXNpL01cXG5UYy9NXFxuVGNoYWlrb3Zza3kvTVxcblRlL01cXG5UZVhcXG5UZVhlc1xcblRlYXNkYWxlL01cXG5UZWNobmljb2xvci9NXFxuVGVjdW1zZWgvTVxcblRlZC9NXFxuVGVkZHkvTVxcblRlZmxvbi9NU1xcblRlZ3VjaWdhbHBhL01cXG5UZWhyYW5cXG5UZWxlUHJvbXBUZXJcXG5UZWxlUHJvbXB0ZXIvTVxcblRlbGVtYWNodXMvTVxcblRlbGVtYW5uL01cXG5UZWxldHlwZVxcblRlbGwvTVJcXG5UZWxsZXIvTVxcblRlbHVndS9NXFxuVGVtZWN1bGEvTVxcblRlbXBlXFxuVGVtcGxhci9NXFxuVGVtcGxlL01cXG5UZW5uL01cXG5UZW5uZXNzZWFuL1NNXFxuVGVubmVzc2VlL01cXG5UZW5ueXNvbi9NXFxuVGVubnlzb25pYW5cXG5UZW5vY2h0aXRsYW4vTVxcblRlbnNvckZsb3cvTVxcblRlb3RpaHVhY2FuL01cXG5UZXJlbmNlL01cXG5UZXJlc2EvTVxcblRlcmVzaGtvdmEvTVxcblRlcmkvTVxcblRlcmtlbC9NXFxuVGVycHNpY2hvcmUvTVxcblRlcnIvTVxcblRlcnJhL01cXG5UZXJyYW4vTVxcblRlcnJhbmNlL01cXG5UZXJyZWxsL01cXG5UZXJyZW5jZS9NXFxuVGVycmkvTVxcblRlcnJpZS9NXFxuVGVycnkvTVxcblRlcnRpYXJ5L01cXG5UZXNsYS9NXFxuVGVzcy9NXFxuVGVzc2EvTVxcblRlc3NpZS9NXFxuVGV0L01cXG5UZXRoeXMvTVxcblRldG9ucy9NXFxuVGV1dG9uL01TXFxuVGV1dG9uaWMvTVxcblRldmV0L01cXG5UZXgvTVxcblRleGFjby9NXFxuVGV4YW4vTVNcXG5UZXhhcmthbmEvTVxcblRleGFzL01cXG5UaC9NXFxuVGhhY2tlcmF5L01cXG5UaGFkL01cXG5UaGFkZGV1cy9NXFxuVGhhaS9TTVxcblRoYWlsYW5kL01cXG5UaGFsZXMvTVxcblRoYWxpYS9NXFxuVGhhbWVzL01cXG5UaGFuaC9NXFxuVGhhbmtzZ2l2aW5nL01TXFxuVGhhbnQvTVxcblRoYXIvTVxcblRoYXJwL01cXG5UaGF0Y2hlci9NXFxuVGhlYS9NXFxuVGhlYmVzL01cXG5UaGVpbGVyL01cXG5UaGVsbWEvTVxcblRoZW1pc3RvY2xlcy9NXFxuVGhlb2NyaXR1cy9NXFxuVGhlb2RvcmEvTVxcblRoZW9kb3JlL01cXG5UaGVvZG9yaWMvTVxcblRoZW9kb3NpdXMvTVxcblRoZW9zb3BoeS9NXFxuVGhlcmF2YWRhL01cXG5UaGVyZXNhL01cXG5UaGVyZXNlL01cXG5UaGVybW9weWxhZS9NXFxuVGhlcm1vc1xcblRoZXJvbi9NXFxuVGhlc2V1cy9NXFxuVGhlc3BpYW4vTVxcblRoZXNwaXMvTVxcblRoZXNzYWxvbmlhbi9TTVxcblRoZXNzYWxvbmlraS9NXFxuVGhlc3NhbHkvTVxcblRoaWV1L01cXG5UaGltYnUvTVxcblRoaW1waHVcXG5UaG9tYXMvTVxcblRob21pc20vTVxcblRob21pc3RpYy9NXFxuVGhvbXBzb24vTVxcblRob21zb24vTVxcblRob3IvTVxcblRob3JhemluZS9NXFxuVGhvcmVhdS9NXFxuVGhvcm50b24vTVxcblRob3JvdWdoYnJlZC9NXFxuVGhvcnBlL01cXG5UaG90aC9NXFxuVGhyYWNlL01cXG5UaHJhY2lhbi9NXFxuVGh1XFxuVGh1Y3lkaWRlcy9NXFxuVGh1bGUvTVxcblRodW5kZXJiaXJkL01cXG5UaHVyL1NcXG5UaHVyYmVyL01cXG5UaHVybWFuL01cXG5UaHVybW9uZC9NXFxuVGh1cnNkYXkvU01cXG5UaHV0bW9zZS9NXFxuVGkvTVxcblRpYS9NXFxuVGlhbmppbi9NXFxuVGliZXIvTVxcblRpYmVyaXVzL01cXG5UaWJldC9NXFxuVGliZXRhbi9NU1xcblRpY2tldG1hc3Rlci9NXFxuVGljb25kZXJvZ2EvTVxcblRpZGUvTVxcblRpZW5hbm1lbi9NXFxuVGlmZmFueS9NXFxuVGlncmlzL01cXG5UaWp1YW5hL01cXG5UaWxsaWNoL01cXG5UaWxsbWFuL01cXG5UaWxzaXQvTVxcblRpbS9NXFxuVGltYnVrdHUvTVxcblRpbWV4L01cXG5UaW1teS9NXFxuVGltb24vTVxcblRpbW9yL01cXG5UaW1vdGh5L01cXG5UaW11ci9NXFxuVGltdXJpZC9NXFxuVGluYS9NXFxuVGluZy9NXFxuVGlua2VyYmVsbC9NXFxuVGlua2VydG95L01cXG5UaW5zZWx0b3duL01cXG5UaW50b3JldHRvL01cXG5UaXBwZWNhbm9lL01cXG5UaXBwZXJhcnkvTVxcblRpcmFuZVxcblRpcmVzaWFzL01cXG5UaXJvbC9NXFxuVGlyb2xlYW5cXG5UaXNoYS9NXFxuVGlzaHJpL01cXG5UaXRhbi9TTVxcblRpdGFuaWEvTVxcblRpdGFuaWMvTVxcblRpdGlhbi9NXFxuVGl0aWNhY2EvTVxcblRpdG8vTVxcblRpdHVzL01cXG5UaXR1c3ZpbGxlL01cXG5UbC9NXFxuVGxhbG9jL01cXG5UbGluZ2l0L01cXG5UbS9NXFxuVG9iYWdvL01cXG5Ub2JpdC9NXFxuVG9ieS9NXFxuVG9jYW50aW5zL01cXG5Ub2NxdWV2aWxsZS9NXFxuVG9kL01cXG5Ub2RkL01cXG5Ub2dvL01cXG5Ub2dvbGVzZS9NXFxuVG9qby9NXFxuVG9rYXkvTVxcblRva3VnYXdhL01cXG5Ub2t5by9NXFxuVG9reW9pdGVcXG5Ub2xlZG8vTVNcXG5Ub2xraWVuL01cXG5Ub2xzdG95L01cXG5Ub2x0ZWMvTVxcblRvbHlhdHRpL01cXG5Ub20vTVxcblRvbWFzL01cXG5Ub21iYXVnaC9NXFxuVG9tbGluL01cXG5Ub21taWUvTVxcblRvbW15L01cXG5Ub21wa2lucy9NXFxuVG9tc2svTVxcblRvbmdhL01cXG5Ub25nYW4vTVNcXG5Ub25pL01cXG5Ub25pYS9NXFxuVG9udG8vTVxcblRvbnkvTVxcblRvbnlhL01cXG5Ub3Bla2EvTVxcblRvcHN5L01cXG5Ub3JhaC9NXFxuVG9yYWhzXFxuVG9yb250by9NXFxuVG9ycXVlbWFkYS9NXFxuVG9ycmFuY2UvTVxcblRvcnJlbnMvTVxcblRvcnJlcy9NXFxuVG9ycmljZWxsaS9NXFxuVG9ydG9sYS9NXFxuVG9ydHVnYS9NXFxuVG9ydmFsZHMvTVxcblRvcnkvU01cXG5Ub3NjYS9NXFxuVG9zY2FuaW5pL01cXG5Ub3NoaWJhL01cXG5Ub3RvL01cXG5Ub3Vsb3VzZS9NXFxuVG93bmVzL01cXG5Ub3duc2VuZC9NXFxuVG95bmJlZS9NXFxuVG95b2RhL01cXG5Ub3lvdGEvTVxcblRyYWNleS9NXFxuVHJhY2kvTVxcblRyYWNpZS9NXFxuVHJhY3kvTVxcblRyYWZhbGdhci9NXFxuVHJhaWx3YXlzL01cXG5UcmFqYW4vTVxcblRyYW4vTVxcblRyYW5zY2F1Y2FzaWEvTVxcblRyYW5zdmFhbC9NXFxuVHJhbnN5bHZhbmlhL01cXG5UcmFuc3lsdmFuaWFuL01cXG5UcmFwcGlzdC9TTVxcblRyYXZpcy9NXFxuVHJhdm9sdGEvTVxcblRyZWFzdXJ5L1NNXFxuVHJlYmxpbmthL01cXG5UcmVra2llL01cXG5UcmVudC9NXFxuVHJlbnRvbi9NXFxuVHJldmVseWFuL01cXG5UcmV2aW5vL01cXG5UcmV2b3IvTVxcblRyZXkvTVxcblRyaWFuZ3VsdW0vTVxcblRyaWFzc2ljL01cXG5UcmljaWEvTVxcblRyaWRlbnQvTVxcblRyaWVzdGUvTVxcblRyaW11cnRpL01cXG5UcmluYS9NXFxuVHJpbmlkYWQvTVxcblRyaW5pZGFkaWFuL01TXFxuVHJpbml0eS9TTVxcblRyaXBpdGFrYS9NXFxuVHJpcG9saS9NXFxuVHJpcHBlL01cXG5UcmlzaGEvTVxcblRyaXN0YW4vTVxcblRyaXRvbi9NXFxuVHJvYnJpYW5kL01cXG5Ucm9pbHVzL01cXG5Ucm9qYW4vTVNcXG5Ucm9sbG9wZS9NXFxuVHJvbmRoZWltL01cXG5Ucm9waWNhbmEvTVxcblRyb3Rza3kvTVxcblRyb3kvTVxcblRyb3llc1xcblRydWNrZWUvTVxcblRydWRlYXUvTVxcblRydWR5L01cXG5UcnVmZmF1dC9NXFxuVHJ1amlsbG8vTVxcblRydW1hbi9NXFxuVHJ1bWJ1bGwvTVxcblRydW1wL01cXG5UcnV0aC9NXFxuVHNpbXNoaWFuL01cXG5Uc2lvbGtvdnNreS9NXFxuVHNpdHNpaGFyL01cXG5Uc29uZ2toYXBhL01cXG5Uc3dhbmEvTVxcblR1L01cXG5UdWFtb3R1L01cXG5UdWFyZWcvTVxcblR1Ym1hbi9NXFxuVHVja2VyL01cXG5UdWNzb24vTVxcblR1Y3VtYW4vTVxcblR1ZG9yL1NNXFxuVHVlL1NcXG5UdWVzL01cXG5UdWVzZGF5L01TXFxuVHVsYW5lL01cXG5UdWxsL01cXG5UdWxzYS9NXFxuVHVsc2lkYXMvTVxcblR1bXMvTVxcblR1bmd1cy9NXFxuVHVuZ3Vza2EvTVxcblR1bmlzL01cXG5UdW5pc2lhL01cXG5UdW5pc2lhbi9NU1xcblR1bm5leS9NXFxuVHVwaS9NXFxuVHVwcGVyd2FyZS9NXFxuVHVwdW5nYXRvL01cXG5UdXJnZW5ldi9NXFxuVHVyaW4vTVxcblR1cmluZy9NXFxuVHVyay9TTVxcblR1cmtlc3Rhbi9NXFxuVHVya2V5L01cXG5UdXJraWMvTVNcXG5UdXJraXNoL01cXG5UdXJrbWVuaXN0YW4vTVxcblR1cmxvY2svTVxcblR1cm5lci9NXFxuVHVycGluL01cXG5UdXNjYWxvb3NhL01cXG5UdXNjYW4vTVxcblR1c2NhbnkvTVxcblR1c2Nhcm9yYS9NU1xcblR1c2Nvbi9NXFxuVHVza2VnZWUvTVxcblR1c3NhdWQvTVxcblR1dC9NXFxuVHV0YW5raGFtZW4vTVxcblR1dHNpL01cXG5UdXR1L01cXG5UdXZhbHUvTVxcblR1dmFsdWFuXFxuVHdhaW4vTVxcblR3ZWVkL01cXG5Ud2VlZGxlZGVlL01cXG5Ud2VlZGxlZHVtL01cXG5Ud2lsYS9NXFxuVHdpbmtpZXMvTVxcblR3aXR0ZXIvTVxcblR3aXp6bGVycy9NXFxuVHdwXFxuVHkvTVxcblR5Y2hvL01cXG5UeWxlbm9sL01cXG5UeWxlci9NXFxuVHluZGFsZS9NXFxuVHluZGFsbC9NXFxuVHlyZS9NXFxuVHlyZWUvTVxcblR5cm9sZWFuXFxuVHlyb25lL01cXG5UeXNvbi9NXFxuVS9NXFxuVUFSXFxuVUFXXFxuVUJTL01cXG5VQ0xBL01cXG5VRk8vU01cXG5VSEYvTVxcblVLL01cXG5VTFxcblVOL01cXG5VTkVTQ08vTVxcblVOSUNFRi9NXFxuVU5JWC9NXFxuVVBDXFxuVVBJL01cXG5VUFMvTVxcblVSTC9TXFxuVVMvTVxcblVTQS9NXFxuVVNBRlxcblVTQlxcblVTQ0dcXG5VU0RBL01cXG5VU0lBXFxuVVNNQ1xcblVTTlxcblVTT1xcblVTUFxcblVTUFNcXG5VU1NcXG5VU1NSL01cXG5VVC9NXFxuVVRDXFxuVVYvTVxcblViYW5naS9NXFxuVWJ1bnR1L01cXG5VY2F5YWxpL01cXG5VY2NlbGxvL01cXG5VZGFsbC9NXFxuVWZhL01cXG5VZ2FuZGEvTVxcblVnYW5kYW4vTVNcXG5VaWdodXIvTVxcblVqdW5ncGFuZGFuZy9NXFxuVWtyYWluZS9NXFxuVWtyYWluaWFuL1NNXFxuVWxzdGVyL01cXG5VbHRyYXN1ZWRlL01cXG5VbHlhbm92c2svTVxcblVseXNzZXMvTVxcblVtYnJpZWwvTVxcblVuZGVyd29vZC9NXFxuVW5nYXZhL01cXG5Vbmljb2RlL01cXG5VbmlsZXZlci9NXFxuVW5pb24vU01cXG5VbmlvbmlzdFxcblVuaW9udG93bi9NXFxuVW5pcm95YWwvTVxcblVuaXRhcmlhbi9NU1xcblVuaXRhcmlhbmlzbS9NU1xcblVuaXRhcy9NXFxuVW5peC9TXFxuVW51a2FsaGFpL01cXG5VcGFuaXNoYWRzL01cXG5VcGRpa2UvTVxcblVwam9obi9NXFxuVXB0b24vTVxcblVyL01cXG5VcmFsL1NNXFxuVXJhbHMvTVxcblVyYW5pYS9NXFxuVXJhbnVzL01cXG5VcmJhbi9NXFxuVXJkdS9NXFxuVXJleS9NXFxuVXJpYWgvTVxcblVyaWVsL01cXG5VcmlzL01cXG5VcnF1aGFydC9NXFxuVXJzYS9NXFxuVXJzdWxhL01cXG5VcnN1bGluZS9NXFxuVXJ1Z3VheS9NXFxuVXJ1Z3VheWFuL01TXFxuVXJ1bXFpL01cXG5Vc2VuZXQvTVNcXG5Vc3Rpbm92L01cXG5VdFxcblV0YWgvTVxcblV0YWhhbi9NU1xcblV0ZS9TTVxcblV0aWNhL01cXG5VdG9waWEvU01cXG5VdG9waWFuL1NNXFxuVXRyZWNodC9NXFxuVXRyaWxsby9NXFxuVXpiZWsvTVxcblV6YmVraXN0YW4vTVxcblV6aS9TTVxcblYvTVxcblZBXFxuVkFUL01cXG5WQVhcXG5WQVhlc1xcblZCQS9NXFxuVkNSL01cXG5WRC9NXFxuVkRUXFxuVkRVXFxuVkZcXG5WRlcvTVxcblZHXFxuVkdBXFxuVkhGL01cXG5WSFNcXG5WSS9NXFxuVklQL1NNXFxuVklTVEFcXG5WSlxcblZMRi9NXFxuVk9BXFxuVlBcXG5WVFxcblZUT0xcXG5WYS9NXFxuVmFjYXZpbGxlL01cXG5WYWRlci9NXFxuVmFkdXovTVxcblZhbC9NXFxuVmFsYXJpZS9NXFxuVmFsZGV6L01cXG5WYWxkb3N0YS9NXFxuVmFsZW5jaWEvU01cXG5WYWxlbnRpL01cXG5WYWxlbnRpbi9NXFxuVmFsZW50aW5lL01cXG5WYWxlbnRpbm8vTVxcblZhbGVuenVlbGEvTVxcblZhbGVyaWEvTVxcblZhbGVyaWFuL01cXG5WYWxlcmllL01cXG5WYWxlcnkvTVxcblZhbGhhbGxhL01cXG5WYWxpdW0vTVNcXG5WYWxreXJpZS9TTVxcblZhbGxlam8vTVxcblZhbGxldHRhL01cXG5WYWxvaXMvTVxcblZhbHBhcmFpc28vTVxcblZhbHZvbGluZS9NXFxuVmFuL01cXG5WYW5jZS9NXFxuVmFuY291dmVyL01cXG5WYW5kYWwvTVNcXG5WYW5kZXJiaWx0L01cXG5WYW5keWtlL01cXG5WYW5lc3NhL01cXG5WYW5nL01cXG5WYW51YXR1L01cXG5WYW56ZXR0aS9NXFxuVmFyYW5hc2kvTVxcblZhcmVzZS9NXFxuVmFyZ2FzL01cXG5WYXNlbGluZS9TTVxcblZhc3F1ZXovTVxcblZhc3Nhci9NXFxuVmF0aWNhbi9NXFxuVmF1YmFuL01cXG5WYXVnaGFuL01cXG5WYXVnaG4vTVxcblZhenF1ZXovTVxcblZlYmxlbi9NXFxuVmVkYS9TTVxcblZlZGFudGEvTVxcblZlZ2EvU01cXG5WZWdhcy9NXFxuVmVnZW1pdGUvTVxcblZlbGEvTVxcblZlbGFzcXVlei9NXFxuVmVsYXpxdWV6L01cXG5WZWxjcm8vTVNcXG5WZWxlei9NXFxuVmVsbWEvTVxcblZlbHZlZXRhL01cXG5WZW5ldGlhbi9TTVxcblZlbmV6dWVsYS9NXFxuVmVuZXp1ZWxhbi9TTVxcblZlbmljZS9NXFxuVmVubi9NXFxuVmVudG9saW4vTVxcblZlbnVzL01TXFxuVmVudXNpYW4vTVxcblZlcmEvTVxcblZlcmFjcnV6L01cXG5WZXJkZS9NXFxuVmVyZGkvTVxcblZlcmR1bi9NXFxuVmVyaXpvbi9NXFxuVmVybGFpbmUvTVxcblZlcm1lZXIvTVxcblZlcm1vbnQvWk1SXFxuVmVybW9udGVyL01cXG5WZXJuL01cXG5WZXJuYS9NXFxuVmVybmUvTVxcblZlcm5vbi9NXFxuVmVyb25hL01cXG5WZXJvbmVzZS9NXFxuVmVyb25pY2EvTVxcblZlcnNhaWxsZXMvTVxcblZlc2FsaXVzL01cXG5WZXNwYXNpYW4vTVxcblZlc3B1Y2NpL01cXG5WZXN0YS9NXFxuVmVzdXZpdXMvTVxcblZpYWNvbS9NXFxuVmlhZ3JhL01cXG5WaWMvTVxcblZpY2VudGUvTVxcblZpY2h5L01cXG5WaWNraS9NXFxuVmlja2llL01cXG5WaWNrc2J1cmcvTVxcblZpY2t5L01cXG5WaWN0b3IvTVxcblZpY3RvcmlhL01cXG5WaWN0b3JpYW4vTVNcXG5WaWN0b3JpYW5pc21cXG5WaWN0b3J2aWxsZS9NXFxuVmljdHJvbGEvTVxcblZpZGFsL01cXG5WaWVubmEvTVxcblZpZW5uZXNlL01cXG5WaWVudGlhbmUvTVxcblZpZXRjb25nL01cXG5WaWV0bWluaC9NXFxuVmlldG5hbS9NXFxuVmlldG5hbWVzZS9NXFxuVmlqYXlhbmFnYXIvTVxcblZpamF5YXdhZGEvTVxcblZpa2luZy9NU1xcblZpbGEvTVxcblZpbGxhL1NNXFxuVmlsbGFycmVhbC9NXFxuVmlsbGFzL01cXG5WaWxsb24vTVxcblZpbG1hL01cXG5WaWxuaXVzL01cXG5WaWx5dWkvTVxcblZpbmNlL01cXG5WaW5jZW50L01cXG5WaW5kZW1pYXRyaXgvTVxcblZpbmVsYW5kL01cXG5WaW5zb24vTVxcblZpb2xhL01cXG5WaW9sZXQvTVxcblZpcmdpZS9NXFxuVmlyZ2lsL01cXG5WaXJnaW5pYS9NXFxuVmlyZ2luaWFuL1NNXFxuVmlyZ28vU01cXG5WaXNhL01cXG5WaXNhbGlhL01cXG5WaXNheWFucy9NXFxuVmlzaG51L01cXG5WaXNpZ290aC9NXFxuVmlzaWdvdGhzXFxuVmlzdHVsYS9NXFxuVml0aW0vTVxcblZpdG8vTVxcblZpdHVzL01cXG5WaXZhbGRpL01cXG5WaXZla2FuYW5kYS9NXFxuVml2aWFuL01cXG5WaXZpZW5uZS9NXFxuVmxhZC9NXFxuVmxhZGltaXIvTVxcblZsYWRpdm9zdG9rL01cXG5WbGFtaW5jay9NXFxuVmxhc2ljL01cXG5Wb0lQXFxuVm9ndWUvTVxcblZvbGNrZXIvTVxcblZvbGRlbW9ydC9NXFxuVm9sZ2EvTVxcblZvbGdvZ3JhZC9NXFxuVm9sa3N3YWdlbi9NXFxuVm9sc3RlYWQvTVxcblZvbHRhL01cXG5Wb2x0YWlyZS9NXFxuVm9sdm8vTVxcblZvbmRhL01cXG5Wb25uZWd1dC9NXFxuVm9yb25lemgvTVxcblZvcnN0ZXIvTVxcblZveWFnZXIvTVxcblZ0XFxuVnVpdHRvbi9NXFxuVnVsY2FuL01cXG5WdWxnXFxuVnVsZ2F0ZS9TTVxcblcvTURUXFxuV0FcXG5XQUNcXG5XQVNQL01cXG5XQVRTL01cXG5XQ1xcbldITy9NXFxuV0lcXG5XTURcXG5XTlcvTVxcbldQXFxuV1NXL01cXG5XVE9cXG5XVlxcbldXXFxuV1dJXFxuV1dJSVxcbldXVy9NXFxuV1lcXG5XWVNJV1lHXFxuV2FiYXNoL01cXG5XYWNcXG5XYWNvL01cXG5XYWRlL01cXG5XYWduZXIvTVxcbldhZ25lcmlhbi9NXFxuV2FoaGFiaS9NXFxuV2Fpa2lraS9NXFxuV2FpdGUvTVxcbldha2UvTVxcbldha3NtYW4vTVxcbldhbGQvTU5cXG5XYWxkZW1hci9NXFxuV2FsZGVuL01cXG5XYWxkZW5zaWFuL01cXG5XYWxkaGVpbS9NXFxuV2FsZG8vTVxcbldhbGRvcmYvTVxcbldhbGVzL01cXG5XYWxlc2EvTVxcbldhbGdyZWVuL1NNXFxuV2FsZ3JlZW5zL01cXG5XYWxrZXIvTVxcbldhbGttYW4vTVxcbldhbGwvU01SXFxuV2FsbGFjZS9NXFxuV2FsbGVuc3RlaW4vTVxcbldhbGxlci9NXFxuV2FsbGlzL01cXG5XYWxsb29uL01cXG5XYWxscy9NXFxuV2FsbWFydC9NXFxuV2FscG9sZS9NXFxuV2FscHVyZ2lzbmFjaHQvTVxcbldhbHNoL01cXG5XYWx0L01SWlxcbldhbHRlci9NXFxuV2FsdGVycy9NXFxuV2FsdG9uL01cXG5XYW5hbWFrZXIvTVxcbldhbmRhL01cXG5XYW5nL01cXG5XYW5rZWwvTVxcbldhcmQvTVxcbldhcmUvTUdcXG5XYXJob2wvTVxcbldhcmluZy9NXFxuV2FybmVyL01cXG5XYXJyZW4vTVxcbldhcnNhdy9NXFxuV2Fyd2ljay9NXFxuV2FzYXRjaC9NXFxuV2FzaC9NXFxuV2FzaGluZ3Rvbi9NXFxuV2FzaGluZ3Rvbmlhbi9NU1xcbldhc3Nlcm1hbm4vTVxcbldhdGVyYnVyeS9NXFxuV2F0ZXJmb3JkL01cXG5XYXRlcmdhdGUvTVxcbldhdGVybG9vL01TXFxuV2F0ZXJzL01cXG5XYXRlcnRvd24vTVxcbldhdGtpbnMvTVxcbldhdHNvbi9NXFxuV2F0c29udmlsbGUvTVxcbldhdHQvU01cXG5XYXR0ZWF1L01cXG5XYXR0cy9NXFxuV2F0dXNpL01cXG5XYXVnaC9NXFxuV2F1c2F1L01cXG5XYXZlXFxuV2F5bmUvTVxcbldheW5lc2Jvcm8vTVxcbldlYXZlci9NXFxuV2ViL01SXFxuV2ViYi9NXFxuV2ViZXIvTVxcbldlYmVybi9NXFxuV2Vic3Rlci9NU1xcbldlZC9NXFxuV2VkZGVsbC9NXFxuV2VkZ3dvb2QvTVxcbldlZG5lc2RheS9NU1xcbldlZWtzL01cXG5XZWhybWFjaHQvTVxcbldlaS9NXFxuV2VpZXJzdHJhc3MvTVxcbldlaWxsL01cXG5XZWluYmVyZy9NXFxuV2VpcnRvbi9NXFxuV2Vpc3MvTVxcbldlaXNzbXVsbGVyL01cXG5XZWl6bWFubi9NXFxuV2VsZG9uL01cXG5XZWxsYW5kL01cXG5XZWxsZXIvTVxcbldlbGxlcy9NXFxuV2VsbGluZ3Rvbi9TTVxcbldlbGxzL01cXG5XZWxzaC9NXFxuV2Vsc2htYW4vTVxcbldlbHNobWVuL01cXG5XZWxzaHdvbWFuXFxuV2VuYXRjaGVlL01cXG5XZW5kZWxsL01cXG5XZW5kaS9NXFxuV2VuZHkvTVxcbldlc2FrL01cXG5XZXNsZXkvTVxcbldlc2xleWFuL01cXG5XZXNzZXgvTVxcbldlc3Nvbi9NXFxuV2VzdC9TTVxcbldlc3Rlcm4vTVJTXFxuV2VzdGluZ2hvdXNlL01cXG5XZXN0bWluc3Rlci9NXFxuV2VzdG9uL01cXG5XZXN0cGhhbGlhL01cXG5XZXlkZW4vTVxcbldlemVuL01cXG5XaGFydG9uL01cXG5XaGVhdGllcy9NXFxuV2hlYXRzdG9uZS9NXFxuV2hlZWxlci9NXFxuV2hlZWxpbmcvTVxcbldoaWcvU01cXG5XaGlwcGxlL01cXG5XaGlybHBvb2wvTVxcbldoaXN0bGVyL01cXG5XaGl0YWtlci9NXFxuV2hpdGUvU01cXG5XaGl0ZWZpZWxkL01cXG5XaGl0ZWhhbGwvTVxcbldoaXRlaGVhZC9NXFxuV2hpdGVob3JzZS9NXFxuV2hpdGVsZXkvTVxcbldoaXRmaWVsZC9NXFxuV2hpdGxleS9NXFxuV2hpdG1hbi9NXFxuV2hpdG5leS9NXFxuV2hpdHN1bmRheS9NU1xcbldoaXR0aWVyL01cXG5XaUZpXFxuV2ljY2EvTVxcbldpY2hpdGEvTVxcbldpZW1hci9NXFxuV2llc2VsL01cXG5XaWVzZW50aGFsL01cXG5XaWdnaW5zL01cXG5XaWduZXIvTVxcbldpaS9NXFxuV2lraWxlYWtzXFxuV2lraXBlZGlhL01cXG5XaWxiZXJmb3JjZS9NXFxuV2lsYmVydC9NXFxuV2lsYnVyL01cXG5XaWxidXJuL01cXG5XaWxjb3gvTVxcbldpbGRhL01cXG5XaWxkZS9NUlxcbldpbGRlci9NXFxuV2lsZXMvTVxcbldpbGV5L01cXG5XaWxmb3JkL01cXG5XaWxmcmVkL01cXG5XaWxmcmVkby9NXFxuV2lsaGVsbS9NXFxuV2lsaGVsbWluYS9NXFxuV2lsa2Vyc29uL01cXG5XaWxrZXMvTVxcbldpbGtpbnMvTVxcbldpbGtpbnNvbi9NXFxuV2lsbC9NXFxuV2lsbGEvTVxcbldpbGxhbWV0dGUvTVxcbldpbGxhcmQvTVxcbldpbGxlbXN0YWQvTVxcbldpbGxpYW0vU01cXG5XaWxsaWFtcy9NXFxuV2lsbGlhbXNidXJnL01cXG5XaWxsaWFtc29uL01cXG5XaWxsaWFtc3BvcnQvTVxcbldpbGxpZS9NXFxuV2lsbGlzL01cXG5XaWxseS9NXFxuV2lsbWEvTVxcbldpbG1lci9NXFxuV2lsbWluZ3Rvbi9NXFxuV2lsc29uL01cXG5XaWxzb25pYW4vTVxcbldpbHRvbi9NXFxuV2ltYmxlZG9uL01cXG5XaW1zZXkvTVxcbldpbmNoZWxsL01cXG5XaW5jaGVzdGVyL01TXFxuV2luZGJyZWFrZXIvTVxcbldpbmRleC9NXFxuV2luZGhvZWsvTVxcbldpbmRvd3MvTVxcbldpbmRzb3IvU01cXG5XaW5kd2FyZC9NXFxuV2luZXNhcC9NXFxuV2luZnJlZC9NXFxuV2luZnJleS9NXFxuV2luaWZyZWQvTVxcbldpbmtsZS9NXFxuV2lubmViYWdvL01cXG5XaW5uaWUvTVxcbldpbm5pcGVnL01cXG5XaW5zdG9uL01cXG5XaW50ZXJzL01cXG5XaW50aHJvcC9NXFxuV2lzXFxuV2lzY1xcbldpc2NvbnNpbi9NXFxuV2lzY29uc2luaXRlL01TXFxuV2lzZS9NXFxuV2l0dC9NXFxuV2l0dGdlbnN0ZWluL01cXG5XaXR3YXRlcnNyYW5kL01cXG5XbS9NXFxuV29iZWdvbi9NXFxuV29kZWhvdXNlL01cXG5Xb2xmL01cXG5Xb2xmZS9NXFxuV29sZmYvTVxcbldvbGZnYW5nL01cXG5Xb2xsb25nb25nL01cXG5Xb2xsc3RvbmVjcmFmdC9NXFxuV29sc2V5L01cXG5Xb2x2ZXJoYW1wdG9uXFxuV29uZGVyL01cXG5Xb25kZXJicmEvTVxcbldvbmcvTVxcbldvb2QvU01cXG5Xb29kYXJkL01cXG5Xb29kaHVsbC9NXFxuV29vZGxhbmQvTVxcbldvb2Ryb3cvTVxcbldvb2RzL01cXG5Xb29kc3RvY2svTVxcbldvb2R3YXJkL01cXG5Xb29sZi9NXFxuV29vbGl0ZS9NXFxuV29vbG9uZ29uZy9NXFxuV29vbHdvcnRoL01cXG5Xb29zdGVyL01cXG5Xb290ZW4vTVxcbldvcmNlc3Rlci9TTVxcbldvcmNlc3RlcnNoaXJlL01cXG5Xb3JkUHJlc3MvTVxcbldvcmRzd29ydGgvTVxcbldvcmttYW4vTVxcbldvcm1zL01cXG5Xb3Rhbi9NXFxuV292b2thL01cXG5Xb3puaWFrL01cXG5Xb3p6ZWNrL01cXG5XcmFuZ2VsbC9NXFxuV3Jlbi9NXFxuV3JpZ2h0L01cXG5XcmlnbGV5L01cXG5Xcm9jbGF3L01cXG5XdS9NXFxuV3VoYW4vTVxcbld1cmxpdHplci9NXFxuV3lhdHQvTVxcbld5Y2hlcmxleS9NXFxuV3ljbGlmZmUvTVxcbld5ZXRoL01cXG5XeWxpZS9NXFxuV3lubi9NXFxuV3lvXFxuV3lvbWluZy9NXFxuV3lvbWluZ2l0ZS9TTVxcblgvTVxcblhFbWFjcy9NXFxuWEwvTVxcblhNTFxcblhTXFxuWFhMXFxuWGFtYXJpbi9NXFxuWGFuYWR1L01cXG5YYW50aGlwcGUvTVxcblhhdmllci9NXFxuWGUvU01cXG5YZW5ha2lzL01cXG5YZW5pYS9NXFxuWGVub3Bob24vTVxcblhlcm94L01TXFxuWGVyeGVzL01cXG5YaG9zYS9NXFxuWGknYW4vTVxcblhpYW4vU01cXG5YaWFvcGluZy9NXFxuWGltZW5lcy9NXFxuWGluZ3UvTVxcblhpbmppYW5nL01cXG5YaW9uZ251L01cXG5YaXphbmcvTVxcblhtYXMvTVNcXG5Yb2NoaXBpbGxpL01cXG5YdXpob3UvTVxcblkvTVxcbllNQ0EvTVxcbllNSEFcXG5ZTU1WXFxuWVRcXG5ZV0NBL01cXG5ZV0hBXFxuWWFjYy9NXFxuWWFob28vTVxcbllhaHR6ZWUvTVxcbllhaHdlaC9NXFxuWWFraW1hL01cXG5ZYWt1dC9NXFxuWWFrdXRzay9NXFxuWWFsZS9NXFxuWWFsb3cvTVxcbllhbHRhL01cXG5ZYWx1L01cXG5ZYW1hZ2F0YS9NXFxuWWFtYWhhL01cXG5ZYW1vdXNzb3Vrcm8vTVxcbllhbmcvTVxcbllhbmdvbi9NXFxuWWFuZ3R6ZS9NXFxuWWFuay9TTVxcbllhbmtlZS9TTVxcbllhb2JhbmcvTVxcbllhb3VuZGUvTVxcbllhcXVpL01cXG5ZYXJlblxcbllhcm9zbGF2bC9NXFxuWWF0YXJvL01cXG5ZYXRlcy9NXFxuWWF1Y28vTVxcblliL01cXG5ZZWFnZXIvTVxcblllYXRzL01cXG5ZZWthdGVyaW5idXJnL01cXG5ZZWxsb3drbmlmZS9NXFxuWWVsbG93c3RvbmUvTVxcblllbHRzaW4vTVxcblllbWVuL01cXG5ZZW1lbmkvU01cXG5ZZW1lbml0ZVxcblllbmlzZWkvTVxcblllcmV2YW4vTVxcblllcmtlcy9NXFxuWWVzZW5pYS9NXFxuWWV2dHVzaGVua28vTVxcbllnZ2RyYXNpbC9NXFxuWWlkZGlzaC9NXFxuWW1pci9NXFxuWW9kYS9NXFxuWW9rbmFwYXRhd3BoYS9NXFxuWW9rby9NXFxuWW9rb2hhbWEvTVxcbllvbGFuZGEvTVxcbllvbmcvTVxcbllvbmtlcnMvTVxcbllvcmsvTVxcbllvcmtpZS9NXFxuWW9ya3NoaXJlL01TXFxuWW9ya3Rvd24vTVxcbllvcnViYS9NXFxuWW9zZW1pdGUvTVxcbllvc3Nhcmlhbi9NXFxuWW91VHViZS9NXFxuWW91bmcvTVxcbllvdW5nc3Rvd24vTVxcbllwcmVzL01cXG5ZcHNpbGFudGkvTVxcbll1YW4vTVxcbll1Y2F0YW4vTVxcbll1Z28vTVxcbll1Z29zbGF2L01TXFxuWXVnb3NsYXZpYS9NXFxuWXVnb3NsYXZpYW4vU01cXG5ZdWtvbi9NXFxuWXVsZS9TTVxcbll1bGV0aWRlL01TXFxuWXVtYS9TTVxcbll1bm5hbi9NXFxuWXVyaS9NXFxuWXZlcy9NXFxuWXZldHRlL01cXG5Zdm9ubmUvTVxcblovU01OWFRcXG5aYWNoYXJpYWgvTVxcblphY2hhcnkvTVxcblphY2hlcnkvTVxcblphZ3JlYi9NXFxuWmFpcmUvTVxcblphaXJpYW5cXG5aYW1iZXppL01cXG5aYW1iaWEvTVxcblphbWJpYW4vU01cXG5aYW1ib25pL01cXG5aYW1lbmhvZi9NXFxuWmFtb3JhL01cXG5aYW5lL01cXG5aYW51Y2svTVxcblphbnppYmFyL01cXG5aYXBhdGEvTVxcblphcG9yb3poeWUvTVxcblphcG90ZWMvTVxcblphcHBhL01cXG5aYXJhL01cXG5aYXJhdGh1c3RyYS9NXFxuWmVhbGFuZC9NXFxuWmViZWRlZS9NXFxuWmVjaGFyaWFoL01cXG5aZWRla2lhaC9NXFxuWmVkb25nL01cXG5aZWZmaXJlbGxpL01cXG5aZWtlL01cXG5aZWxpZy9NXFxuWmVsbWEvTVxcblplbi9NXFxuWmVuZ2VyL01cXG5aZW5vL01cXG5aZXBoYW5pYWgvTVxcblplcGh5cmhpbGxzL01cXG5aZXBoeXJ1cy9NXFxuWmVzdC9NXFxuWmV1cy9NXFxuWmhkYW5vdlxcblpoZWppYW5nL01cXG5aaGVuZ3pob3UvTVxcblpoaXZhZ28vTVxcblpodWtvdi9NXFxuWmliby9NXFxuWmllZ2ZlbGQvTVxcblppZWdsZXIvTVxcblppZ2d5L01cXG5aaWthXFxuWmltYmFid2UvTVxcblppbWJhYndlYW4vU01cXG5aaW1tZXJtYW4vTVxcblppbmZhbmRlbC9NXFxuWmlvbi9TTVxcblppb25pc20vU01cXG5aaW9uaXN0L1NNXFxuWmlwbG9jL01cXG5abi9NXFxuWm9lL01cXG5ab2xhL01cXG5ab2xsdmVyZWluL01cXG5ab2xvZnQvTVxcblpvbWJhL01cXG5ab3JuL01cXG5ab3JvYXN0ZXIvTVxcblpvcm9hc3RyaWFuL01TXFxuWm9yb2FzdHJpYW5pc20vU01cXG5ab3Jyby9NXFxuWm9zbWEvTVxcblpyL01cXG5ac2lnbW9uZHkvTVxcblp1YmVuZWxnZW51YmkvTVxcblp1YmVuZXNjaGFtYWxpL01cXG5adWtvci9NXFxuWnVsdS9TTVxcblp1bHVsYW5kXFxuWnVuaS9NXFxuWnVyaWNoL01cXG5ad2luZ2xpL01cXG5ad29yeWtpbi9NXFxuWnlydGVjL01cXG5aeXVnYW5vdi9NXFxuWnp6XFxuYS9TXFxuYWFoXFxuYWFyZHZhcmsvU01cXG5hYi9TRFlcXG5hYmFja1xcbmFiYWN1cy9NU1xcbmFiYWZ0XFxuYWJhbG9uZS9TTVxcbmFiYW5kb24vTFNER1xcbmFiYW5kb25tZW50L01cXG5hYmFzZS9MR0RTXFxuYWJhc2VtZW50L01cXG5hYmFzaC9HTERTXFxuYWJhc2hlZC9VWVxcbmFiYXNobWVudC9NXFxuYWJhdGUvTEdEU1xcbmFiYXRlZC9VXFxuYWJhdGVtZW50L01cXG5hYmF0dG9pci9NU1xcbmFiYmUvU01cXG5hYmJlc3MvTVNcXG5hYmJleS9NU1xcbmFiYm90L01TXFxuYWJiclxcbmFiYnJldi9TXFxuYWJicmV2aWF0ZS9EU0dOWFxcbmFiYnJldmlhdGlvbi9NXFxuYWJkaWNhdGUvR05EU1hcXG5hYmRpY2F0aW9uL01cXG5hYmRvbWVuL1NNXFxuYWJkb21pbmFsXFxuYWJkdWN0L0RTR1xcbmFiZHVjdGVlL01TXFxuYWJkdWN0aW9uL1NNXFxuYWJkdWN0b3IvTVNcXG5hYmVhbVxcbmFiZXJyYW50XFxuYWJlcnJhdGlvbi9NU1xcbmFiZXJyYXRpb25hbFxcbmFiZXQvU1xcbmFiZXR0ZWRcXG5hYmV0dGluZ1xcbmFiZXR0b3IvU01cXG5hYmV5YW5jZS9NXFxuYWJob3IvU1xcbmFiaG9ycmVkXFxuYWJob3JyZW5jZS9NXFxuYWJob3JyZW50L1lcXG5hYmhvcnJpbmdcXG5hYmlkYW5jZS9NXFxuYWJpZGUvR1NcXG5hYmlkaW5nL1lcXG5hYmlsaXR5L0lFTVNcXG5hYmplY3QvWVBcXG5hYmplY3Rpb24vTVxcbmFiamVjdG5lc3MvTVxcbmFianVyYXRpb24vU01cXG5hYmp1cmF0b3J5XFxuYWJqdXJlL1pHRFJTXFxuYWJqdXJlci9NXFxuYWJsYXRlL1hHTlZEU1xcbmFibGF0aW9uL01cXG5hYmxhdGl2ZS9NU1xcbmFibGF6ZVxcbmFibGUvVVRcXG5hYmxlclxcbmFibG9vbVxcbmFibHV0aW9uL1NNXFxuYWJuZWdhdGUvR05EU1xcbmFibmVnYXRpb24vTVxcbmFibm9ybWFsL1lcXG5hYm5vcm1hbGl0eS9TTVxcbmFib2FyZFxcbmFib2RlL01TXFxuYWJvbGlzaC9HRFNcXG5hYm9saXRpb24vTVxcbmFib2xpdGlvbmlzbS9NXFxuYWJvbGl0aW9uaXN0L1NNXFxuYWJvbWluYWJsZVxcbmFib21pbmFibHlcXG5hYm9taW5hdGUvRFNHTlhcXG5hYm9taW5hdGlvbi9NXFxuYWJvcmlnaW5hbC9NU1xcbmFib3JpZ2luZS9TTVxcbmFib3JuaW5nXFxuYWJvcnQvR1ZEU1xcbmFib3J0aW9uL01TXFxuYWJvcnRpb25pc3QvTVNcXG5hYm9ydGl2ZS9ZXFxuYWJvdW5kL0RTR1xcbmFib3V0XFxuYWJvdmUvTVxcbmFib3ZlYm9hcmRcXG5hYnJhY2FkYWJyYS9NXFxuYWJyYWRlL0dEU1xcbmFicmFzaW9uL01TXFxuYWJyYXNpdmUvTVlQU1xcbmFicmFzaXZlbmVzcy9NXFxuYWJyZWFzdFxcbmFicmlkZ2UvRFNHXFxuYWJyaWRnbWVudC9NU1xcbmFicm9hZFxcbmFicm9nYXRlL1hHTkRTXFxuYWJyb2dhdGlvbi9NXFxuYWJyb2dhdG9yL01TXFxuYWJydXB0L1RQUllcXG5hYnJ1cHRuZXNzL01cXG5hYnMvTVxcbmFic2Nlc3MvTURTR1xcbmFic2Npc3NhL1NNXFxuYWJzY2lzc2lvbi9NXFxuYWJzY29uZC9aR1NEUlxcbmFic2NvbmRlci9NXFxuYWJzZWlsL01EU0dcXG5hYnNlbmNlL1NNXFxuYWJzZW50L0RZU0dcXG5hYnNlbnRlZS9NU1xcbmFic2VudGVlaXNtL01cXG5hYnNlbnRtaW5kZWQvWVBcXG5hYnNlbnRtaW5kZWRuZXNzL01cXG5hYnNpbnRoZS9NXFxuYWJzb2x1dGUvUE1ZVE5TXFxuYWJzb2x1dGVuZXNzL01cXG5hYnNvbHV0aW9uL01cXG5hYnNvbHV0aXNtL01cXG5hYnNvbHV0aXN0L01TXFxuYWJzb2x2ZS9EU0dcXG5hYnNvcmIvQUdEU1xcbmFic29yYmFuY2VcXG5hYnNvcmJlbmN5L01cXG5hYnNvcmJlbnQvU01cXG5hYnNvcmJpbmcvWVxcbmFic29ycHRpb24vTVxcbmFic29ycHRpdmVcXG5hYnN0YWluL0RSWkdTXFxuYWJzdGFpbmVyL01cXG5hYnN0ZW1pb3VzL1BZXFxuYWJzdGVtaW91c25lc3MvTVxcbmFic3RlbnRpb24vTVNcXG5hYnN0aW5lbmNlL01cXG5hYnN0aW5lbnRcXG5hYnN0cmFjdC9HU1BNRFlcXG5hYnN0cmFjdGVkL1lQXFxuYWJzdHJhY3RlZG5lc3MvTVxcbmFic3RyYWN0aW9uL1NNXFxuYWJzdHJhY3RuZXNzL01TXFxuYWJzdHJ1c2UvWVBcXG5hYnN0cnVzZW5lc3MvTVxcbmFic3VyZC9UUFJZXFxuYWJzdXJkaXN0L01TXFxuYWJzdXJkaXR5L1NNXFxuYWJzdXJkbmVzcy9NXFxuYWJ1bmRhbmNlL1NNXFxuYWJ1bmRhbnQvWVxcbmFidXNlJ3NcXG5hYnVzZS9FR1ZEU1xcbmFidXNlci9NU1xcbmFidXNpdmUvWVBcXG5hYnVzaXZlbmVzcy9NXFxuYWJ1dC9TTFxcbmFidXRtZW50L01TXFxuYWJ1dHRlZFxcbmFidXR0aW5nXFxuYWJ1enpcXG5hYnlzbWFsL1lcXG5hYnlzcy9NU1xcbmFieXNzYWxcXG5hY1xcbmFjYWNpYS9NU1xcbmFjYWRlbWUvTVxcbmFjYWRlbWlhL01cXG5hY2FkZW1pYy9TTVxcbmFjYWRlbWljYWwvWVxcbmFjYWRlbWljaWFuL01TXFxuYWNhZGVteS9TTVxcbmFjYW50aHVzL01TXFxuYWNjZWRlL0dEU1xcbmFjY2VsZXJhdGUvR05YRFNcXG5hY2NlbGVyYXRpb24vTVxcbmFjY2VsZXJhdG9yL1NNXFxuYWNjZW50L01EU0dcXG5hY2NlbnRlZC9VXFxuYWNjZW50dWFsXFxuYWNjZW50dWF0ZS9HTkRTXFxuYWNjZW50dWF0aW9uL01cXG5hY2NlcHQvRFNCR1xcbmFjY2VwdGFiaWxpdHkvTVxcbmFjY2VwdGFibGVuZXNzL01cXG5hY2NlcHRhYmx5L1VcXG5hY2NlcHRhbmNlL1NNXFxuYWNjZXB0YXRpb24vTVNcXG5hY2NlcHRlZC9VXFxuYWNjZXNzL01EU0dcXG5hY2Nlc3NpYmlsaXR5L0lNXFxuYWNjZXNzaWJsZS9JXFxuYWNjZXNzaWJseS9JXFxuYWNjZXNzaW9uL01ER1NcXG5hY2Nlc3Nvcml6ZS9EU0dcXG5hY2Nlc3NvcnkvU01cXG5hY2NpZGVudC9NU1xcbmFjY2lkZW50YWwvU01ZXFxuYWNjbGFpbS9NREdTXFxuYWNjbGFtYXRpb24vTVxcbmFjY2xpbWF0ZS9EU0dOXFxuYWNjbGltYXRpb24vTVxcbmFjY2xpbWF0aXphdGlvbi9NXFxuYWNjbGltYXRpemUvRFNHXFxuYWNjbGl2aXR5L1NNXFxuYWNjb2xhZGUvU01cXG5hY2NvbW1vZGF0ZS9YR05EU1xcbmFjY29tbW9kYXRpbmcvWVxcbmFjY29tbW9kYXRpb24vTVxcbmFjY29tcGFuaWVkL1VcXG5hY2NvbXBhbmltZW50L01TXFxuYWNjb21wYW5pc3QvU01cXG5hY2NvbXBhbnkvRFNHXFxuYWNjb21wbGljZS9TTVxcbmFjY29tcGxpc2gvRFNMR1xcbmFjY29tcGxpc2hlZC9VXFxuYWNjb21wbGlzaG1lbnQvTVNcXG5hY2NvcmQvR01EU1xcbmFjY29yZGFuY2UvTVxcbmFjY29yZGFudFxcbmFjY29yZGluZy9ZXFxuYWNjb3JkaW9uL01TXFxuYWNjb3JkaW9uaXN0L01TXFxuYWNjb3N0L0dNRFNcXG5hY2NvdW50L01EU0JHXFxuYWNjb3VudGFiaWxpdHkvTVxcbmFjY291bnRhYmxlL1VcXG5hY2NvdW50YW5jeS9NXFxuYWNjb3VudGFudC9NU1xcbmFjY291bnRlZC9VXFxuYWNjb3VudGluZy9NXFxuYWNjb3V0ZXIvU0dEXFxuYWNjb3V0ZXJtZW50cy9NXFxuYWNjcmVkaXQvU0dEXFxuYWNjcmVkaXRhdGlvbi9NXFxuYWNjcmVkaXRlZC9VXFxuYWNjcmV0aW9uL01TXFxuYWNjcnVhbC9NU1xcbmFjY3J1ZS9HRFNcXG5hY2N0XFxuYWNjdWx0dXJhdGUvRFNHTlxcbmFjY3VsdHVyYXRpb24vTVxcbmFjY3VtdWxhdGUvWEdOVkRTXFxuYWNjdW11bGF0aW9uL01cXG5hY2N1bXVsYXRvci9NU1xcbmFjY3VyYWN5L0lNXFxuYWNjdXJhdGUvSVlcXG5hY2N1cmF0ZW5lc3MvTVxcbmFjY3Vyc2VkL1BcXG5hY2N1cnNlZG5lc3MvTVxcbmFjY3VzYXRpb24vTVNcXG5hY2N1c2F0aXZlL01TXFxuYWNjdXNhdG9yeVxcbmFjY3VzZS9aR0RSU1xcbmFjY3VzZXIvTVxcbmFjY3VzaW5nL1lcXG5hY2N1c3RvbS9EU0dcXG5hY2N1c3RvbWVkL1VcXG5hY2UvRFNNR1xcbmFjZXJiYXRlL0RTR1xcbmFjZXJiaWNcXG5hY2VyYmljYWxseVxcbmFjZXJiaXR5L01cXG5hY2V0YW1pbm9waGVuL01cXG5hY2V0YXRlL01TXFxuYWNldGljXFxuYWNldG9uZS9NXFxuYWNldG9uaWNcXG5hY2V0eWxcXG5hY2V0eWxlbmUvTVxcbmFjaGUvRFNNR1xcbmFjaGVuZS9NU1xcbmFjaGlldmFibGUvVVxcbmFjaGlldmUvQkxaR0RSU1xcbmFjaGlldmVtZW50L1NNXFxuYWNoaWV2ZXIvTVxcbmFjaGluZy9ZXFxuYWNob28vTVxcbmFjaHJvbWF0aWNcXG5hY2h5L1RSXFxuYWNpZC9TTVlcXG5hY2lkaWNcXG5hY2lkaWZ5L0dEU1xcbmFjaWRpdHkvTVxcbmFjaWRvc2lzL01cXG5hY2lkdWxvdXNcXG5hY2tub3dsZWRnZS9EU0dcXG5hY2tub3dsZWRnZWQvVVxcbmFja25vd2xlZGdtZW50L1NNXFxuYWNtZS9TTVxcbmFjbmUvTVxcbmFjb2x5dGUvTVNcXG5hY29uaXRlL01TXFxuYWNvcm4vTVNcXG5hY291c3RpYy9TXFxuYWNvdXN0aWNhbC9ZXFxuYWNvdXN0aWNzL01cXG5hY3F1YWludC9BR1NEXFxuYWNxdWFpbnRhbmNlL1NNXFxuYWNxdWFpbnRhbmNlc2hpcC9NXFxuYWNxdWFpbnRlZC9VXFxuYWNxdWllc2NlL0RTR1xcbmFjcXVpZXNjZW5jZS9NXFxuYWNxdWllc2NlbnQvWVxcbmFjcXVpcmUvWkdCRFJTTFxcbmFjcXVpcmVtZW50L01cXG5hY3F1aXNpdGlvbi9NU1xcbmFjcXVpc2l0aXZlL1lQXFxuYWNxdWlzaXRpdmVuZXNzL01cXG5hY3F1aXQvU1xcbmFjcXVpdHRhbC9NU1xcbmFjcXVpdHRlZFxcbmFjcXVpdHRpbmdcXG5hY3JlL1NNXFxuYWNyZWFnZS9NU1xcbmFjcmlkL1BUUllcXG5hY3JpZGl0eS9NXFxuYWNyaWRuZXNzL01cXG5hY3JpbW9uaW91cy9ZUFxcbmFjcmltb25pb3VzbmVzcy9NXFxuYWNyaW1vbnkvTVxcbmFjcm9iYXQvTVNcXG5hY3JvYmF0aWMvU1xcbmFjcm9iYXRpY2FsbHlcXG5hY3JvYmF0aWNzL01cXG5hY3JvbnltL01TXFxuYWNyb3Bob2JpYS9NXFxuYWNyb3BvbGlzL01TXFxuYWNyb3NzXFxuYWNyb3N0aWMvU01cXG5hY3J5bGFtaWRlXFxuYWNyeWxpYy9NU1xcbmFjdCdzXFxuYWN0L0FTREdWXFxuYWN0aW5nL01cXG5hY3Rpbml1bS9NXFxuYWN0aW9uL0FTTVxcbmFjdGlvbmFibGVcXG5hY3RpdmF0ZS9JQ0FOR1NEXFxuYWN0aXZhdGlvbi9JQ0FNXFxuYWN0aXZhdG9yL01TXFxuYWN0aXZlJ3NcXG5hY3RpdmUvSUtZXFxuYWN0aXZlbmVzcy9NXFxuYWN0aXZlc1xcbmFjdGl2aXNtL01cXG5hY3RpdmlzdC9NU1xcbmFjdGl2aXRpZXNcXG5hY3Rpdml0eS9JTVxcbmFjdG9yL0FNU1xcbmFjdHJlc3MvTVNcXG5hY3R1YWwvWVxcbmFjdHVhbGl0eS9TTVxcbmFjdHVhbGl6YXRpb24vTVxcbmFjdHVhbGl6ZS9HRFNcXG5hY3R1YXJpYWxcXG5hY3R1YXJ5L1NNXFxuYWN0dWF0ZS9HTkRTXFxuYWN0dWF0aW9uL01cXG5hY3R1YXRvci9TTVxcbmFjdWl0eS9NXFxuYWN1bWVuL01cXG5hY3VwcmVzc3VyZS9NXFxuYWN1cHVuY3R1cmUvTVxcbmFjdXB1bmN0dXJpc3QvU01cXG5hY3V0ZS9QTVlUUlNcXG5hY3V0ZW5lc3MvTVxcbmFjeWNsb3Zpci9NXFxuYWN5bFxcbmFkL1NNXFxuYWRhZ2UvTVNcXG5hZGFnaW8vTVNcXG5hZGFtYW50L01ZXFxuYWRhcHQvQlpHVkRSU1xcbmFkYXB0YWJpbGl0eS9NXFxuYWRhcHRhdGlvbi9NU1xcbmFkYXB0ZXIvTVxcbmFkYXB0aW9uL1NcXG5hZGQvU0RSQlpHXFxuYWRkZW5kL01TXFxuYWRkZW5kYVxcbmFkZGVuZHVtL01cXG5hZGRlci9NXFxuYWRkaWN0L0dWTURTXFxuYWRkaWN0aW9uL1NNXFxuYWRkaXRpb24vU01cXG5hZGRpdGlvbmFsL1lcXG5hZGRpdGl2ZS9TTVxcbmFkZGxlL0dEU1xcbmFkZHJlc3Mnc1xcbmFkZHJlc3MvQUdEU1xcbmFkZHJlc3NhYmxlXFxuYWRkcmVzc2VkL1VcXG5hZGRyZXNzZWUvU01cXG5hZGR1Y2UvR0RTXFxuYWRlbmluZS9NXFxuYWRlbm9jYXJjaW5vbWFcXG5hZGVub2lkL1NNXFxuYWRlbm9pZGFsXFxuYWRlcHQvTVlQU1xcbmFkZXB0bmVzcy9NXFxuYWRlcXVhY3kvSU1cXG5hZGVxdWF0ZS9JWVxcbmFkZXF1YXRlbmVzcy9NXFxuYWRoZXJlL0dEU1xcbmFkaGVyZW5jZS9NXFxuYWRoZXJlbnQvU01cXG5hZGhlc2lvbi9NXFxuYWRoZXNpdmUvUFNNXFxuYWRoZXNpdmVuZXNzL01cXG5hZGlhYmF0aWNcXG5hZGlldS9NU1xcbmFkaW9zXFxuYWRpcG9zZVxcbmFkalxcbmFkamFjZW5jeS9NXFxuYWRqYWNlbnQvWVxcbmFkamVjdGl2YWwvWVxcbmFkamVjdGl2ZS9NU1xcbmFkam9pbi9HRFNcXG5hZGpvdXJuL0RHTFNcXG5hZGpvdXJubWVudC9TTVxcbmFkanVkZ2UvR0RTXFxuYWRqdWRpY2F0ZS9HTlZYRFNcXG5hZGp1ZGljYXRpb24vTVxcbmFkanVkaWNhdG9yL1NNXFxuYWRqdWRpY2F0b3J5XFxuYWRqdW5jdC9NU1xcbmFkanVyYXRpb24vTVNcXG5hZGp1cmUvR0RTXFxuYWRqdXN0L0FHRFNMXFxuYWRqdXN0YWJsZVxcbmFkanVzdGVyL1NNXFxuYWRqdXN0bWVudC9BTVNcXG5hZGp1dGFudC9TTVxcbmFkbWFuL01cXG5hZG1lblxcbmFkbWluL1NcXG5hZG1pbmlzdGVyL0RHU1xcbmFkbWluaXN0cmF0ZS9YRFNHTlZcXG5hZG1pbmlzdHJhdGlvbi9NXFxuYWRtaW5pc3RyYXRpdmUvWVxcbmFkbWluaXN0cmF0b3IvTVNcXG5hZG1pcmFibHlcXG5hZG1pcmFsL01TXFxuYWRtaXJhbHR5L01cXG5hZG1pcmF0aW9uL01cXG5hZG1pcmUvQlpHRFJTXFxuYWRtaXJlci9NXFxuYWRtaXJpbmcvWVxcbmFkbWlzc2liaWxpdHkvSU1cXG5hZG1pc3NpYmxlL0lcXG5hZG1pc3NpYmx5XFxuYWRtaXNzaW9uL0FNXFxuYWRtaXNzaW9uc1xcbmFkbWl0L0FTXFxuYWRtaXR0YW5jZS9NXFxuYWRtaXR0ZWQvWVxcbmFkbWl0dGluZy9BXFxuYWRtaXgvR0RTXFxuYWRtaXh0dXJlL1NNXFxuYWRtb25pc2gvTERTR1xcbmFkbW9uaXNobWVudC9NU1xcbmFkbW9uaXRpb24vTVNcXG5hZG1vbml0b3J5XFxuYWRvL01cXG5hZG9iZS9NU1xcbmFkb2xlc2NlbmNlL1NNXFxuYWRvbGVzY2VudC9TTVxcbmFkb3B0L0FHVkRTXFxuYWRvcHRhYmxlXFxuYWRvcHRlci9NU1xcbmFkb3B0aW9uL1NNXFxuYWRvcmFibGVuZXNzL01cXG5hZG9yYWJseVxcbmFkb3JhdGlvbi9NXFxuYWRvcmUvQlpHRFJTXFxuYWRvcmVyL01cXG5hZG9yaW5nL1lcXG5hZG9ybi9MR0RTXFxuYWRvcm5lZC9VXFxuYWRvcm5tZW50L01TXFxuYWRyZW5hbC9NU1xcbmFkcmVuYWxpbidzXFxuYWRyZW5hbGluZS9NXFxuYWRyZW5lcmdpY1xcbmFkcmlmdFxcbmFkcm9pdC9QWVxcbmFkcm9pdG5lc3MvTVxcbmFkc29yYi9TREdcXG5hZHNvcmJlbnQvTVNcXG5hZHNvcnB0aW9uL1NNXFxuYWR1bGF0ZS9EU0dOXFxuYWR1bGF0aW9uL01cXG5hZHVsYXRvci9NU1xcbmFkdWxhdG9yeVxcbmFkdWx0L01TXFxuYWR1bHRlcmFudC9NU1xcbmFkdWx0ZXJhdGUvR05EU1xcbmFkdWx0ZXJhdGVkL1VcXG5hZHVsdGVyYXRpb24vTVxcbmFkdWx0ZXJlci9TTVxcbmFkdWx0ZXJlc3MvTVNcXG5hZHVsdGVyb3VzXFxuYWR1bHRlcnkvU01cXG5hZHVsdGhvb2QvTVxcbmFkdW1icmF0ZS9HTkRTXFxuYWR1bWJyYXRpb24vTVxcbmFkdlxcbmFkdmFuY2UvTERTTUdcXG5hZHZhbmNlbWVudC9TTVxcbmFkdmFudGFnZS9FRFNNR1xcbmFkdmFudGFnZW91cy9FWVxcbmFkdmVudC9TTVxcbmFkdmVudGl0aW91cy9ZXFxuYWR2ZW50dXJlL0RSU01aR1xcbmFkdmVudHVyZXIvTVxcbmFkdmVudHVyZXNvbWVcXG5hZHZlbnR1cmVzcy9NU1xcbmFkdmVudHVyaXNtXFxuYWR2ZW50dXJpc3QvU1xcbmFkdmVudHVyb3VzL1lQXFxuYWR2ZW50dXJvdXNuZXNzL01cXG5hZHZlcmIvU01cXG5hZHZlcmJpYWwvU01ZXFxuYWR2ZXJzYXJpYWxcXG5hZHZlcnNhcnkvU01cXG5hZHZlcnNlL1BSWVRcXG5hZHZlcnNlbmVzcy9NXFxuYWR2ZXJzaXR5L1NNXFxuYWR2ZXJ0L1NNREdcXG5hZHZlcnRpc2UvTFpHRFJTXFxuYWR2ZXJ0aXNlZC9VXFxuYWR2ZXJ0aXNlbWVudC9NU1xcbmFkdmVydGlzZXIvTVxcbmFkdmVydGlzaW5nL01cXG5hZHZlcnRvcmlhbC9TTVxcbmFkdmljZS9NXFxuYWR2aXNhYmlsaXR5L0lNXFxuYWR2aXNhYmxlL0lcXG5hZHZpc2FibHlcXG5hZHZpc2UvTERSU1pHQlxcbmFkdmlzZWQvVVlcXG5hZHZpc2VtZW50L01cXG5hZHZpc2VyL01cXG5hZHZpc29yL1NNXFxuYWR2aXNvcnkvU01cXG5hZHZvY2FjeS9NXFxuYWR2b2NhdGUvTUdEU1xcbmFkdnRcXG5hZHdhcmVcXG5hZHplL1NNXFxuYWVnaXMvTVxcbmFlcmF0ZS9EU0dOXFxuYWVyYXRpb24vTVxcbmFlcmF0b3IvU01cXG5hZXJpYWwvU01ZXFxuYWVyaWFsaXN0L01TXFxuYWVyaWUvTVNcXG5hZXJvYmF0aWMvU1xcbmFlcm9iYXRpY3MvTVxcbmFlcm9iaWMvU1xcbmFlcm9iaWNhbGx5XFxuYWVyb2JpY3MvTVxcbmFlcm9kcm9tZS9NU1xcbmFlcm9keW5hbWljL1NcXG5hZXJvZHluYW1pY2FsbHlcXG5hZXJvZHluYW1pY3MvTVxcbmFlcm9ncmFtL1NcXG5hZXJvbmF1dGljL1NcXG5hZXJvbmF1dGljYWxcXG5hZXJvbmF1dGljcy9NXFxuYWVyb3NvbC9NU1xcbmFlcm9zcGFjZS9NXFxuYWVyeVxcbmFlc3RoZXRlL01TXFxuYWVzdGhldGljL1NcXG5hZXN0aGV0aWNhbGx5XFxuYWVzdGhldGljaXNtL01cXG5hZXN0aGV0aWNzL01cXG5hZmFyXFxuYWZmYWJpbGl0eS9NXFxuYWZmYWJsZVxcbmFmZmFibHlcXG5hZmZhaXIvTVNcXG5hZmZlY3Qnc1xcbmFmZmVjdC9FR0RTXFxuYWZmZWN0YXRpb24vU01cXG5hZmZlY3RlZC9VWVxcbmFmZmVjdGluZy9ZXFxuYWZmZWN0aW9uL0VNXFxuYWZmZWN0aW9uYXRlL1lcXG5hZmZlY3Rpb25zXFxuYWZmZXJlbnRcXG5hZmZpYW5jZS9HRFNcXG5hZmZpZGF2aXQvU01cXG5hZmZpbGlhdGUnc1xcbmFmZmlsaWF0ZS9FR05EU1xcbmFmZmlsaWF0ZWQvVVxcbmFmZmlsaWF0aW9uL0VNXFxuYWZmaWxpYXRpb25zXFxuYWZmaW5lXFxuYWZmaW5pdHkvU01cXG5hZmZpcm0vQUdEU1xcbmFmZmlybWF0aW9uL0FNU1xcbmFmZmlybWF0aXZlL01ZU1xcbmFmZml4L0dNRFNcXG5hZmZsYXR1cy9NXFxuYWZmbGljdC9HRFNcXG5hZmZsaWN0aW9uL1NNXFxuYWZmbHVlbmNlL01cXG5hZmZsdWVudC9ZXFxuYWZmb3JkL0dEU0JcXG5hZmZvcmRhYmlsaXR5XFxuYWZmb3JkYWJseVxcbmFmZm9yZXN0L0VHU0RcXG5hZmZvcmVzdGF0aW9uL01cXG5hZmZyYXkvTVNcXG5hZmZyb250L0dNRFNcXG5hZmdoYW4vTVNcXG5hZmljaW9uYWRvL01TXFxuYWZpZWxkXFxuYWZpcmVcXG5hZmxhbWVcXG5hZmxvYXRcXG5hZmx1dHRlclxcbmFmb290XFxuYWZvcmVtZW50aW9uZWRcXG5hZm9yZXNhaWRcXG5hZm9yZXRob3VnaHRcXG5hZm91bFxcbmFmcmFpZC9VXFxuYWZyZXNoXFxuYWZ0L1JaXFxuYWZ0ZXJiaXJ0aC9NXFxuYWZ0ZXJiaXJ0aHNcXG5hZnRlcmJ1cm5lci9NU1xcbmFmdGVyY2FyZS9NXFxuYWZ0ZXJlZmZlY3QvTVNcXG5hZnRlcmdsb3cvU01cXG5hZnRlcmltYWdlL01TXFxuYWZ0ZXJsaWZlL01cXG5hZnRlcmxpdmVzXFxuYWZ0ZXJtYXJrZXQvTVNcXG5hZnRlcm1hdGgvTVxcbmFmdGVybWF0aHNcXG5hZnRlcm5vb24vTVNcXG5hZnRlcnNoYXZlL1NNXFxuYWZ0ZXJzaG9jay9TTVxcbmFmdGVydGFzdGUvU01cXG5hZnRlcnRob3VnaHQvU01cXG5hZnRlcndhcmQvU1xcbmFmdGVyd29yZC9NU1xcbmFnYWluXFxuYWdhaW5zdFxcbmFnYXBlL01cXG5hZ2FyL01cXG5hZ2F0ZS9NU1xcbmFnYXZlL01cXG5hZ2UvRFNNR0pcXG5hZ2Vpc20vTVxcbmFnZWlzdC9TTVxcbmFnZWxlc3MvWVBcXG5hZ2VsZXNzbmVzcy9NXFxuYWdlbmN5L1NNXFxuYWdlbmRhL1NNXFxuYWdlbmVzaXNcXG5hZ2VudC9BTVNcXG5hZ2VyYXR1bS9NXFxuYWdnbG9tZXJhdGUvRFNNR05YXFxuYWdnbG9tZXJhdGlvbi9NXFxuYWdnbHV0aW5hdGUvRFNYR05cXG5hZ2dsdXRpbmF0aW9uL01cXG5hZ2dyYW5kaXplL0dMRFNcXG5hZ2dyYW5kaXplbWVudC9NXFxuYWdncmF2YXRlL0dOWERTXFxuYWdncmF2YXRpbmcvWVxcbmFnZ3JhdmF0aW9uL01cXG5hZ2dyZWdhdGUvTUdORFNYXFxuYWdncmVnYXRpb24vTVxcbmFnZ3JlZ2F0b3IvU01cXG5hZ2dyZXNzaW9uL01cXG5hZ2dyZXNzaXZlL1BZXFxuYWdncmVzc2l2ZW5lc3MvTVxcbmFnZ3Jlc3Nvci9TTVxcbmFnZ3JpZXZlL0RTR1xcbmFnZ3JvXFxuYWdoYXN0XFxuYWdpbGUvWVxcbmFnaWxpdHkvTVxcbmFnaW5nL01cXG5hZ2l0YXRlL1hHTkRTXFxuYWdpdGF0aW9uL01cXG5hZ2l0YXRvci9NU1xcbmFnaXRwcm9wL01cXG5hZ2xlYW1cXG5hZ2xpdHRlclxcbmFnbG93XFxuYWdub3N0aWMvTVNcXG5hZ25vc3RpY2lzbS9NXFxuYWdvXFxuYWdvZ1xcbmFnb25pc3QvU1xcbmFnb25pemUvR0RTXFxuYWdvbml6aW5nL1lcXG5hZ29ueS9TTVxcbmFnb3JhcGhvYmlhL01cXG5hZ29yYXBob2JpYy9NU1xcbmFncmFyaWFuL01TXFxuYWdyYXJpYW5pc20vTVxcbmFncmVlL0VCTERTXFxuYWdyZWVhYmxlbmVzcy9FTVxcbmFncmVlYWJseS9FXFxuYWdyZWVpbmcvRVxcbmFncmVlbWVudC9FU01cXG5hZ3JpYnVzaW5lc3MvTVNcXG5hZ3JpY3VsdHVyYWwvWVxcbmFncmljdWx0dXJhbGlzdC9NU1xcbmFncmljdWx0dXJlL01cXG5hZ3JpY3VsdHVyaXN0L01TXFxuYWdyb25vbWljXFxuYWdyb25vbWlzdC9NU1xcbmFncm9ub215L01cXG5hZ3JvdW5kXFxuYWd1ZS9NXFxuYWhcXG5haGFcXG5haGNob29cXG5haGVhZFxcbmFoZW1cXG5haG95XFxuYWlkL1NNREdcXG5haWRlL1NNXFxuYWlkZWQvVVxcbmFpZ3JldHRlL01TXFxuYWlsL1NETEdcXG5haWxlcm9uL1NNXFxuYWlsbWVudC9TTVxcbmFpbS9TTURHXFxuYWltbGVzcy9ZUFxcbmFpbWxlc3NuZXNzL01cXG5haW4ndFxcbmFpci9TTURKR1xcbmFpcmJhZy9NU1xcbmFpcmJhc2UvU01cXG5haXJiZWQvU1xcbmFpcmJvcm5lXFxuYWlyYnJ1c2gvTURTR1xcbmFpcmJ1cy9NU1xcbmFpcmNyYWZ0L01cXG5haXJjcmFmdG1hblxcbmFpcmNyYWZ0bWVuXFxuYWlyY3Jldy9TXFxuYWlyZHJvbWUvU1xcbmFpcmRyb3AvU01cXG5haXJkcm9wcGVkXFxuYWlyZHJvcHBpbmdcXG5haXJmYXJlL1NNXFxuYWlyZmllbGQvU01cXG5haXJmbG93L01cXG5haXJmb2lsL1NNXFxuYWlyZnJlaWdodC9NXFxuYWlyZ3Vuc1xcbmFpcmhlYWQvU01cXG5haXJpbHlcXG5haXJpbmVzcy9NXFxuYWlyaW5nL01cXG5haXJsZXNzL1BcXG5haXJsZXNzbmVzcy9NXFxuYWlybGV0dGVyc1xcbmFpcmxpZnQvU0dNRFxcbmFpcmxpbmUvUlNNWlxcbmFpcmxpbmVyL01cXG5haXJsb2NrL1NNXFxuYWlybWFpbC9HU01EXFxuYWlybWFuL01cXG5haXJtZW5cXG5haXJwbGFuZS9NU1xcbmFpcnBsYXkvTVxcbmFpcnBvcnQvU01cXG5haXJzaGlwL1NNXFxuYWlyc2hvdy9TXFxuYWlyc2ljay9QXFxuYWlyc2lja25lc3MvTVxcbmFpcnNwYWNlL01cXG5haXJzcGVlZFxcbmFpcnN0cmlrZS9NU1xcbmFpcnN0cmlwL1NNXFxuYWlydGlnaHRcXG5haXJ0aW1lL01cXG5haXJ3YXZlcy9NXFxuYWlyd2F5L01TXFxuYWlyd29tYW5cXG5haXJ3b21lblxcbmFpcndvcnRoaW5lc3MvTVxcbmFpcndvcnRoeS9QXFxuYWlyeS9QVFJcXG5haXNsZS9NU1xcbmFpdGNoL01TXFxuYWphclxcbmFrYVxcbmFraW1ib1xcbmFraW5cXG5hbGFiYXN0ZXIvTVxcbmFsYWNrXFxuYWxhY3JpdHkvTVxcbmFsYXJtL0dNRFNcXG5hbGFybWluZy9ZXFxuYWxhcm1pc3QvU01cXG5hbGFzXFxuYWxiL1NNXFxuYWxiYWNvcmUvU01cXG5hbGJhdHJvc3MvTVNcXG5hbGJlaXRcXG5hbGJpbmlzbS9NXFxuYWxiaW5vL01TXFxuYWxidW0vTU5TXFxuYWxidW1lbi9NXFxuYWxidW1pbi9NXFxuYWxidW1pbm91c1xcbmFsY2hlbWlzdC9TTVxcbmFsY2hlbXkvTVxcbmFsY29ob2wvU01cXG5hbGNvaG9saWMvTVNcXG5hbGNvaG9saWNhbGx5XFxuYWxjb2hvbGlzbS9NXFxuYWxjb3ZlL01TXFxuYWxkZXIvTVNcXG5hbGRlcm1hbi9NXFxuYWxkZXJtZW5cXG5hbGRlcndvbWFuL01cXG5hbGRlcndvbWVuXFxuYWxlL1NNVlxcbmFsZWF0b3J5XFxuYWxlaG91c2UvU01cXG5hbGVtYmljL1NNXFxuYWxlcnQvR01EWVBTXFxuYWxlcnRuZXNzL01cXG5hbGV3aWZlL01cXG5hbGV3aXZlc1xcbmFsZmFsZmEvTVxcbmFsZnJlc2NvXFxuYWxnYS9NXFxuYWxnYWVcXG5hbGdhbFxcbmFsZ2VicmEvU01cXG5hbGdlYnJhaWNcXG5hbGdlYnJhaWNhbGx5XFxuYWxnb3JpdGhtL1NNXFxuYWxnb3JpdGhtaWNcXG5hbGlhcy9HTURTXFxuYWxpYmkvR01EU1xcbmFsaWVuL0JHTURTXFxuYWxpZW5hYmxlL0lVXFxuYWxpZW5hdGUvRFNHTlxcbmFsaWVuYXRpb24vTVxcbmFsaWVuaXN0L1NNXFxuYWxpZ2h0L0dEU1xcbmFsaWduL0FMR0RTXFxuYWxpZ25lZC9VXFxuYWxpZ25lci9NU1xcbmFsaWdubWVudC9BTVNcXG5hbGlrZS9VXFxuYWxpbWVudC9NRFNHXFxuYWxpbWVudGFyeVxcbmFsaW1vbnkvTVxcbmFsaXZlbmVzcy9NXFxuYWxpeWFoL01cXG5hbGl5YWhzXFxuYWxrYWxpL01cXG5hbGthbGllc1xcbmFsa2FsaW5lXFxuYWxrYWxpbml0eS9NXFxuYWxrYWxpemUvRFNHXFxuYWxrYWxvaWQvU01cXG5hbGt5ZC9NU1xcbmFsbC9NXFxuYWxsYXkvR0RTXFxuYWxsZWdhdGlvbi9NU1xcbmFsbGVnZS9HRFNcXG5hbGxlZ2VkL1lcXG5hbGxlZ2lhbmNlL01TXFxuYWxsZWdvcmljXFxuYWxsZWdvcmljYWwvWVxcbmFsbGVnb3Jpc3QvTVNcXG5hbGxlZ29yeS9TTVxcbmFsbGVncmV0dG8vTVNcXG5hbGxlZ3JvL01TXFxuYWxsZWxlL01TXFxuYWxsZWx1aWEvU01cXG5hbGxlcmdlbi9TTVxcbmFsbGVyZ2VuaWNcXG5hbGxlcmdpY1xcbmFsbGVyZ2ljYWxseVxcbmFsbGVyZ2lzdC9TTVxcbmFsbGVyZ3kvU01cXG5hbGxldmlhdGUvRFNHTlxcbmFsbGV2aWF0aW9uL01cXG5hbGxleS9NU1xcbmFsbGV5d2F5L1NNXFxuYWxsaWFuY2UvU01cXG5hbGxpZ2F0b3IvTVNcXG5hbGxpdGVyYXRlL0RTWEdOVlxcbmFsbGl0ZXJhdGlvbi9NXFxuYWxsaXRlcmF0aXZlL1lcXG5hbGxvY2F0ZS9BRFNHTlxcbmFsbG9jYXRpb24vQU1cXG5hbGxvY2F0aW9uc1xcbmFsbG90L0xTXFxuYWxsb3RtZW50L1NNXFxuYWxsb3R0ZWRcXG5hbGxvdHRpbmdcXG5hbGxvdmVyXFxuYWxsb3cvRUdEU1xcbmFsbG93YWJsZS9VXFxuYWxsb3dhYmx5XFxuYWxsb3dhbmNlL1NNXFxuYWxsb3kvR01EU1xcbmFsbG95ZWQvVVxcbmFsbHNwaWNlL01cXG5hbGx1ZGUvR0RTXFxuYWxsdXJlL01HTERTXFxuYWxsdXJlbWVudC9NU1xcbmFsbHVyaW5nL1lcXG5hbGx1c2lvbi9TTVxcbmFsbHVzaXZlL1BZXFxuYWxsdXNpdmVuZXNzL01cXG5hbGx1dmlhbC9NXFxuYWxsdXZpdW0vU01cXG5hbGx5L0dEU01cXG5hbG1hbmFjL1NNXFxuYWxtaWdodHlcXG5hbG1vbmQvTVNcXG5hbG1vbmVyL1NNXFxuYWxtb3N0XFxuYWxtcy9NXFxuYWxtc2hvdXNlL01TXFxuYWxvZS9TTVxcbmFsb2Z0XFxuYWxvaGEvTVNcXG5hbG9uZVxcbmFsb25nXFxuYWxvbmdzaG9yZVxcbmFsb25nc2lkZVxcbmFsb29mL1BZXFxuYWxvb2ZuZXNzL01cXG5hbG91ZFxcbmFscC9TTVxcbmFscGFjYS9NU1xcbmFscGhhL01TXFxuYWxwaGFiZXQvU01cXG5hbHBoYWJldGljXFxuYWxwaGFiZXRpY2FsL1lcXG5hbHBoYWJldGl6YXRpb24vU01cXG5hbHBoYWJldGl6ZS9aR0RSU1xcbmFscGhhYmV0aXplci9NXFxuYWxwaGFudW1lcmljXFxuYWxwaGFudW1lcmljYWwvWVxcbmFscGluZS9TXFxuYWxyZWFkeVxcbmFscmlnaHRcXG5hbHNvXFxuYWx0L1NcXG5hbHRhci9NU1xcbmFsdGFycGllY2UvU01cXG5hbHRlci9HREJTXFxuYWx0ZXJhYmxlL1VcXG5hbHRlcmF0aW9uL01TXFxuYWx0ZXJjYXRpb24vU01cXG5hbHRlcmVkL1VcXG5hbHRlcm5hdGUvRFNNWUdOVlhcXG5hbHRlcm5hdGlvbi9NXFxuYWx0ZXJuYXRpdmUvTVlTXFxuYWx0ZXJuYXRvci9TTVxcbmFsdGhvdWdoXFxuYWx0aW1ldGVyL01TXFxuYWx0aXR1ZGUvTVNcXG5hbHRvL1NNXFxuYWx0b2dldGhlclxcbmFsdHJ1aXNtL01cXG5hbHRydWlzdC9TTVxcbmFsdHJ1aXN0aWNcXG5hbHRydWlzdGljYWxseVxcbmFsdW0vU01cXG5hbHVtaW5hL01cXG5hbHVtaW51bS9NXFxuYWx1bW5hL01cXG5hbHVtbmFlXFxuYWx1bW5pXFxuYWx1bW51cy9NXFxuYWx2ZW9sYXIvU1xcbmFsd2F5c1xcbmFtL05cXG5hbWFsZ2FtL1NNXFxuYW1hbGdhbWF0ZS9YR05EU1xcbmFtYWxnYW1hdGlvbi9NXFxuYW1hbnVlbnNlc1xcbmFtYW51ZW5zaXMvTVxcbmFtYXJhbnRoL01cXG5hbWFyYW50aHNcXG5hbWFyZXR0by9NXFxuYW1hcnlsbGlzL01TXFxuYW1hc3MvR0RTXFxuYW1hdGV1ci9TTVxcbmFtYXRldXJpc2gvWVBcXG5hbWF0ZXVyaXNobmVzcy9NXFxuYW1hdGV1cmlzbS9NXFxuYW1hdG9yeVxcbmFtYXplL0xNR0RTXFxuYW1hemVtZW50L01cXG5hbWF6aW5nL1lcXG5hbWF6b24vTVNcXG5hbWF6b25pYW5cXG5hbWJhc3NhZG9yL1NNXFxuYW1iYXNzYWRvcmlhbFxcbmFtYmFzc2Fkb3JzaGlwL01TXFxuYW1iYXNzYWRyZXNzL01TXFxuYW1iZXIvTVxcbmFtYmVyZ3Jpcy9NXFxuYW1iaWFuY2UvTVNcXG5hbWJpZGV4dGVyaXR5L01cXG5hbWJpZGV4dHJvdXMvWVxcbmFtYmllbnRcXG5hbWJpZ3VpdHkvU01cXG5hbWJpZ3VvdXMvVVlcXG5hbWJpdFxcbmFtYml0aW9uL01TXFxuYW1iaXRpb3VzL1lQXFxuYW1iaXRpb3VzbmVzcy9NXFxuYW1iaXZhbGVuY2UvTVxcbmFtYml2YWxlbnQvWVxcbmFtYmxlL01aR0RSU1xcbmFtYmxlci9NXFxuYW1icm9zaWEvTVxcbmFtYnJvc2lhbFxcbmFtYnVsYW5jZS9NU1xcbmFtYnVsYW5jZW1hblxcbmFtYnVsYW5jZW1lblxcbmFtYnVsYW5jZXdvbWFuXFxuYW1idWxhbmNld29tZW5cXG5hbWJ1bGFudFxcbmFtYnVsYXRlL0RTWEdOXFxuYW1idWxhdGlvbi9NXFxuYW1idWxhdG9yeS9TTVxcbmFtYnVzY2FkZS9NR0RTXFxuYW1idXNoL0dNRFNcXG5hbWVsaW9yYXRlL0dOVkRTXFxuYW1lbGlvcmF0aW9uL01cXG5hbWVuL0JcXG5hbWVuYWJpbGl0eS9NXFxuYW1lbmFibHlcXG5hbWVuZC9CTEdEU1xcbmFtZW5kbWVudC9TTVxcbmFtZW5pdHkvU01cXG5hbWVyY2UvR0xEU1xcbmFtZXJjZW1lbnQvU01cXG5hbWVyaWNpdW0vTVxcbmFtZXRoeXN0L1NNXFxuYW1pYWJpbGl0eS9NXFxuYW1pYWJsZVxcbmFtaWFibHlcXG5hbWljYWJpbGl0eS9NXFxuYW1pY2FibGVcXG5hbWljYWJseVxcbmFtaWRcXG5hbWlkZS9NU1xcbmFtaWRzaGlwL1NcXG5hbWlnby9NU1xcbmFtaW5lL1NcXG5hbWlub1xcbmFtaXNzXFxuYW1pdHJpcHR5bGluZVxcbmFtaXR5L01cXG5hbW1ldGVyL1NNXFxuYW1tby9NXFxuYW1tb25pYS9NXFxuYW1tb25pdW1cXG5hbW11bml0aW9uL01cXG5hbW5lc2lhL01cXG5hbW5lc2lhYy9NU1xcbmFtbmVzaWMvU01cXG5hbW5lc3R5L0dEU01cXG5hbW5pb2NlbnRlc2VzXFxuYW1uaW9jZW50ZXNpcy9NXFxuYW1uaW9uL01TXFxuYW1uaW90aWNcXG5hbW9lYmEvTVNcXG5hbW9lYmFlXFxuYW1vZWJpY1xcbmFtb2tcXG5hbW9uZ1xcbmFtb250aWxsYWRvL1NNXFxuYW1vcmFsL1lcXG5hbW9yYWxpdHkvTVxcbmFtb3JvdXMvWVBcXG5hbW9yb3VzbmVzcy9NXFxuYW1vcnBob3VzL1BZXFxuYW1vcnBob3VzbmVzcy9NXFxuYW1vcnRpemF0aW9uL1NNXFxuYW1vcnRpemUvRFNHQlxcbmFtb3VudC9HTURTXFxuYW1vdXIvTVNcXG5hbW94aWNpbGxpblxcbmFtcC9TTVlcXG5hbXBlcmFnZS9NXFxuYW1wZXJlL01TXFxuYW1wZXJzYW5kL01TXFxuYW1waGV0YW1pbmUvU01cXG5hbXBoaWJpYW4vTVNcXG5hbXBoaWJpb3VzL1lcXG5hbXBoaXRoZWF0ZXIvU01cXG5hbXBob3JhL01cXG5hbXBob3JhZVxcbmFtcGljaWxsaW5cXG5hbXBsZS9UUlxcbmFtcGxpZmljYXRpb24vTVxcbmFtcGxpZmllci9NXFxuYW1wbGlmeS9ORFJTWFpHXFxuYW1wbGl0dWRlL1NNXFxuYW1wdWxlL01TXFxuYW1wdXRhdGUvR05EU1hcXG5hbXB1dGF0aW9uL01cXG5hbXB1dGVlL01TXFxuYW10XFxuYW11bGV0L01TXFxuYW11c2UvTEdEU1xcbmFtdXNlbWVudC9NU1xcbmFtdXNpbmcvWVxcbmFteWdkYWxhXFxuYW15bGFzZS9NXFxuYW15bG9pZFxcbmFuL0NTXFxuYW5hYm9saXNtL01cXG5hbmFjaHJvbmlzbS9TTVxcbmFuYWNocm9uaXN0aWNcXG5hbmFjaHJvbmlzdGljYWxseVxcbmFuYWNvbmRhL1NNXFxuYW5hZXJvYmUvU01cXG5hbmFlcm9iaWNcXG5hbmFlcm9iaWNhbGx5XFxuYW5hZ3JhbS9NU1xcbmFuYWwvWVxcbmFuYWxnZXNpYS9NXFxuYW5hbGdlc2ljL1NNXFxuYW5hbG9nL01TXFxuYW5hbG9naWNhbC9ZXFxuYW5hbG9naXplL0dEU1xcbmFuYWxvZ291cy9ZUFxcbmFuYWxvZ291c25lc3MvTVxcbmFuYWxvZ3VlL1NNXFxuYW5hbG9neS9TTVxcbmFuYWx5c2FuZC9NU1xcbmFuYWx5c2VzL0FcXG5hbmFseXNpcy9BTVxcbmFuYWx5c3QvU01cXG5hbmFseXRpYy9TXFxuYW5hbHl0aWNhbC9ZXFxuYW5hbHl6YWJsZVxcbmFuYWx5emUvQURTR1xcbmFuYWx5emVyL1NNXFxuYW5hcGVzdC9TTVxcbmFuYXBlc3RpYy9NU1xcbmFuYXJjaGljXFxuYW5hcmNoaWNhbGx5XFxuYW5hcmNoaXNtL01cXG5hbmFyY2hpc3QvTVNcXG5hbmFyY2hpc3RpY1xcbmFuYXJjaHkvTVxcbmFuYXRoZW1hL1NNXFxuYW5hdGhlbWF0aXplL0RTR1xcbmFuYXRvbWljXFxuYW5hdG9taWNhbC9ZXFxuYW5hdG9taXN0L1NNXFxuYW5hdG9taXplL0RTR1xcbmFuYXRvbXkvU01cXG5hbmNlc3Rvci9TTVxcbmFuY2VzdHJhbC9ZXFxuYW5jZXN0cmVzcy9NU1xcbmFuY2VzdHJ5L1NNXFxuYW5jaG9yL01ER1NcXG5hbmNob3JhZ2UvTVNcXG5hbmNob3JpdGUvTVNcXG5hbmNob3JtYW4vTVxcbmFuY2hvcm1lblxcbmFuY2hvcnBlb3BsZVxcbmFuY2hvcnBlcnNvbi9TTVxcbmFuY2hvcndvbWFuL01cXG5hbmNob3J3b21lblxcbmFuY2hvdnkvU01cXG5hbmNpZW50L1NQTVJZVFxcbmFuY2llbnRuZXNzL01cXG5hbmNpbGxhcnkvU01cXG5hbmRcXG5hbmRhbnRlL1NNXFxuYW5kaXJvbi9TTVxcbmFuZHJvZ2VuL01cXG5hbmRyb2dlbmljXFxuYW5kcm9neW5vdXNcXG5hbmRyb2d5bnkvTVxcbmFuZHJvaWQvU01cXG5hbmVjZG90YWwvWVxcbmFuZWNkb3RlL01TXFxuYW5lbWlhL01cXG5hbmVtaWNcXG5hbmVtaWNhbGx5XFxuYW5lbW9tZXRlci9TTVxcbmFuZW1vbmUvU01cXG5hbmVudFxcbmFuZXN0aGVzaWEvTVxcbmFuZXN0aGVzaW9sb2dpc3QvU01cXG5hbmVzdGhlc2lvbG9neS9NXFxuYW5lc3RoZXRpYy9TTVxcbmFuZXN0aGV0aXN0L01TXFxuYW5lc3RoZXRpemF0aW9uL01cXG5hbmVzdGhldGl6ZS9HRFNcXG5hbmV1cnlzbS9TTVxcbmFuZXdcXG5hbmdlbC9NU1xcbmFuZ2VsZmlzaC9NU1xcbmFuZ2VsaWNcXG5hbmdlbGljYS9NXFxuYW5nZWxpY2FsL1lcXG5hbmdlci9HTURTXFxuYW5naW5hL01cXG5hbmdpb3BsYXN0eS9TTVxcbmFuZ2lvc3Blcm0vU01cXG5hbmdsZS9NWkdEUlNcXG5hbmdsZXIvTVxcbmFuZ2xld29ybS9NU1xcbmFuZ2xpY2lzbS9TXFxuYW5nbGljaXplL0dEU1xcbmFuZ2xpbmcvTVxcbmFuZ2xvcGhpbGUvU1xcbmFuZ2xvcGhvbmUvU1xcbmFuZ29yYS9NU1xcbmFuZ29zdHVyYVxcbmFuZ3JpbHlcXG5hbmdyeS9UUlxcbmFuZ3N0L01cXG5hbmdzdHJvbS9NU1xcbmFuZ3Vpc2gvR01EU1xcbmFuZ3VsYXJcXG5hbmd1bGFyaXR5L1NNXFxuYW5ndWxhdGlvblxcbmFuaHlkcm91c1xcbmFuaWxpbmUvTVxcbmFuaWxpbmd1c1xcbmFuaW1hZHZlcnNpb24vTVNcXG5hbmltYWR2ZXJ0L0dTRFxcbmFuaW1hbC9NU1xcbmFuaW1hbGN1bGUvU01cXG5hbmltYXRlL0FEU0dOXFxuYW5pbWF0ZWQvWVxcbmFuaW1hdGlvbi9BTVxcbmFuaW1hdGlvbnNcXG5hbmltYXRvci9NU1xcbmFuaW1lL01cXG5hbmltaXNtL01cXG5hbmltaXN0L1NNXFxuYW5pbWlzdGljXFxuYW5pbW9zaXR5L1NNXFxuYW5pbXVzL01cXG5hbmlvbi9NU1xcbmFuaW9uaWNcXG5hbmlzZS9NXFxuYW5pc2VlZC9NXFxuYW5pc2V0dGUvTVxcbmFua2gvTVxcbmFua2hzXFxuYW5rbGUvTVNcXG5hbmtsZWJvbmUvTVNcXG5hbmtsZXQvTVNcXG5hbm5hbGlzdC9TTVxcbmFubmFscy9NXFxuYW5uZWFsL0dEU1xcbmFubmVsaWQvTVNcXG5hbm5leC9HTURTXFxuYW5uZXhhdGlvbi9NU1xcbmFubmloaWxhdGUvRFNHTlxcbmFubmloaWxhdGlvbi9NXFxuYW5uaWhpbGF0b3IvU01cXG5hbm5pdmVyc2FyeS9TTVxcbmFubm90YXRlL0RTWEdOVlxcbmFubm90YXRpb24vTVxcbmFubm90YXRvci9NU1xcbmFubm91bmNlL0RSU0xaR1xcbmFubm91bmNlZC9VXFxuYW5ub3VuY2VtZW50L01TXFxuYW5ub3VuY2VyL01cXG5hbm5veS9HRFNcXG5hbm5veWFuY2UvTVNcXG5hbm5veWluZy9ZXFxuYW5udWFsL01ZU1xcbmFubnVhbGl6ZWRcXG5hbm51aXRhbnQvU01cXG5hbm51aXR5L1NNXFxuYW5udWwvTFNcXG5hbm51bGFyXFxuYW5udWxsZWRcXG5hbm51bGxpbmdcXG5hbm51bG1lbnQvU01cXG5hbm51bHVzXFxuYW5udW5jaWF0aW9uL1NNXFxuYW5vZGUvTVNcXG5hbm9kaXplL0dEU1xcbmFub2R5bmUvTVNcXG5hbm9pbnQvR0RMU1xcbmFub2ludG1lbnQvTVxcbmFub21hbG91cy9ZXFxuYW5vbWFseS9TTVxcbmFub24vU1xcbmFub255bWl0eS9NXFxuYW5vbnltb3VzL1lcXG5hbm9waGVsZXMvTVxcbmFub3Jhay9NU1xcbmFub3JlY3RpYy9TTVxcbmFub3JleGlhL01cXG5hbm9yZXhpYy9NU1xcbmFub3RoZXJcXG5hbnN3ZXIvQk1ER1NcXG5hbnN3ZXJhYmxlL1VcXG5hbnN3ZXJlZC9VXFxuYW5zd2VycGhvbmUvU1xcbmFudC9TTURcXG5hbnRhY2lkL1NNXFxuYW50YWdvbmlzbS9TTVxcbmFudGFnb25pc3QvU01cXG5hbnRhZ29uaXN0aWNcXG5hbnRhZ29uaXN0aWNhbGx5XFxuYW50YWdvbml6ZS9EU0dcXG5hbnRhcmN0aWNcXG5hbnRlL1NNXFxuYW50ZWF0ZXIvTVNcXG5hbnRlYmVsbHVtXFxuYW50ZWNlZGVuY2UvTVxcbmFudGVjZWRlbnQvU01cXG5hbnRlY2hhbWJlci9TTVxcbmFudGVkYXRlL0dEU1xcbmFudGVkaWx1dmlhblxcbmFudGVpbmdcXG5hbnRlbG9wZS9NU1xcbmFudGVuYXRhbFxcbmFudGVubmEvU01cXG5hbnRlbm5hZVxcbmFudGVyaW9yXFxuYW50ZXJvb20vTVNcXG5hbnRoZW0vTVNcXG5hbnRoZXIvTVNcXG5hbnRoaWxsL1NNXFxuYW50aG9sb2dpc3QvU01cXG5hbnRob2xvZ2l6ZS9EU0dcXG5hbnRob2xvZ3kvU01cXG5hbnRocmFjaXRlL01cXG5hbnRocmF4L01cXG5hbnRocm9wb2NlbnRyaWNcXG5hbnRocm9wb2lkL01TXFxuYW50aHJvcG9sb2dpY2FsL1lcXG5hbnRocm9wb2xvZ2lzdC9TTVxcbmFudGhyb3BvbG9neS9NXFxuYW50aHJvcG9tb3JwaGljXFxuYW50aHJvcG9tb3JwaGljYWxseVxcbmFudGhyb3BvbW9ycGhpc20vTVxcbmFudGhyb3BvbW9ycGhpemVcXG5hbnRocm9wb21vcnBob3VzXFxuYW50aS9TTVxcbmFudGlhYm9ydGlvblxcbmFudGlhYm9ydGlvbmlzdC9NU1xcbmFudGlhaXJjcmFmdFxcbmFudGliYWN0ZXJpYWwvTVNcXG5hbnRpYmlvdGljL01TXFxuYW50aWJvZHkvU01cXG5hbnRpYy9NU1xcbmFudGljYW5jZXJcXG5hbnRpY2lwYXRlL0dOWERTXFxuYW50aWNpcGF0ZWQvVVxcbmFudGljaXBhdGlvbi9NXFxuYW50aWNpcGF0b3J5XFxuYW50aWNrZWRcXG5hbnRpY2tpbmdcXG5hbnRpY2xlcmljYWxcXG5hbnRpY2xpbWFjdGljXFxuYW50aWNsaW1hY3RpY2FsbHlcXG5hbnRpY2xpbWF4L01TXFxuYW50aWNsaW5lL1NNXFxuYW50aWNsb2Nrd2lzZVxcbmFudGljb2FndWxhbnQvTVNcXG5hbnRpY29tbXVuaXNtL01cXG5hbnRpY29tbXVuaXN0L1NNXFxuYW50aWN5Y2xvbmUvU01cXG5hbnRpY3ljbG9uaWNcXG5hbnRpZGVtb2NyYXRpY1xcbmFudGlkZXByZXNzYW50L01TXFxuYW50aWRvdGUvTVNcXG5hbnRpZmFzY2lzdC9NU1xcbmFudGlmZXJyb21hZ25ldGljXFxuYW50aWZyZWV6ZS9NXFxuYW50aWdlbi9TTVxcbmFudGlnZW5pY1xcbmFudGlnZW5pY2l0eS9NXFxuYW50aWhlcm8vTVxcbmFudGloZXJvZXNcXG5hbnRpaGlzdGFtaW5lL1NNXFxuYW50aWtub2NrL01cXG5hbnRpbGFib3JcXG5hbnRpbG9nYXJpdGhtL1NNXFxuYW50aW1hY2Fzc2FyL01TXFxuYW50aW1hbGFyaWFsXFxuYW50aW1hdHRlci9NXFxuYW50aW1pY3JvYmlhbFxcbmFudGltaXNzaWxlXFxuYW50aW1vbnkvTVxcbmFudGluZXV0cmluby9TTVxcbmFudGluZXV0cm9uL01TXFxuYW50aW51Y2xlYXJcXG5hbnRpb3hpZGFudC9NU1xcbmFudGlwYXJ0aWNsZS9TTVxcbmFudGlwYXN0aVxcbmFudGlwYXN0by9NU1xcbmFudGlwYXRoZXRpY1xcbmFudGlwYXRoeS9TTVxcbmFudGlwZXJzb25uZWxcXG5hbnRpcGVyc3BpcmFudC9TTVxcbmFudGlwaG9uL1NNXFxuYW50aXBob25hbC9NWVNcXG5hbnRpcG9kYWwvU1xcbmFudGlwb2RlYW4vTVNcXG5hbnRpcG9kZXMvTVxcbmFudGlwb2xsdXRpb25cXG5hbnRpcG92ZXJ0eVxcbmFudGlwcm90b24vTVNcXG5hbnRpcXVhcmlhbi9TTVxcbmFudGlxdWFyaWFuaXNtL01cXG5hbnRpcXVhcnkvU01cXG5hbnRpcXVhdGUvR0RTXFxuYW50aXF1ZS9EU01HXFxuYW50aXF1aXR5L1NNXFxuYW50aXJyaGludW0vU1xcbmFudGlzY2llbmNlXFxuYW50aXNlbWl0aWNcXG5hbnRpc2VtaXRpc20vTVxcbmFudGlzZXBzaXMvTVxcbmFudGlzZXB0aWMvU01cXG5hbnRpc2VwdGljYWxseVxcbmFudGlzZXJ1bS9NU1xcbmFudGlzbGF2ZXJ5XFxuYW50aXNvY2lhbC9ZXFxuYW50aXNwYXNtb2RpYy9NU1xcbmFudGlzdWJtYXJpbmVcXG5hbnRpdGFua1xcbmFudGl0aGVzZXNcXG5hbnRpdGhlc2lzL01cXG5hbnRpdGhldGljXFxuYW50aXRoZXRpY2FsL1lcXG5hbnRpdG94aW4vTVNcXG5hbnRpdHJ1c3RcXG5hbnRpdmVuaW4vTVNcXG5hbnRpdmVub21cXG5hbnRpdmlyYWwvTVNcXG5hbnRpdmlydXNcXG5hbnRpdml2aXNlY3Rpb25pc3QvTVNcXG5hbnRpd2FyXFxuYW50bGVyL01EU1xcbmFudG9ueW0vU01cXG5hbnRvbnltb3VzXFxuYW50cnVtXFxuYW50c3kvVFJcXG5hbnVzL01TXFxuYW52aWwvTVNcXG5hbnhpZXR5L1NNXFxuYW54aW91cy9ZUFxcbmFueGlvdXNuZXNzL01cXG5hbnlcXG5hbnlib2R5L1NNXFxuYW55aG93XFxuYW55bW9yZVxcbmFueW9uZS9NXFxuYW55cGxhY2VcXG5hbnl0aGluZy9TTVxcbmFueXRpbWVcXG5hbnl3YXkvU1xcbmFueXdoZXJlXFxuYW55d2lzZVxcbmFvcnRhL01TXFxuYW9ydGljXFxuYXBhY2VcXG5hcGFydFxcbmFwYXJ0aGVpZC9NXFxuYXBhcnRtZW50L01TXFxuYXBhdGhldGljXFxuYXBhdGhldGljYWxseVxcbmFwYXRoeS9NXFxuYXBhdGl0ZS9NXFxuYXBlL0RTTUdcXG5hcGVsaWtlXFxuYXBlcml0aWYvTVNcXG5hcGVydHVyZS9TTVxcbmFwZXgvTVNcXG5hcGhhc2lhL01cXG5hcGhhc2ljL01TXFxuYXBoZWxpYVxcbmFwaGVsaW9uL1NNXFxuYXBoaWQvTVNcXG5hcGhvcmlzbS9NU1xcbmFwaG9yaXN0aWNcXG5hcGhvcmlzdGljYWxseVxcbmFwaHJvZGlzaWFjL1NNXFxuYXBpYXJpc3QvU01cXG5hcGlhcnkvU01cXG5hcGljYWwvWVxcbmFwaWVjZVxcbmFwaXNoL1lcXG5hcGxlbnR5XFxuYXBsb21iL01cXG5hcG9jYWx5cHNlL1NNXFxuYXBvY2FseXB0aWNcXG5hcG9jcnlwaGEvTVxcbmFwb2NyeXBoYWwvWVxcbmFwb2dlZS9NU1xcbmFwb2xpdGljYWwvWVxcbmFwb2xvZ2V0aWMvVVxcbmFwb2xvZ2V0aWNhbGx5XFxuYXBvbG9naWEvU01cXG5hcG9sb2dpc3QvTVNcXG5hcG9sb2dpemUvR0RTXFxuYXBvbG9neS9TTVxcbmFwb3BsZWN0aWNcXG5hcG9wbGV4eS9TTVxcbmFwb3B0b3Npc1xcbmFwb3B0b3RpY1xcbmFwb3N0YXN5L1NNXFxuYXBvc3RhdGUvU01cXG5hcG9zdGF0aXplL0dEU1xcbmFwb3N0bGUvTVNcXG5hcG9zdGxlc2hpcC9NXFxuYXBvc3RvbGljXFxuYXBvc3Ryb3BoZS9NU1xcbmFwb3RoZWNhcnkvU01cXG5hcG90aGVnbS9TTVxcbmFwb3RoZW9zZXNcXG5hcG90aGVvc2lzL01cXG5hcHAvU01cXG5hcHBhbGwvR0RTXFxuYXBwYWxsaW5nL1lcXG5hcHBhbG9vc2EvTVNcXG5hcHBhcmF0Y2hpay9TXFxuYXBwYXJhdHVzL01TXFxuYXBwYXJlbC9NREdTXFxuYXBwYXJlbnQvWVxcbmFwcGFyaXRpb24vU01cXG5hcHBlYWwvR01EU1xcbmFwcGVhbGluZy9VWVxcbmFwcGVhci9BRVNER1xcbmFwcGVhcmFuY2UvRUFNU1xcbmFwcGVhc2UvTFpHRFJTXFxuYXBwZWFzZW1lbnQvU01cXG5hcHBlYXNlci9NXFxuYXBwZWxsYW50L1NNXFxuYXBwZWxsYXRlL1hOXFxuYXBwZWxsYXRpb24vTVxcbmFwcGVuZC9HRFNcXG5hcHBlbmRhZ2UvU01cXG5hcHBlbmRlY3RvbXkvU01cXG5hcHBlbmRpY2VzXFxuYXBwZW5kaWNpdGlzL01cXG5hcHBlbmRpeC9NU1xcbmFwcGVydGFpbi9HRFNcXG5hcHBldGl0ZS9TTVxcbmFwcGV0aXplci9NU1xcbmFwcGV0aXppbmcvWVxcbmFwcGxhdWQvWkdEUlNcXG5hcHBsYXVkZXIvTVxcbmFwcGxhdXNlL01cXG5hcHBsZS9NU1xcbmFwcGxlamFjay9NXFxuYXBwbGVzYXVjZS9NXFxuYXBwbGV0L01TXFxuYXBwbGlhbmNlL1NNXFxuYXBwbGljYWJpbGl0eS9NXFxuYXBwbGljYWJsZS9JXFxuYXBwbGljYWJseVxcbmFwcGxpY2FudC9TTVxcbmFwcGxpY2F0aW9uL0FNXFxuYXBwbGljYXRvci9TTVxcbmFwcGxpZXIvTVNcXG5hcHBsaXF1ZS9EU01cXG5hcHBsaXF1ZWluZ1xcbmFwcGx5L0FOWEdEU1xcbmFwcG9pbnQvQUVMU1ZHRFxcbmFwcG9pbnRlZS9TTVxcbmFwcG9pbnRtZW50J3MvQVxcbmFwcG9pbnRtZW50L0VTTVxcbmFwcG9ydGlvbi9BR0RMU1xcbmFwcG9ydGlvbm1lbnQvQU1cXG5hcHBvc2UvR0RTXFxuYXBwb3NpdGUvWU5WUFxcbmFwcG9zaXRlbmVzcy9NXFxuYXBwb3NpdGlvbi9NXFxuYXBwb3NpdGl2ZS9TTVxcbmFwcHJhaXNhbC9BTVNcXG5hcHByYWlzZS9BRFNHXFxuYXBwcmFpc2VyL01TXFxuYXBwcmVjaWFibGUvSVxcbmFwcHJlY2lhYmx5L0lcXG5hcHByZWNpYXRlL0RTWEdOVlxcbmFwcHJlY2lhdGVkL1VcXG5hcHByZWNpYXRpb24vTVxcbmFwcHJlY2lhdGl2ZS9ZXFxuYXBwcmVjaWF0b3IvTVNcXG5hcHByZWNpYXRvcnlcXG5hcHByZWhlbmQvR0RTXFxuYXBwcmVoZW5zaW9uL01TXFxuYXBwcmVoZW5zaXZlL1lQXFxuYXBwcmVoZW5zaXZlbmVzcy9NXFxuYXBwcmVudGljZS9EU01HXFxuYXBwcmVudGljZXNoaXAvTVNcXG5hcHByaXNlL0dEU1xcbmFwcHJpemUvR0RTXFxuYXBwcm9hY2gvR0JNRFNcXG5hcHByb2FjaGFibGUvVUlcXG5hcHByb2JhdGlvbi9FTVxcbmFwcHJvYmF0aW9uc1xcbmFwcHJvcHJpYXRlL1BZR05YRFNcXG5hcHByb3ByaWF0ZWQvVVxcbmFwcHJvcHJpYXRlbmVzcy9JTVxcbmFwcHJvcHJpYXRpb24vTVxcbmFwcHJvcHJpYXRvci9TTVxcbmFwcHJvdmFsL0VNXFxuYXBwcm92YWxzXFxuYXBwcm92ZS9FR0RTXFxuYXBwcm92ZWQvVVxcbmFwcHJvdmluZy9FWVxcbmFwcHJveFxcbmFwcHJveGltYXRlL0RTWFlHTlxcbmFwcHJveGltYXRpb24vTVxcbmFwcHVydGVuYW5jZS9TTVxcbmFwcHVydGVuYW50XFxuYXByaWNvdC9NU1xcbmFwcm9uL01TXFxuYXByb3Bvc1xcbmFwc2UvU01cXG5hcHQvSVlQVFxcbmFwdGVyXFxuYXB0aXR1ZGUvU01cXG5hcHRuZXNzL0lNXFxuYXF1YS9TTVxcbmFxdWFjdWx0dXJlL01cXG5hcXVhbHVuZy9NU1xcbmFxdWFtYXJpbmUvU01cXG5hcXVhbmF1dC9NU1xcbmFxdWFwbGFuZS9NR0RTXFxuYXF1YXJpdW0vTVNcXG5hcXVhdGljL1NNXFxuYXF1YXRpY2FsbHlcXG5hcXVhdGljcy9NXFxuYXF1YXRpbnQvU1xcbmFxdWF2aXQvTVxcbmFxdWVkdWN0L01TXFxuYXF1ZW91c1xcbmFxdWlmZXIvU01cXG5hcXVpbGluZVxcbmFyYWJlc3F1ZS9NU1xcbmFyYWJpbGl0eS9NXFxuYXJhY2huaWQvTVNcXG5hcmFjaG5vcGhvYmlhXFxuYXJiaXRlci9TTVxcbmFyYml0cmFnZS9NWkdEUlNcXG5hcmJpdHJhZ2VyL01cXG5hcmJpdHJhZ2V1ci9TTVxcbmFyYml0cmFtZW50L1NNXFxuYXJiaXRyYXJpbHlcXG5hcmJpdHJhcmluZXNzL01cXG5hcmJpdHJhcnkvUFxcbmFyYml0cmF0ZS9HTkRTXFxuYXJiaXRyYXRpb24vTVxcbmFyYml0cmF0b3IvTVNcXG5hcmJvci9NU1xcbmFyYm9yZWFsXFxuYXJib3JldHVtL1NNXFxuYXJib3J2aXRhZS9TTVxcbmFyYnV0dXMvTVNcXG5hcmMvU01ER1xcbmFyY2FkZS9NU1xcbmFyY2FuZVxcbmFyY2gvUFpUR1ZNRFJTWVxcbmFyY2hhZW9sb2dpY2FsL1lcXG5hcmNoYWVvbG9naXN0L1NNXFxuYXJjaGFlb2xvZ3kvTVxcbmFyY2hhaWNcXG5hcmNoYWljYWxseVxcbmFyY2hhaXNtL01TXFxuYXJjaGFpc3QvTVNcXG5hcmNoYW5nZWwvTVNcXG5hcmNoYmlzaG9wL1NNXFxuYXJjaGJpc2hvcHJpYy9TTVxcbmFyY2hkZWFjb24vU01cXG5hcmNoZGlvY2VzYW5cXG5hcmNoZGlvY2VzZS9NU1xcbmFyY2hkdWNoZXNzL01TXFxuYXJjaGR1a2UvTVNcXG5hcmNoZW5lbXkvU01cXG5hcmNoZXIvTVxcbmFyY2hlcnkvTVxcbmFyY2hldHlwYWxcXG5hcmNoZXR5cGUvTVNcXG5hcmNoZmllbmQvTVNcXG5hcmNoaWVwaXNjb3BhbFxcbmFyY2hpcGVsYWdvL01TXFxuYXJjaGl0ZWN0L1NNXFxuYXJjaGl0ZWN0b25pYy9TXFxuYXJjaGl0ZWN0b25pY3MvTVxcbmFyY2hpdGVjdHVyYWwvWVxcbmFyY2hpdGVjdHVyZS9NU1xcbmFyY2hpdHJhdmUvU01cXG5hcmNoaXZhbFxcbmFyY2hpdmUvRFNNR1xcbmFyY2hpdmlzdC9NU1xcbmFyY2huZXNzL01cXG5hcmNod2F5L1NNXFxuYXJjdGljL01TXFxuYXJkZW50L1lcXG5hcmRvci9NU1xcbmFyZHVvdXMvWVBcXG5hcmR1b3VzbmVzcy9NXFxuYXJlL1NNQlxcbmFyZWEvU01cXG5hcmVhbFxcbmFyZW4ndFxcbmFyZW5hL01TXFxuYXJnZW50L01cXG5hcmdpbmluZVxcbmFyZ29uL01cXG5hcmdvc3kvU01cXG5hcmdvdC9NU1xcbmFyZ3VhYmxlL0lVXFxuYXJndWFibHkvVVxcbmFyZ3VlL1pHRFJTXFxuYXJndWVyL01cXG5hcmd1bWVudC9NU1xcbmFyZ3VtZW50YXRpb24vTVxcbmFyZ3VtZW50YXRpdmUvUFlcXG5hcmd1bWVudGF0aXZlbmVzcy9NXFxuYXJneWxlL01TXFxuYXJpYS9TTVxcbmFyaWQvWVxcbmFyaWRpdHkvTVxcbmFyaWdodFxcbmFyaXNlL0dTXFxuYXJpc2VuXFxuYXJpc3RvY3JhY3kvU01cXG5hcmlzdG9jcmF0L1NNXFxuYXJpc3RvY3JhdGljXFxuYXJpc3RvY3JhdGljYWxseVxcbmFyaXRobWV0aWMvTVxcbmFyaXRobWV0aWNhbC9ZXFxuYXJpdGhtZXRpY2lhbi9NU1xcbmFyay9TTVxcbmFybSdzXFxuYXJtL0VBR0RTXFxuYXJtYWRhL01TXFxuYXJtYWRpbGxvL1NNXFxuYXJtYW1lbnQvQUVNXFxuYXJtYW1lbnRzXFxuYXJtYXR1cmUvTVNcXG5hcm1iYW5kL01TXFxuYXJtY2hhaXIvTVNcXG5hcm1lZC9VXFxuYXJtZnVsL01TXFxuYXJtaG9sZS9TTVxcbmFybWlzdGljZS9TTVxcbmFybWxldC9NU1xcbmFybWxvYWQvU1xcbmFybW9yL1pHTURSU1xcbmFybW9yZWQvVVxcbmFybW9yZXIvTVxcbmFybW9yaWFsXFxuYXJtb3J5L1NNXFxuYXJtcGl0L01TXFxuYXJtcmVzdC9TTVxcbmFybXkvU01cXG5hcm9tYS9NU1xcbmFyb21hdGhlcmFwaXN0L01TXFxuYXJvbWF0aGVyYXB5L01cXG5hcm9tYXRpYy9NU1xcbmFyb21hdGljYWxseVxcbmFyb3NlXFxuYXJvdW5kXFxuYXJvdXNhbC9NXFxuYXJvdXNlL0dEU1xcbmFycGVnZ2lvL01TXFxuYXJyXFxuYXJyYWlnbi9ER1NMXFxuYXJyYWlnbm1lbnQvU01cXG5hcnJhbmdlL0FFU0RMR1xcbmFycmFuZ2VtZW50J3MvRVxcbmFycmFuZ2VtZW50L0FTTVxcbmFycmFuZ2VyL1NNXFxuYXJyYW50XFxuYXJyYXMvTVNcXG5hcnJheS9FR01EU1xcbmFycmVhcnMvTVxcbmFycmVzdC9BR01EU1xcbmFycmh5dGhtaWEvTVxcbmFycmh5dGhtaWNcXG5hcnJoeXRobWljYWxcXG5hcnJpdmFsL01TXFxuYXJyaXZlL0dEU1xcbmFycm9nYW5jZS9NXFxuYXJyb2dhbnQvWVxcbmFycm9nYXRlL0dORFNcXG5hcnJvZ2F0aW9uL01cXG5hcnJvdy9NU1xcbmFycm93aGVhZC9NU1xcbmFycm93cm9vdC9NXFxuYXJyb3lvL01TXFxuYXJzZWRcXG5hcnNlbmFsL01TXFxuYXJzZW5pYy9NXFxuYXJzaW5nXFxuYXJzb24vTVxcbmFyc29uaXN0L1NNXFxuYXJ0L1NNXFxuYXJ0ZXJpYWxcXG5hcnRlcmlvbGUvTVNcXG5hcnRlcmlvc2NsZXJvc2lzL01cXG5hcnRlcnkvU01cXG5hcnRmdWwvUFlcXG5hcnRmdWxuZXNzL01cXG5hcnRocml0aWMvTVNcXG5hcnRocml0aXMvTVxcbmFydGhyb3BvZC9NU1xcbmFydGhyb3Njb3BlL1NNXFxuYXJ0aHJvc2NvcGljXFxuYXJ0aHJvc2NvcHlcXG5hcnRpY2hva2UvU01cXG5hcnRpY2xlL01EU1xcbmFydGljdWxhY3kvSVxcbmFydGljdWxhclxcbmFydGljdWxhdGUvWUdOUERTWFxcbmFydGljdWxhdGVuZXNzL0lNXFxuYXJ0aWN1bGF0aW9uL01cXG5hcnRpZmFjdC9TTVxcbmFydGlmaWNlL1JTTVpcXG5hcnRpZmljZXIvTVxcbmFydGlmaWNpYWwvWVxcbmFydGlmaWNpYWxpdHkvTVxcbmFydGlsbGVyeS9NXFxuYXJ0aWxsZXJ5bWFuL01cXG5hcnRpbGxlcnltZW5cXG5hcnRpbmVzcy9NXFxuYXJ0aXNhbi9NU1xcbmFydGlzdC9NU1xcbmFydGlzdGUvTVNcXG5hcnRpc3RpYy9JXFxuYXJ0aXN0aWNhbGx5XFxuYXJ0aXN0cnkvTVxcbmFydGxlc3MvUFlcXG5hcnRsZXNzbmVzcy9NXFxuYXJ0c3kvVFJcXG5hcnR3b3JrL01TXFxuYXJ0eS9QVFJcXG5hcnVndWxhXFxuYXJ1bS9TTVxcbmFzYXBcXG5hc2Jlc3Rvcy9NXFxuYXNjZW5kL0FHRFNcXG5hc2NlbmRhbmNlL01cXG5hc2NlbmRhbmN5L01cXG5hc2NlbmRhbnQvU01cXG5hc2NlbnNpb24vTVNcXG5hc2NlbnQvTVNcXG5hc2NlcnRhaW4vR0RTQkxcXG5hc2NlcnRhaW5tZW50L01cXG5hc2NldGljL01TXFxuYXNjZXRpY2FsbHlcXG5hc2NldGljaXNtL01cXG5hc2NvdC9NU1xcbmFzY3JpYmUvR0JEU1xcbmFzY3JpcHRpb24vTVxcbmFzZXB0aWNcXG5hc2VwdGljYWxseVxcbmFzZXh1YWwvWVxcbmFzZXh1YWxpdHkvTVxcbmFzaC9NRE5TR1xcbmFzaGFtZWQvVVlcXG5hc2hjYW4vTVNcXG5hc2hsYXIvTVNcXG5hc2hvcmVcXG5hc2hyYW0vTVNcXG5hc2h0cmF5L1NNXFxuYXNoeS9UUlxcbmFzaWRlL01TXFxuYXNpbmluZS9ZXFxuYXNpbmluaXR5L1NNXFxuYXNrL1NER1xcbmFza2FuY2VcXG5hc2tlZC9VXFxuYXNrZXdcXG5hc2xhbnRcXG5hc2xlZXBcXG5hc29jaWFsXFxuYXNwL1NNTlhcXG5hc3BhcmFndXMvTVxcbmFzcGFydGFtZS9NXFxuYXNwZWN0L01TXFxuYXNwZW4vTVxcbmFzcGVyaXR5L1NNXFxuYXNwZXJzaW9uL01TXFxuYXNwaGFsdC9NREdTXFxuYXNwaG9kZWwvU01cXG5hc3BoeXhpYS9NXFxuYXNwaHl4aWF0ZS9EU1hHTlxcbmFzcGh5eGlhdGlvbi9NXFxuYXNwaWMvTVNcXG5hc3BpZGlzdHJhL01TXFxuYXNwaXJhbnQvTVNcXG5hc3BpcmF0ZS9NR05EU1hcXG5hc3BpcmF0aW9uL01cXG5hc3BpcmF0b3IvU01cXG5hc3BpcmUvR0RTXFxuYXNwaXJpbi9NU1xcbmFzcy9NU1xcbmFzc2FpbC9HQkRTXFxuYXNzYWlsYWJsZS9VXFxuYXNzYWlsYW50L1NNXFxuYXNzYXNzaW4vU01cXG5hc3Nhc3NpbmF0ZS9HTlhEU1xcbmFzc2Fzc2luYXRpb24vTVxcbmFzc2F1bHQvTURSR1NcXG5hc3NheS9aR01EUlNcXG5hc3NheWVyL01cXG5hc3NlbWJsYWdlL1NNXFxuYXNzZW1ibGUvQUVHU0RcXG5hc3NlbWJsZXIvTVNcXG5hc3NlbWJsaWVzXFxuYXNzZW1ibHkvQU1cXG5hc3NlbWJseW1hbi9NXFxuYXNzZW1ibHltZW5cXG5hc3NlbWJseXdvbWFuL01cXG5hc3NlbWJseXdvbWVuXFxuYXNzZW50L0dNRFNcXG5hc3NlcnQvQUdWRFNcXG5hc3NlcnRpb24vQU1cXG5hc3NlcnRpb25zXFxuYXNzZXJ0aXZlL1lQXFxuYXNzZXJ0aXZlbmVzcy9NXFxuYXNzZXNzL0FMR0RTXFxuYXNzZXNzbWVudC9BU01cXG5hc3Nlc3Nvci9NU1xcbmFzc2V0L01TXFxuYXNzZXZlcmF0ZS9EU0dOXFxuYXNzZXZlcmF0aW9uL01cXG5hc3Nob2xlL01TIVxcbmFzc2lkdWl0eS9NXFxuYXNzaWR1b3VzL1BZXFxuYXNzaWR1b3VzbmVzcy9NXFxuYXNzaWduJ3NcXG5hc3NpZ24vQUxHRFNcXG5hc3NpZ25hYmxlXFxuYXNzaWduYXRpb24vTVNcXG5hc3NpZ25lZC9VXFxuYXNzaWduZWUvTVxcbmFzc2lnbmVyL01TXFxuYXNzaWdubWVudC9BTVNcXG5hc3NpZ25vci9NU1xcbmFzc2ltaWxhdGUvRFNHTlxcbmFzc2ltaWxhdGVkL1VcXG5hc3NpbWlsYXRpb24vTVxcbmFzc2lzdC9HVk1EU1xcbmFzc2lzdGFuY2UvTVxcbmFzc2lzdGFudC9TTVxcbmFzc2lzdGVkL1VcXG5hc3NpemUvTVNcXG5hc3NuXFxuYXNzb2NcXG5hc3NvY2lhdGUnc1xcbmFzc29jaWF0ZS9FRFNHTlZcXG5hc3NvY2lhdGlvbi9FTVxcbmFzc29jaWF0aW9uc1xcbmFzc29jaWF0aXZpdHlcXG5hc3NvbmFuY2UvTVxcbmFzc29uYW50L01TXFxuYXNzb3J0L0dMRFNcXG5hc3NvcnRhdGl2ZVxcbmFzc29ydG1lbnQvTVNcXG5hc3N0XFxuYXNzdWFnZS9HRFNcXG5hc3N1bWUvQkdEU1xcbmFzc3VtcHRpb24vU01cXG5hc3N1bXB0aXZlXFxuYXNzdXJhbmNlL0FTTVxcbmFzc3VyZS9BR0RTXFxuYXNzdXJlZC9NWVNcXG5hc3RhdGluZS9NXFxuYXN0ZXIvRU1TXFxuYXN0ZXJpc2svR01EU1xcbmFzdGVyblxcbmFzdGVyb2lkL01TXFxuYXN0aG1hL01cXG5hc3RobWF0aWMvU01cXG5hc3RobWF0aWNhbGx5XFxuYXN0aWdtYXRpY1xcbmFzdGlnbWF0aXNtL1NNXFxuYXN0aXJcXG5hc3RvbmlzaC9EU0xHXFxuYXN0b25pc2hpbmcvWVxcbmFzdG9uaXNobWVudC9NXFxuYXN0b3VuZC9HRFNcXG5hc3RvdW5kaW5nL1lcXG5hc3RyYWRkbGVcXG5hc3RyYWtoYW4vTVxcbmFzdHJhbFxcbmFzdHJheVxcbmFzdHJpZGVcXG5hc3RyaW5nZW5jeS9NXFxuYXN0cmluZ2VudC9TTVlcXG5hc3Ryb2xhYmUvU01cXG5hc3Ryb2xvZ2VyL1NNXFxuYXN0cm9sb2dpY2FsL1lcXG5hc3Ryb2xvZ2lzdC9NU1xcbmFzdHJvbG9neS9NXFxuYXN0cm9uYXV0L01TXFxuYXN0cm9uYXV0aWMvU1xcbmFzdHJvbmF1dGljYWxcXG5hc3Ryb25hdXRpY3MvTVxcbmFzdHJvbm9tZXIvU01cXG5hc3Ryb25vbWljXFxuYXN0cm9ub21pY2FsL1lcXG5hc3Ryb25vbXkvTVxcbmFzdHJvcGh5c2ljYWxcXG5hc3Ryb3BoeXNpY2lzdC9NU1xcbmFzdHJvcGh5c2ljcy9NXFxuYXN0dXRlL1BZVFJcXG5hc3R1dGVuZXNzL01cXG5hc3VuZGVyXFxuYXN5bHVtL1NNXFxuYXN5bW1ldHJpY1xcbmFzeW1tZXRyaWNhbC9ZXFxuYXN5bW1ldHJ5L1NNXFxuYXN5bXB0b21hdGljXFxuYXN5bXB0b3RpY1xcbmFzeW1wdG90aWNhbGx5XFxuYXN5bmNocm9ub3VzL1lcXG5hdFxcbmF0YXZpc20vTVxcbmF0YXZpc3QvU01cXG5hdGF2aXN0aWNcXG5hdGF4aWEvTVxcbmF0YXhpYy9NU1xcbmF0ZVxcbmF0ZWxpZXIvU01cXG5hdGhlaXNtL01cXG5hdGhlaXN0L01TXFxuYXRoZWlzdGljXFxuYXRoZXJvc2NsZXJvc2lzL01cXG5hdGhlcm9zY2xlcm90aWNcXG5hdGhpcnN0XFxuYXRobGV0ZS9NU1xcbmF0aGxldGljL1NcXG5hdGhsZXRpY2FsbHlcXG5hdGhsZXRpY2lzbVxcbmF0aGxldGljcy9NXFxuYXRod2FydFxcbmF0aWx0XFxuYXRpc2hvb1xcbmF0bGFzL01TXFxuYXRtb3NwaGVyZS9NU1xcbmF0bW9zcGhlcmljL1NcXG5hdG1vc3BoZXJpY2FsbHlcXG5hdG1vc3BoZXJpY3MvTVxcbmF0b2xsL01TXFxuYXRvbS9TTVxcbmF0b21pY1xcbmF0b21pY2FsbHlcXG5hdG9taXplL1pHRFJTXFxuYXRvbWl6ZXIvTVxcbmF0b25hbC9ZXFxuYXRvbmFsaXR5L01cXG5hdG9uZS9MR0RTXFxuYXRvbmVtZW50L01cXG5hdG9wXFxuYXRyaWFcXG5hdHJpYWxcXG5hdHJpb3ZlbnRyaWN1bGFyXFxuYXRyaXVtL01cXG5hdHJvY2lvdXMvUFlcXG5hdHJvY2lvdXNuZXNzL01cXG5hdHJvY2l0eS9TTVxcbmF0cm9waHkvRFNNR1xcbmF0cm9waW5lL01cXG5hdHRhY2gvQUxHRFNcXG5hdHRhY2hlL0JNXFxuYXR0YWNoZWQvVVxcbmF0dGFjaG1lbnQvQU1cXG5hdHRhY2htZW50c1xcbmF0dGFjay9aR01EUlNcXG5hdHRhY2tlci9NXFxuYXR0YWluL0FHRFNcXG5hdHRhaW5hYmlsaXR5L01cXG5hdHRhaW5hYmxlL1VcXG5hdHRhaW5kZXIvTVxcbmF0dGFpbm1lbnQvU01cXG5hdHRhci9NXFxuYXR0ZW1wdCdzXFxuYXR0ZW1wdC9BU0RHXFxuYXR0ZW5kL1NEUlpHXFxuYXR0ZW5kYW5jZS9TTVxcbmF0dGVuZGFudC9TTVxcbmF0dGVuZGVkL1VcXG5hdHRlbmRlZS9TTVxcbmF0dGVudGlvbi9JTVxcbmF0dGVudGlvbnNcXG5hdHRlbnRpdmUvSVBZXFxuYXR0ZW50aXZlbmVzcy9JTVxcbmF0dGVudWF0ZS9EU0dOXFxuYXR0ZW51YXRpb24vTVxcbmF0dGVzdC9TREdcXG5hdHRlc3RhdGlvbi9TTVxcbmF0dGVzdGVkL1VcXG5hdHRpYy9TTVxcbmF0dGlyZS9EU01HXFxuYXR0aXR1ZGUvU01cXG5hdHRpdHVkaW5hbFxcbmF0dGl0dWRpbml6ZS9HRFNcXG5hdHRuXFxuYXR0b3JuZXkvTVNcXG5hdHRyYWN0L1NHVkRCXFxuYXR0cmFjdGFudC9NU1xcbmF0dHJhY3Rpb24vTVNcXG5hdHRyYWN0aXZlL1VZXFxuYXR0cmFjdGl2ZW5lc3MvTVxcbmF0dHJpYnV0ZS9EU01HTlZCWFxcbmF0dHJpYnV0ZWQvVVxcbmF0dHJpYnV0aW9uL01cXG5hdHRyaWJ1dGl2ZS9NWVNcXG5hdHRyaXRpb24vTVxcbmF0dHVuZS9EU0dcXG5hdHR5XFxuYXR3aXR0ZXJcXG5hdHlwaWNhbC9ZXFxuYXViZXJnaW5lL1NcXG5hdWJ1cm4vTVxcbmF1Y3Rpb24vTURHU1xcbmF1Y3Rpb25lZXIvU01cXG5hdWRhY2lvdXMvWVBcXG5hdWRhY2lvdXNuZXNzL01cXG5hdWRhY2l0eS9NXFxuYXVkaWJpbGl0eS9JTVxcbmF1ZGlibGUvTVNcXG5hdWRpYmx5L0lcXG5hdWRpZW5jZS9NU1xcbmF1ZGlvL01TXFxuYXVkaW9sb2dpY2FsXFxuYXVkaW9sb2dpc3QvU01cXG5hdWRpb2xvZ3kvTVxcbmF1ZGlvbWV0ZXIvU01cXG5hdWRpb3BoaWxlL1NNXFxuYXVkaW90YXBlL1NNXFxuYXVkaW92aXN1YWwvU1xcbmF1ZGlvdmlzdWFscy9NXFxuYXVkaXQvR01EU1xcbmF1ZGl0aW9uL1NNREdcXG5hdWRpdG9yL01TXFxuYXVkaXRvcml1bS9TTVxcbmF1ZGl0b3J5XFxuYXVnZXIvTVNcXG5hdWdodC9NU1xcbmF1Z21lbnQvRFJaR1NcXG5hdWdtZW50YXRpb24vTVNcXG5hdWdtZW50YXRpdmVcXG5hdWdtZW50ZXIvTVxcbmF1Z3VyL0dNRFNcXG5hdWd1cnkvU01cXG5hdWd1c3QvUFRSWVxcbmF1Z3VzdG5lc3MvTVxcbmF1ay9TTVxcbmF1bnQvU01cXG5hdW50aWUvU01cXG5hdXJhL01TXFxuYXVyYWwvWVxcbmF1cmVvbGUvU01cXG5hdXJldXNcXG5hdXJpY2xlL1NNXFxuYXVyaWN1bGFyXFxuYXVyb3JhL1NNXFxuYXVzY3VsdGF0ZS9HTkRTWFxcbmF1c2N1bHRhdGlvbi9NXFxuYXVzcGljZS9TTVxcbmF1c3BpY2lvdXMvSVlcXG5hdXNwaWNpb3VzbmVzcy9NXFxuYXVzdGVyZS9SWVRcXG5hdXN0ZXJpdHkvU01cXG5hdXN0cmFsXFxuYXV0aGVudGljL0lVXFxuYXV0aGVudGljYWxseVxcbmF1dGhlbnRpY2F0ZS9YR05EU1xcbmF1dGhlbnRpY2F0ZWQvVVxcbmF1dGhlbnRpY2F0aW9uL01cXG5hdXRoZW50aWNpdHkvTVxcbmF1dGhvci9TTURHXFxuYXV0aG9yZXNzL01TXFxuYXV0aG9yaWFsXFxuYXV0aG9yaXRhcmlhbi9NU1xcbmF1dGhvcml0YXJpYW5pc20vTVxcbmF1dGhvcml0YXRpdmUvWVBcXG5hdXRob3JpdGF0aXZlbmVzcy9NXFxuYXV0aG9yaXR5L1NNXFxuYXV0aG9yaXphdGlvbi9NU1xcbmF1dGhvcml6ZS9BR0RTXFxuYXV0aG9yaXplZC9VXFxuYXV0aG9yc2hpcC9NXFxuYXV0aXNtL01cXG5hdXRpc3RpY1xcbmF1dG8vTVNcXG5hdXRvYmFobi9TTVxcbmF1dG9iaW9ncmFwaGVyL1NNXFxuYXV0b2Jpb2dyYXBoaWNcXG5hdXRvYmlvZ3JhcGhpY2FsL1lcXG5hdXRvYmlvZ3JhcGh5L1NNXFxuYXV0b2NsYXZlL01TXFxuYXV0b2NyYWN5L1NNXFxuYXV0b2NyYXQvU01cXG5hdXRvY3JhdGljXFxuYXV0b2NyYXRpY2FsbHlcXG5hdXRvY3Jvc3NcXG5hdXRvZGlkYWN0L1NNXFxuYXV0b2dyYXBoL01ER1xcbmF1dG9ncmFwaHNcXG5hdXRvaW1tdW5lXFxuYXV0b2ltbXVuaXR5L01cXG5hdXRvbWFrZXIvU01cXG5hdXRvbWF0ZS9HTkRTXFxuYXV0b21hdGljL1NNXFxuYXV0b21hdGljYWxseVxcbmF1dG9tYXRpb24vTVxcbmF1dG9tYXRpc20vTVxcbmF1dG9tYXRpemUvR0RTXFxuYXV0b21hdG9uL1NNXFxuYXV0b21vYmlsZS9EU01HXFxuYXV0b21vdGl2ZVxcbmF1dG9ub21pY1xcbmF1dG9ub21vdXMvWVxcbmF1dG9ub215L01cXG5hdXRvcGlsb3QvU01cXG5hdXRvcHN5L0dEU01cXG5hdXRvc3VnZ2VzdGlvblxcbmF1dG93b3JrZXIvTVNcXG5hdXR1bW4vU01cXG5hdXR1bW5hbFxcbmF1eFxcbmF1eGlsaWFyeS9TTVxcbmF1eGluL01cXG5hdi9SWlxcbmF2YWlsL0JHTURTXFxuYXZhaWxhYmlsaXR5L1VNXFxuYXZhaWxhYmxlL1VcXG5hdmFsYW5jaGUvU01cXG5hdmFyaWNlL01cXG5hdmFyaWNpb3VzL1lcXG5hdmFzdFxcbmF2YXRhci9NU1xcbmF2YXVudFxcbmF2ZHBcXG5hdmVcXG5hdmVuZ2UvWkdEUlNcXG5hdmVuZ2VyL01cXG5hdmVudWUvTVNcXG5hdmVyYWdlL01ZR0RTXFxuYXZlcnJlZFxcbmF2ZXJyaW5nXFxuYXZlcnNlL1hOXFxuYXZlcnNpb24vTVxcbmF2ZXJ0L0dEU1xcbmF2Z1xcbmF2aWFuXFxuYXZpYXJ5L1NNXFxuYXZpYXRpb24vTVxcbmF2aWF0b3IvTVNcXG5hdmlhdHJpY2VzXFxuYXZpYXRyaXgvTVNcXG5hdmlkL1lcXG5hdmlkaXR5L01cXG5hdmlvbmljL1NcXG5hdmlvbmljcy9NXFxuYXZpdGFtaW5vc2lzL01cXG5hdm9jYWRvL1NNXFxuYXZvY2F0aW9uL01TXFxuYXZvY2F0aW9uYWxcXG5hdm9pZC9TREdCXFxuYXZvaWRhYmxlL1VcXG5hdm9pZGFibHkvVVxcbmF2b2lkYW5jZS9NXFxuYXZvaWRhbnRcXG5hdm9pcmR1cG9pcy9NXFxuYXZvdWNoL0RTR1xcbmF2b3cvRURHU1xcbmF2b3dhbC9FU01cXG5hdm93ZWQvWVxcbmF2dW5jdWxhci9ZXFxuYXdcXG5hd2FpdC9HRFNcXG5hd2FrZS9HU1xcbmF3YWtlbi9BR0RTXFxuYXdha2VuaW5nL1NNXFxuYXdhcmQvR01EU1xcbmF3YXJkZWUvU1xcbmF3YXJlL1VQXFxuYXdhcmVuZXNzL1VNXFxuYXdhc2hcXG5hd2F5XFxuYXdlL0RTTUdcXG5hd2VpZ2hcXG5hd2Vzb21lL1lQXFxuYXdlc29tZW5lc3MvTVxcbmF3ZXN0cnVja1xcbmF3ZnVsL1lQXFxuYXdmdWxsZXJcXG5hd2Z1bGxlc3RcXG5hd2Z1bG5lc3MvTVxcbmF3aGlsZVxcbmF3a3dhcmQvUllQVFxcbmF3a3dhcmRuZXNzL01cXG5hd2wvU01cXG5hd24vR0pTTVxcbmF3bmluZy9NXFxuYXdva2VcXG5hd29rZW5cXG5hd3J5XFxuYXgvTURTR1xcbmF4aWFsL1lcXG5heGlvbS9TTVxcbmF4aW9tYXRpY1xcbmF4aW9tYXRpY2FsbHlcXG5heGlzL01cXG5heGxlL01TXFxuYXhsZXRyZWUvU01cXG5heG9sb3RsL1NNXFxuYXhvbi9NU1xcbmF5YWgvTVxcbmF5YWhzXFxuYXlhdG9sbGFoL01cXG5heWF0b2xsYWhzXFxuYXllL1NNXFxuYXphbGVhL1NNXFxuYXppbXV0aC9NXFxuYXppbXV0aHNcXG5henVyZS9TTVxcbmIvS0RUXFxuYmFhL1NNREdcXG5iYWJibGUvTVpHRFJTXFxuYmFiYmxlci9NXFxuYmFiZS9TTVxcbmJhYmVsL01TXFxuYmFib29uL01TXFxuYmFidXNoa2EvU01cXG5iYWJ5L1RHRFJTTVxcbmJhYnlob29kL01cXG5iYWJ5aXNoXFxuYmFieXNhdFxcbmJhYnlzaXQvU1xcbmJhYnlzaXR0ZXIvTVNcXG5iYWJ5c2l0dGluZy9NXFxuYmFjY2FsYXVyZWF0ZS9TTVxcbmJhY2NhcmF0L01cXG5iYWNjaGFuYWwvTVNcXG5iYWNjaGFuYWxpYS9NXFxuYmFjY2hhbmFsaWFuL01TXFxuYmFjY3lcXG5iYWNoZWxvci9TTVxcbmJhY2hlbG9yaG9vZC9NXFxuYmFjaWxsYXJ5XFxuYmFjaWxsaVxcbmJhY2lsbHVzL01cXG5iYWNrL1NKWkdNRFJcXG5iYWNrYWNoZS9NU1xcbmJhY2tiZW5jaC9TXFxuYmFja2JpdFxcbmJhY2tiaXRlL1pHUlNcXG5iYWNrYml0ZXIvTVxcbmJhY2tiaXR0ZW5cXG5iYWNrYm9hcmQvU01cXG5iYWNrYm9uZS9NU1xcbmJhY2ticmVha2luZ1xcbmJhY2tjaGF0XFxuYmFja2Nsb3RoXFxuYmFja2Nsb3Roc1xcbmJhY2tjb21iL0RTR1xcbmJhY2tkYXRlL0dEU1xcbmJhY2tkb29yXFxuYmFja2Ryb3AvTVNcXG5iYWNrZXIvTVxcbmJhY2tmaWVsZC9TTVxcbmJhY2tmaXJlL01HRFNcXG5iYWNrZ2FtbW9uL01cXG5iYWNrZ3JvdW5kL01SWlNcXG5iYWNrZ3JvdW5kZXIvTVxcbmJhY2toYW5kL01EUlNaR1xcbmJhY2toYW5kZWQvWVxcbmJhY2toYW5kZXIvTVxcbmJhY2tob2UvTVNcXG5iYWNraW5nL01cXG5iYWNrbGFzaC9NU1xcbmJhY2tsZXNzXFxuYmFja2xvZy9NU1xcbmJhY2tsb2dnZWRcXG5iYWNrbG9nZ2luZ1xcbmJhY2twYWNrL1pHTURSU1xcbmJhY2twYWNrZXIvTVxcbmJhY2twYWNraW5nL01cXG5iYWNrcGVkYWwvU0RHXFxuYmFja3Jlc3QvU01cXG5iYWNrcm9vbS9TXFxuYmFja3NjcmF0Y2hpbmcvTVxcbmJhY2tzZWF0L1NNXFxuYmFja3NpZGUvU01cXG5iYWNrc2xhcHBlci9TTVxcbmJhY2tzbGFwcGluZy9NXFxuYmFja3NsYXNoL01TXFxuYmFja3NsaWRcXG5iYWNrc2xpZGUvUlNaR1xcbmJhY2tzbGlkZXIvTVxcbmJhY2tzcGFjZS9EU01HXFxuYmFja3NwaW4vTVxcbmJhY2tzdGFiYmVyL01TXFxuYmFja3N0YWJiaW5nXFxuYmFja3N0YWdlL01cXG5iYWNrc3RhaXIvU1xcbmJhY2tzdG9wL1NNXFxuYmFja3N0b3BwZWRcXG5iYWNrc3RvcHBpbmdcXG5iYWNrc3RvcnkvU1xcbmJhY2tzdHJlZXQvU1xcbmJhY2tzdHJldGNoL01TXFxuYmFja3N0cm9rZS9NR0RTXFxuYmFja3RhbGsvTVxcbmJhY2t0cmFjay9TREdcXG5iYWNrdXAvTVNcXG5iYWNrd2FyZC9QU1lcXG5iYWNrd2FyZG5lc3MvTVxcbmJhY2t3YXNoL01cXG5iYWNrd2F0ZXIvU01cXG5iYWNrd29vZHMvTVxcbmJhY2t3b29kc21hbi9NXFxuYmFja3dvb2RzbWVuXFxuYmFja3lhcmQvU01cXG5iYWNvbi9NXFxuYmFjdGVyaWEvTVxcbmJhY3RlcmlhbFxcbmJhY3RlcmljaWRhbFxcbmJhY3RlcmljaWRlL1NNXFxuYmFjdGVyaW9sb2dpY1xcbmJhY3RlcmlvbG9naWNhbFxcbmJhY3RlcmlvbG9naXN0L1NNXFxuYmFjdGVyaW9sb2d5L01cXG5iYWN0ZXJpdW0vTVxcbmJhZC9NWVBcXG5iYWRkZXJcXG5iYWRkZXN0XFxuYmFkZGllL01TXFxuYmFkZVxcbmJhZGdlL01aUlNcXG5iYWRnZXIvR01EXFxuYmFkaW5hZ2UvTVxcbmJhZGxhbmRzL01cXG5iYWRtYW4vTVxcbmJhZG1lblxcbmJhZG1pbnRvbi9NXFxuYmFkbW91dGgvR0RcXG5iYWRtb3V0aHNcXG5iYWRuZXNzL01cXG5iYWZmbGUvTVpHRFJTTFxcbmJhZmZsZW1lbnQvTVxcbmJhZmZsZXIvTVxcbmJhZy9TTVxcbmJhZ2F0ZWxsZS9TTVxcbmJhZ2VsL01TXFxuYmFnZnVsL01TXFxuYmFnZ2FnZS9NXFxuYmFnZ2VkXFxuYmFnZ2llL01cXG5iYWdnaWx5XFxuYmFnZ2luZXNzL01cXG5iYWdnaW5nXFxuYmFnZ3kvUFRSU1xcbmJhZ3BpcGUvTVpSU1xcbmJhZ3BpcGVyL01cXG5iYWd1ZXR0ZS9NU1xcbmJhaFxcbmJhaHQvU01cXG5iYWlsL1NCR01EXFxuYmFpbGV5L1NcXG5iYWlsaWZmL1NcXG5iYWlsaXdpY2svTVNcXG5iYWlsb3V0L1NNXFxuYmFpbHNtYW4vTVxcbmJhaWxzbWVuXFxuYmFpcm4vTVNcXG5iYWl0L1NHTURcXG5iYWl6ZS9NXFxuYmFrZS9EUlNNWkdcXG5iYWtlZC9VXFxuYmFrZXIvTVxcbmJha2VyeS9TTVxcbmJha2VzaG9wL01TXFxuYmFrbGF2YS9NXFxuYmFrc2hlZXNoL01cXG5iYWxhY2xhdmEvTVNcXG5iYWxhbGFpa2EvTVNcXG5iYWxhbmNlJ3NcXG5iYWxhbmNlL1VEU0dcXG5iYWxib2EvU01cXG5iYWxjb255L1NNXFxuYmFsZC9TVEdQRFJZXFxuYmFsZGVyZGFzaC9NXFxuYmFsZGZhY2VkXFxuYmFsZG5lc3MvTVxcbmJhbGRyaWMvU01cXG5iYWxkeS9TXFxuYmFsZS9EUlNNWkdcXG5iYWxlZW4vTVxcbmJhbGVmdWwvUFlcXG5iYWxlZnVsbmVzcy9NXFxuYmFsZXIvTVxcbmJhbGsvU0dNRFxcbmJhbGt5L1JUXFxuYmFsbC9TR01EXFxuYmFsbGFkL1NNXFxuYmFsbGFkZWVyL01TXFxuYmFsbGFkcnkvTVxcbmJhbGxhc3QvR1NNRFxcbmJhbGxjb2NrL01TXFxuYmFsbGVyaW5hL1NNXFxuYmFsbGV0L1NNXFxuYmFsbGV0aWNcXG5iYWxsZ2FtZS9NU1xcbmJhbGxnaXJsL1NcXG5iYWxsZ293bi9TXFxuYmFsbGlzdGljL1NcXG5iYWxsaXN0aWNzL01cXG5iYWxsb29uL1NHTURcXG5iYWxsb29uaXN0L01TXFxuYmFsbG90L1NNREdcXG5iYWxscGFyay9NU1xcbmJhbGxwbGF5ZXIvTVNcXG5iYWxscG9pbnQvTVNcXG5iYWxscm9vbS9NU1xcbmJhbGxzL0RTR1xcbmJhbGxzeS9SVFxcbmJhbGx5XFxuYmFsbHlob28vU01ER1xcbmJhbG0vU01cXG5iYWxtaW5lc3MvTVxcbmJhbG15L1JUUFxcbmJhbG9uZXkvTVxcbmJhbHNhL01TXFxuYmFsc2FtL1NNXFxuYmFsc2FtaWNcXG5iYWx1c3Rlci9TTVxcbmJhbHVzdHJhZGUvTVNcXG5iYW1ib28vU01cXG5iYW1ib296bGUvRFNHXFxuYmFuL1NNXFxuYmFuYWwvWVxcbmJhbmFsaXR5L1NNXFxuYmFuYW5hL1NNXFxuYmFuZCdzXFxuYmFuZC9FU0dEXFxuYmFuZGFnZS9EU01HXFxuYmFuZGFubmEvTVNcXG5iYW5kYm94L01TXFxuYmFuZGVhdS9NXFxuYmFuZGVhdXhcXG5iYW5kaXQvU01cXG5iYW5kaXRyeS9NXFxuYmFuZGxlYWRlci9TXFxuYmFuZG1hc3Rlci9TTVxcbmJhbmRvbGVlci9TTVxcbmJhbmRzbWFuL01cXG5iYW5kc21lblxcbmJhbmRzdGFuZC9TTVxcbmJhbmR3YWdvbi9TTVxcbmJhbmR3aWR0aFxcbmJhbmR3aWR0aHNcXG5iYW5keS9EUlNUR1xcbmJhbmUvU01cXG5iYW5lZnVsXFxuYmFuZy9TR01EUlxcbmJhbmdsZS9TTVxcbmJhbmlcXG5iYW5pc2gvR0xEU1xcbmJhbmlzaG1lbnQvTVxcbmJhbmlzdGVyL1NNXFxuYmFuam8vTVNcXG5iYW5qb2lzdC9TTVxcbmJhbmsvU1pHQk1EUlxcbmJhbmtib29rL1NNXFxuYmFua2NhcmQvU01cXG5iYW5rZXIvTVxcbmJhbmtpbmcvTVxcbmJhbmtub3RlL1NNXFxuYmFua3JvbGwvU0dNRFxcbmJhbmtydXB0L1NHTURcXG5iYW5rcnVwdGN5L1NNXFxuYmFubmVkXFxuYmFubmVyL1NNXFxuYmFubmluZ1xcbmJhbm5vY2svTVNcXG5iYW5ucy9NXFxuYmFucXVldC9aR01EUlNcXG5iYW5xdWV0ZXIvTVxcbmJhbnF1ZXR0ZS9TTVxcbmJhbnNoZWUvTVNcXG5iYW50YW0vU01cXG5iYW50YW13ZWlnaHQvU01cXG5iYW50ZXIvR1NNRFxcbmJhbnRlcmluZy9ZXFxuYmFueWFuL1NNXFxuYmFuemFpL1NNXFxuYmFvYmFiL1NNXFxuYmFwL1NcXG5iYXB0aXNtL01TXFxuYmFwdGlzbWFsXFxuYmFwdGlzdC9TXFxuYmFwdGlzdGVyeS9TTVxcbmJhcHRpemUvWkdEUlNcXG5iYXB0aXplZC9VXFxuYmFwdGl6ZXIvTVxcbmJhcidzXFxuYmFyL0VDVVRTXFxuYmFyYi9TWkdNRFJcXG5iYXJiYWNvYVxcbmJhcmJhcmlhbi9TTVxcbmJhcmJhcmlhbmlzbS9NU1xcbmJhcmJhcmljXFxuYmFyYmFyaWNhbGx5XFxuYmFyYmFyaXNtL1NNXFxuYmFyYmFyaXR5L1NNXFxuYmFyYmFyaXplL0RTR1xcbmJhcmJhcm91cy9ZXFxuYmFyYmVjdWUvRFNNR1xcbmJhcmJlbC9TTVxcbmJhcmJlbGwvTVNcXG5iYXJiZXIvR01EXFxuYmFyYmVycnkvU01cXG5iYXJiZXJzaG9wL01TXFxuYmFyYmllL1NcXG5iYXJiaXR1cmF0ZS9TTVxcbmJhcmJ3aXJlL01cXG5iYXJjYXJvbGUvU01cXG5iYXJkL1NNXFxuYmFyZGljXFxuYmFyZS9EUlNQWUdcXG5iYXJlYmFjay9EXFxuYmFyZWZhY2VkL1lcXG5iYXJlZm9vdC9EXFxuYmFyZWhhbmRlZFxcbmJhcmVoZWFkZWRcXG5iYXJlbGVnZ2VkXFxuYmFyZW5lc3MvTVxcbmJhcmYvU0dNRFlcXG5iYXJmbHkvU01cXG5iYXJnYWluL01EUlpHU1xcbmJhcmdhaW5lci9NXFxuYmFyZ2UvTUdEU1xcbmJhcmdlbWFuL01cXG5iYXJnZW1lblxcbmJhcmhvcC9TXFxuYmFyaG9wcGVkXFxuYmFyaG9wcGluZ1xcbmJhcmlzdGEvTVNcXG5iYXJpdG9uZS9NU1xcbmJhcml1bS9NXFxuYmFyaydzXFxuYmFyay9DU0dEXFxuYmFya2VlcC9aTVJTXFxuYmFya2VlcGVyL01cXG5iYXJrZXIvU01cXG5iYXJsZXkvTVxcbmJhcm1haWQvTVNcXG5iYXJtYW4vTVxcbmJhcm1lblxcbmJhcm15L1JUXFxuYmFybi9TTVxcbmJhcm5hY2xlL01EU1xcbmJhcm5leS9TXFxuYmFybnN0b3JtL1NEUlpHXFxuYmFybnN0b3JtZXIvTVxcbmJhcm55YXJkL1NNXFxuYmFyb21ldGVyL01TXFxuYmFyb21ldHJpY1xcbmJhcm9tZXRyaWNhbGx5XFxuYmFyb24vTVNcXG5iYXJvbmFnZS9NU1xcbmJhcm9uZXNzL01TXFxuYmFyb25ldC9NU1xcbmJhcm9uZXRjeS9TTVxcbmJhcm9uaWFsXFxuYmFyb255L1NNXFxuYmFyb3F1ZS9NXFxuYmFycmFjay9NREdTXFxuYmFycmFjdWRhL1NNXFxuYmFycmFnZS9NR0RTXFxuYmFycmUvTUdKRFNcXG5iYXJyZWQvVUVDXFxuYmFycmVsL0dTTURcXG5iYXJyZW4vVFBTTVJcXG5iYXJyZW5uZXNzL01cXG5iYXJyZXR0ZS9TTVxcbmJhcnJpY2FkZS9NR0RTXFxuYmFycmllci9NU1xcbmJhcnJpbmcvRUNVXFxuYmFycmlvL1NNXFxuYmFycmlzdGVyL01TXFxuYmFycm9vbS9NU1xcbmJhcnJvdy9TTVxcbmJhcnRlbmRlci9TTVxcbmJhcnRlci9aR1NNRFJcXG5iYXJ0ZXJlci9NXFxuYmFyeW9uL1NNXFxuYmFzYWwvWVxcbmJhc2FsdC9NXFxuYmFzYWx0aWNcXG5iYXNlJ3NcXG5iYXNlL0NEU0xUR1xcbmJhc2ViYWxsL1NNXFxuYmFzZWJvYXJkL01TXFxuYmFzZWxlc3NcXG5iYXNlbGluZS9NU1xcbmJhc2VseVxcbmJhc2VtYW4vTVxcbmJhc2VtZW5cXG5iYXNlbWVudC9DTVNcXG5iYXNlbmVzcy9NXFxuYmFzZXJcXG5iYXNoL0dNRFNcXG5iYXNoZnVsL1BZXFxuYmFzaGZ1bG5lc3MvTVxcbmJhc2hpbmcvTVxcbmJhc2ljL01TXFxuYmFzaWNhbGx5XFxuYmFzaWwvTVxcbmJhc2lsaWNhL01TXFxuYmFzaWxpc2svTVNcXG5iYXNpbi9NU1xcbmJhc2luZnVsL01TXFxuYmFzaXMvTVxcbmJhc2svU0dEXFxuYmFza2V0L1NNXFxuYmFza2V0YmFsbC9NU1xcbmJhc2tldHJ5L01cXG5iYXNrZXR3b3JrL01cXG5iYXNxdWUvU1xcbmJhc3MvTVNcXG5iYXNzZXQvU01cXG5iYXNzaW5ldC9NU1xcbmJhc3Npc3QvTVNcXG5iYXNzby9NU1xcbmJhc3Nvb24vTVNcXG5iYXNzb29uaXN0L1NNXFxuYmFzc3dvb2QvTVNcXG5iYXN0L01cXG5iYXN0YXJkL01TXFxuYmFzdGFyZGl6YXRpb24vTVNcXG5iYXN0YXJkaXplL0dEU1xcbmJhc3RhcmR5L01cXG5iYXN0ZS9aR05YRFJTXFxuYmFzdGVyL01cXG5iYXN0aW9uL01cXG5iYXQvU01cXG5iYXRjaC9NRFNHXFxuYmF0ZS9LQUNHU0RcXG5iYXRoL1pHTURSU1xcbmJhdGhlL01cXG5iYXRoZXIvTVxcbmJhdGhldGljXFxuYmF0aGhvdXNlL01TXFxuYmF0aGluZy9NXFxuYmF0aG1hdC9NU1xcbmJhdGhvcy9NXFxuYmF0aHJvYmUvU01cXG5iYXRocm9vbS9TTVxcbmJhdGhzXFxuYmF0aHR1Yi9NU1xcbmJhdGh3YXRlclxcbmJhdGh5c2NhcGhlL1NNXFxuYmF0aHlzcGhlcmUvTVNcXG5iYXRpay9NU1xcbmJhdGlzdGUvTVxcbmJhdG1hbi9NXFxuYmF0bWVuXFxuYmF0b24vTVNcXG5iYXRzbWFuL01cXG5iYXRzbWVuXFxuYmF0dGFsaW9uL1NNXFxuYmF0dGVkXFxuYmF0dGVuL0dTTURcXG5iYXR0ZXIvSlpHU01EUlxcbmJhdHRlcmVyL01cXG5iYXR0ZXJ5L1NNXFxuYmF0dGluZy9NXFxuYmF0dGxlL0xEUlNNWkdcXG5iYXR0bGVheGUvTVNcXG5iYXR0bGVkb3JlL1NNXFxuYmF0dGxlZHJlc3NcXG5iYXR0bGVmaWVsZC9NU1xcbmJhdHRsZWZyb250L01TXFxuYmF0dGxlZ3JvdW5kL01TXFxuYmF0dGxlbWVudC9TTVxcbmJhdHRsZXIvTVxcbmJhdHRsZXNoaXAvU01cXG5iYXR0eS9SVFxcbmJhdWJsZS9TTVxcbmJhdWQvU01cXG5iYXV4aXRlL01cXG5iYXdkL1NNXFxuYmF3ZGlseVxcbmJhd2RpbmVzcy9NXFxuYmF3ZHkvUFJUXFxuYmF3bC9TR01EXFxuYmF5L1NNREdcXG5iYXliZXJyeS9TTVxcbmJheW9uZXQvU01ER1xcbmJheW91L01TXFxuYmF6YWFyL1NNXFxuYmF6aWxsaW9uL1NcXG5iYXpvb2thL1NNXFxuYmJsXFxuYmRybVxcbmJlXFxuYmVhY2gvTURTR1xcbmJlYWNoY29tYmVyL1NNXFxuYmVhY2hmcm9udFxcbmJlYWNoaGVhZC9NU1xcbmJlYWNod2Vhci9NXFxuYmVhY29uL1NNXFxuYmVhZC9TR01EXFxuYmVhZGluZy9NXFxuYmVhZGxlL1NNXFxuYmVhZHkvUlRcXG5iZWFnbGUvU01cXG5iZWFrL1NaTURSXFxuYmVha2VyL01cXG5iZWFtL1NHTURcXG5iZWFuL1NHTURcXG5iZWFuYmFnL01TXFxuYmVhbmZlYXN0L1NcXG5iZWFuaWUvU01cXG5iZWFucG9sZS9NU1xcbmJlYW5zcHJvdXQvU1xcbmJlYW5zdGFsay9NU1xcbmJlYXIvU1pHQkpNUlxcbmJlYXJhYmxlL1VcXG5iZWFyYWJseS9VXFxuYmVhcmQvTURHU1xcbmJlYXJkbGVzc1xcbmJlYXJlci9NXFxuYmVhcmluZy9NXFxuYmVhcmlzaC9QWVxcbmJlYXJpc2huZXNzL01cXG5iZWFybGlrZVxcbmJlYXJza2luL01TXFxuYmVhc3QvTVNcXG5iZWFzdGxpbmVzcy9NXFxuYmVhc3RseS9UUFJNXFxuYmVhdC9TWkdCTU5SSlxcbmJlYXRhYmxlL1VcXG5iZWF0ZW4vVVxcbmJlYXRlci9NXFxuYmVhdGlmaWNcXG5iZWF0aWZpY2FsbHlcXG5iZWF0aWZpY2F0aW9uL01cXG5iZWF0aWZ5L0dYTkRTXFxuYmVhdGluZy9NXFxuYmVhdGl0dWRlL1NNXFxuYmVhdG5pay9NU1xcbmJlYXUvU01cXG5iZWF1dC9NU1xcbmJlYXV0ZW91cy9ZXFxuYmVhdXRpY2lhbi9TTVxcbmJlYXV0aWZpY2F0aW9uL01cXG5iZWF1dGlmaWVyL01cXG5iZWF1dGlmdWwvWVxcbmJlYXV0aWZ5L05EUlNaR1xcbmJlYXV0eS9TTVxcbmJlYXZlci9TR01EXFxuYmVib3AvTVNcXG5iZWNhbG0vR1NEXFxuYmVjYW1lXFxuYmVjYXVzZVxcbmJlY2svU01cXG5iZWNrb24vU0dEXFxuYmVjbG91ZC9HRFNcXG5iZWNvbWUvU1xcbmJlY29taW5nL1VZXFxuYmVjcXVlcmVsL1NcXG5iZWQvU01cXG5iZWRhdWIvR1NEXFxuYmVkYXp6bGUvR0RTTFxcbmJlZGF6emxlbWVudC9NXFxuYmVkYnVnL1NNXFxuYmVkY2hhbWJlci9TXFxuYmVkY2xvdGhlcy9NXFxuYmVkZGVkXFxuYmVkZGVyXFxuYmVkZGluZy9NXFxuYmVkZWNrL0dTRFxcbmJlZGV2aWwvTEdEU1xcbmJlZGV2aWxtZW50L01cXG5iZWRmZWxsb3cvU01cXG5iZWRoZWFkL1NcXG5iZWRpbS9TXFxuYmVkaW1tZWRcXG5iZWRpbW1pbmdcXG5iZWRpemVuL0dEU1xcbmJlZGxhbS9TTVxcbmJlZHBhbi9TTVxcbmJlZHBvc3QvU01cXG5iZWRyYWdnbGUvR0RTXFxuYmVkcmlkZGVuXFxuYmVkcm9jay9TTVxcbmJlZHJvbGwvU01cXG5iZWRyb29tL1NNXFxuYmVkc2lkZS9TTVxcbmJlZHNpdC9TXFxuYmVkc2l0dGVyL1NcXG5iZWRzb3JlL1NNXFxuYmVkc3ByZWFkL1NNXFxuYmVkc3RlYWQvU01cXG5iZWR0aW1lL1NNXFxuYmVlL1JTTVpHSlxcbmJlZWJyZWFkL01cXG5iZWVjaC9NU1xcbmJlZWNobnV0L01TXFxuYmVlZi9TR01EXFxuYmVlZmJ1cmdlci9TTVxcbmJlZWZjYWtlL01TXFxuYmVlZmluZXNzL01cXG5iZWVmc3RlYWsvTVNcXG5iZWVmeS9SUFRcXG5iZWVoaXZlL01TXFxuYmVla2VlcGVyL01TXFxuYmVla2VlcGluZy9NXFxuYmVlbGluZS9NU1xcbmJlZW5cXG5iZWVwL1NaR01EUlxcbmJlZXBlci9NXFxuYmVlci9NXFxuYmVlcnkvVFJcXG5iZWVzd2F4L01cXG5iZWV0L1NNXFxuYmVldGxlL01HRFNcXG5iZWV0cm9vdC9TXFxuYmVldmVzXFxuYmVmYWxsL1NHTlxcbmJlZmVsbFxcbmJlZml0L1NcXG5iZWZpdHRlZFxcbmJlZml0dGluZy9ZXFxuYmVmb2cvU1xcbmJlZm9nZ2VkXFxuYmVmb2dnaW5nXFxuYmVmb3JlXFxuYmVmb3JlaGFuZFxcbmJlZm91bC9ER1NcXG5iZWZyaWVuZC9TR0RcXG5iZWZ1ZGRsZS9HTERTXFxuYmVmdWRkbGVtZW50L01cXG5iZWcvU1xcbmJlZ2FuXFxuYmVnYXRcXG5iZWdldC9TXFxuYmVnZXR0ZXIvU1xcbmJlZ2V0dGluZ1xcbmJlZ2dhci9NRFlHU1xcbmJlZ2dhcnkvTVxcbmJlZ2dlZFxcbmJlZ2dpbmdcXG5iZWdpbi9TXFxuYmVnaW5uZXIvU01cXG5iZWdpbm5pbmcvTVNcXG5iZWdvbmVcXG5iZWdvbmlhL1NNXFxuYmVnb3RcXG5iZWdvdHRlblxcbmJlZ3JpbWUvRFNHXFxuYmVncnVkZ2UvRFNHXFxuYmVncnVkZ2luZy9ZXFxuYmVndWlsZS9EUlNaR0xcXG5iZWd1aWxlbWVudC9NXFxuYmVndWlsZXIvTVxcbmJlZ3VpbGluZy9ZXFxuYmVndWluZS9TTVxcbmJlZ3VtL01TXFxuYmVndW5cXG5iZWhhbGYvTVxcbmJlaGFsdmVzXFxuYmVoYXZlL0dEU1xcbmJlaGF2aW9yL1NNXFxuYmVoYXZpb3JhbC9ZXFxuYmVoYXZpb3Jpc20vTVxcbmJlaGF2aW9yaXN0L01TXFxuYmVoZWFkL0RHU1xcbmJlaGVsZFxcbmJlaGVtb3RoL01cXG5iZWhlbW90aHNcXG5iZWhlc3QvTVNcXG5iZWhpbmQvTVNcXG5iZWhpbmRoYW5kXFxuYmVob2xkL05SWkdTXFxuYmVob2xkZXIvTVxcbmJlaG9vdmUvRFNHXFxuYmVpZ2UvTVxcbmJlaW5nL01cXG5iZWpld2VsL1NER1xcbmJlbGFib3IvU0RHXFxuYmVsYXRlZC9ZXFxuYmVsYXkvR0RTXFxuYmVsY2gvR01EU1xcbmJlbGVhZ3Vlci9HU0RcXG5iZWxmcnkvU01cXG5iZWxpZS9EU1xcbmJlbGllZi9FVU1cXG5iZWxpZWZzXFxuYmVsaWV2YWJsZS9VXFxuYmVsaWV2YWJseS9VXFxuYmVsaWV2ZS9FRFJTWkdcXG5iZWxpZXZlci9FVU1TXFxuYmVsaWV2aW5nL1VcXG5iZWxpdHRsZS9MRFNHXFxuYmVsaXR0bGVtZW50L01cXG5iZWxsL1NHTURcXG5iZWxsYWRvbm5hL01cXG5iZWxsYm95L1NNXFxuYmVsbGUvTVNcXG5iZWxsZWQvQVxcbmJlbGxldHJpc3QvTVNcXG5iZWxsZXRyaXN0aWNcXG5iZWxsaG9wL1NNXFxuYmVsbGljb3NlXFxuYmVsbGljb3NpdHkvTVxcbmJlbGxpZ2VyZW5jZS9NXFxuYmVsbGlnZXJlbmN5L01cXG5iZWxsaWdlcmVudC9NWVNcXG5iZWxsaW5nL0FcXG5iZWxsbWFuL01cXG5iZWxsbWVuXFxuYmVsbG93L01ER1NcXG5iZWxsd2V0aGVyL01TXFxuYmVsbHkvR0RTTVxcbmJlbGx5YWNoZS9NR0RTXFxuYmVsbHlidXR0b24vU01cXG5iZWxseWZ1bC9NU1xcbmJlbG9uZy9KREdTXFxuYmVsb25naW5nL01cXG5iZWxvdmVkL1NNXFxuYmVsb3dcXG5iZWx0L1NHTURcXG5iZWx0d2F5L1NNXFxuYmVsdWdhL01TXFxuYmVseWluZ1xcbmJlbWlyZS9HRFNcXG5iZW1vYW4vREdTXFxuYmVtdXNlL0xHRFNcXG5iZW11c2VkL1lcXG5iZW11c2VtZW50L01cXG5iZW5jaC9HTURTXFxuYmVuY2htYXJrL01TXFxuYmVuZC9CU1pHTVJcXG5iZW5kZXIvTVxcbmJlbmR5L1RSXFxuYmVuZWF0aFxcbmJlbmVkaWN0aW5lXFxuYmVuZWRpY3Rpb24vU01cXG5iZW5lZGljdG9yeVxcbmJlbmVmYWN0aW9uL1NNXFxuYmVuZWZhY3Rvci9NU1xcbmJlbmVmYWN0cmVzcy9NU1xcbmJlbmVmaWNlL1NNXFxuYmVuZWZpY2VuY2UvTVxcbmJlbmVmaWNlbnQvWVxcbmJlbmVmaWNpYWwvWVxcbmJlbmVmaWNpYXJ5L1NNXFxuYmVuZWZpdC9TTURHXFxuYmVuZXZvbGVuY2UvU01cXG5iZW5ldm9sZW50L1lcXG5iZW5pZ2h0ZWQvWVxcbmJlbmlnbi9ZXFxuYmVuaWduYW50XFxuYmVuaWduaXR5L01cXG5iZW50L1NNXFxuYmVudG9uaXRlXFxuYmVudHdvb2QvTVxcbmJlbnVtYi9EU0dcXG5iZW56ZW5lL01cXG5iZW56aW5lL01cXG5iZW56eWxcXG5iZXF1ZWF0aC9ER1xcbmJlcXVlYXRoc1xcbmJlcXVlc3QvTVNcXG5iZXJhdGUvR0RTXFxuYmVyZWF2ZS9EU0xHXFxuYmVyZWF2ZW1lbnQvTVNcXG5iZXJlZnRcXG5iZXJldC9NU1xcbmJlcmcvU01cXG5iZXJpYmVyaS9NXFxuYmVyay9TXFxuYmVya2VsaXVtL01cXG5iZXJtL1NNXFxuYmVycnkvR0RTTVxcbmJlcnJ5bGlrZVxcbmJlcnNlcmtcXG5iZXJ0aC9HTURcXG5iZXJ0aHNcXG5iZXJ5bC9NU1xcbmJlcnlsbGl1bS9NXFxuYmVzZWVjaC9aR1JTXFxuYmVzZWVjaGVyL01cXG5iZXNlZWNoaW5nL1lcXG5iZXNlZW0vRFNHXFxuYmVzZXQvU1xcbmJlc2V0dGluZ1xcbmJlc2lkZS9TXFxuYmVzaWVnZS9aR0RSU1xcbmJlc2llZ2VyL01cXG5iZXNtZWFyL0RTR1xcbmJlc21pcmNoL0dEU1xcbmJlc29tL01TXFxuYmVzb3QvU1xcbmJlc290dGVkXFxuYmVzb3R0aW5nXFxuYmVzb3VnaHRcXG5iZXNwYW5nbGUvRFNHXFxuYmVzcGF0dGVyL0dTRFxcbmJlc3BlYWsvU0dcXG5iZXNwZWN0YWNsZWRcXG5iZXNwb2tlXFxuYmVzcG9rZW5cXG5iZXN0L1NHTURcXG5iZXN0aWFsL1lcXG5iZXN0aWFsaXR5L01cXG5iZXN0aWFyeS9TTVxcbmJlc3Rpci9TXFxuYmVzdGlycmVkXFxuYmVzdGlycmluZ1xcbmJlc3Rvdy9ER1NcXG5iZXN0b3dhbC9TTVxcbmJlc3RyZXcvU0RHXFxuYmVzdHJld25cXG5iZXN0cmlkZGVuXFxuYmVzdHJpZGUvU0dcXG5iZXN0cm9kZVxcbmJlc3RzZWxsZXIvTVNcXG5iZXN0c2VsbGluZ1xcbmJldC9TTVxcbmJldGEvU01cXG5iZXRha2UvR1NcXG5iZXRha2VuXFxuYmV0Y2hhXFxuYmV0ZWwvTVxcbmJldGhpbmsvU0dcXG5iZXRob3VnaHRcXG5iZXRpZGUvR0RTXFxuYmV0aW1lc1xcbmJldG9rZW4vR0RTXFxuYmV0b29rXFxuYmV0cmF5L0RSWkdTXFxuYmV0cmF5YWwvU01cXG5iZXRyYXllci9NXFxuYmV0cm90aC9ER1xcbmJldHJvdGhhbC9TTVxcbmJldHJvdGhlZC9NXFxuYmV0cm90aHNcXG5iZXR0ZXIvTURHTFNcXG5iZXR0ZXJtZW50L01cXG5iZXR0aW5nXFxuYmV0dG9yL01TXFxuYmV0d2VlblxcbmJldHdpeHRcXG5iZXZlbC9HTURTXFxuYmV2ZXJhZ2UvU01cXG5iZXZ2eS9TXFxuYmV2eS9TTVxcbmJld2FpbC9ER1NcXG5iZXdhcmUvR0RTXFxuYmV3aGlza2VyZWRcXG5iZXdpZ2dlZFxcbmJld2lsZGVyL0xTR0RcXG5iZXdpbGRlcmluZy9ZXFxuYmV3aWxkZXJtZW50L01cXG5iZXdpdGNoL0dMRFNcXG5iZXdpdGNoaW5nL1lcXG5iZXdpdGNobWVudC9NXFxuYmV5L1NNXFxuYmV5b25kXFxuYmV6ZWwvTVNcXG5iZlxcbmJoYWppXFxuYmkvU01SWlxcbmJpYW5udWFsL1lcXG5iaWFzL0dNRFNcXG5iaWFzZWQvVVxcbmJpYXRobG9uL1NNXFxuYmliL1NNXFxuYmlibGUvTVNcXG5iaWJsaWNhbFxcbmJpYmxpb2dyYXBoZXIvTVNcXG5iaWJsaW9ncmFwaGljXFxuYmlibGlvZ3JhcGhpY2FsL1lcXG5iaWJsaW9ncmFwaHkvU01cXG5iaWJsaW9waGlsZS9TTVxcbmJpYnVsb3VzXFxuYmljYW1lcmFsXFxuYmljYW1lcmFsaXNtL01cXG5iaWNhcmIvTVNcXG5iaWNhcmJvbmF0ZS9NU1xcbmJpY2VudGVuYXJ5L1NNXFxuYmljZW50ZW5uaWFsL1NNXFxuYmljZXAvTVNcXG5iaWNlcHMvTVxcbmJpY2tlci9NRFJaR1NcXG5iaWNrZXJlci9NXFxuYmljb25jYXZlXFxuYmljb252ZXhcXG5iaWN1c3BpZC9NU1xcbmJpY3ljbGUvRFJTTVpHXFxuYmljeWNsZXIvTVxcbmJpY3ljbGlzdC9TTVxcbmJpZC9TTUdcXG5iaWRkYWJsZVxcbmJpZGRlbi9VXFxuYmlkZGVyL01TXFxuYmlkZGluZy9NXFxuYmlkZHkvU01cXG5iaWRlL1NcXG5iaWRldC9NU1xcbmJpZGlyZWN0aW9uYWwvWVxcbmJpZW5uaWFsL01ZU1xcbmJpZW5uaXVtL01TXFxuYmllci9NXFxuYmlmZi9TR0RcXG5iaWZvY2FsL1NcXG5iaWZvY2Fscy9NXFxuYmlmdXJjYXRlL1hEU0dOXFxuYmlmdXJjYXRpb24vTVxcbmJpZy9QXFxuYmlnYW1pc3QvU01cXG5iaWdhbW91c1xcbmJpZ2FteS9NXFxuYmlnZ2VyXFxuYmlnZ2VzdFxcbmJpZ2dpZS9NU1xcbmJpZ2dpc2hcXG5iaWdoZWFkL1NNXFxuYmlnaGVhcnRlZC9QXFxuYmlnaGVhcnRlZG5lc3MvTVxcbmJpZ2hvcm4vU01cXG5iaWdodC9NU1xcbmJpZ21vdXRoL01cXG5iaWdtb3V0aHNcXG5iaWduZXNzL01cXG5iaWdvdC9NRFNcXG5iaWdvdHJ5L1NNXFxuYmlnd2lnL01TXFxuYmlqb3UvTVxcbmJpam91eFxcbmJpa2UvRFJTTVpHXFxuYmlrZXIvTVxcbmJpa2luaS9NU1xcbmJpbGFiaWFsL01TXFxuYmlsYXRlcmFsL1lcXG5iaWxiZXJyeS9TXFxuYmlsZS9NXFxuYmlsZ2UvTVNcXG5iaWxpbmd1YWwvU01ZXFxuYmlsaW5ndWFsaXNtL01cXG5iaWxpb3VzL1BcXG5iaWxpb3VzbmVzcy9NXFxuYmlsaXJ1YmluXFxuYmlsay9TWkdEUlxcbmJpbGtlci9NXFxuYmlsbC9TQkpHTURcXG5iaWxsYm9hcmQvTVNcXG5iaWxsZXQvR01EU1xcbmJpbGxmb2xkL1NNXFxuYmlsbGhvb2svU1xcbmJpbGxpYXJkL1NcXG5iaWxsaWFyZHMvTVxcbmJpbGxpbmcvTVxcbmJpbGxpbmdzZ2F0ZS9NXFxuYmlsbGlvbi9NSFNcXG5iaWxsaW9uYWlyZS9TTVxcbmJpbGxpb250aC9NXFxuYmlsbGlvbnRoc1xcbmJpbGxvdy9HTURTXFxuYmlsbG93eVxcbmJpbGx5L1NNXFxuYmlsbHljYW4vU1xcbmJpbWJvL01TXFxuYmltZXRhbGxpYy9TTVxcbmJpbWV0YWxsaXNtL01cXG5iaW1vZGFsXFxuYmltb250aGx5L1NNXFxuYmluL1NNXFxuYmluYXJ5L1NNXFxuYmluYXVyYWxcXG5iaW5kJ3NcXG5iaW5kL0FVR1NcXG5iaW5kZXIvTVNcXG5iaW5kZXJ5L1NNXFxuYmluZGluZy9NU1xcbmJpbmR3ZWVkL01cXG5iaW5nZS9NRFNcXG5iaW5nby9NXFxuYmlubWFuXFxuYmlubWVuXFxuYmlubmFjbGUvU01cXG5iaW5uZWRcXG5iaW5uaW5nXFxuYmlub2N1bGFyL01TXFxuYmlub21pYWwvU01cXG5iaW8vU01cXG5iaW9jaGVtaWNhbC9TTVlcXG5iaW9jaGVtaXN0L01TXFxuYmlvY2hlbWlzdHJ5L01cXG5iaW9kZWdyYWRhYmlsaXR5L01cXG5iaW9kZWdyYWRlL0RTR0JcXG5iaW9kaXZlcnNpdHkvTVxcbmJpb2V0aGljcy9NXFxuYmlvZmVlZGJhY2svTVxcbmJpb2ZpbG0vTVNcXG5iaW9nXFxuYmlvZ3JhcGhlci9TTVxcbmJpb2dyYXBoaWNcXG5iaW9ncmFwaGljYWwvWVxcbmJpb2dyYXBoeS9TTVxcbmJpb2xcXG5iaW9sb2dpY1xcbmJpb2xvZ2ljYWwvWVxcbmJpb2xvZ2lzdC9NU1xcbmJpb2xvZ3kvTVxcbmJpb21hcmtlci9NU1xcbmJpb21hc3MvTVxcbmJpb21lZGljYWxcXG5iaW9uaWMvU1xcbmJpb25pY2FsbHlcXG5iaW9uaWNzL01cXG5iaW9waHlzaWNhbFxcbmJpb3BoeXNpY2lzdC9NU1xcbmJpb3BoeXNpY3MvTVxcbmJpb3BpYy9NU1xcbmJpb3BzeS9HRFNNXFxuYmlvcmVhY3Rvci9TXFxuYmlvcmh5dGhtL01TXFxuYmlvc2Vuc29yL1NcXG5iaW9zcGhlcmUvU01cXG5iaW9zeW50aGVzaXNcXG5iaW90ZWNoXFxuYmlvdGVjaG5vbG9naWNhbFxcbmJpb3RlY2hub2xvZ3kvTVxcbmJpb3Rpbi9NXFxuYmlwYXJ0aXNhblxcbmJpcGFydGlzYW5zaGlwL01cXG5iaXBhcnRpdGVcXG5iaXBlZC9NU1xcbmJpcGVkYWxcXG5iaXBsYW5lL01TXFxuYmlwb2xhclxcbmJpcG9sYXJpdHkvTVxcbmJpcmFjaWFsXFxuYmlyY2gvR01EU1xcbmJpcmQvU1pHTURSXFxuYmlyZGJhdGgvTVxcbmJpcmRiYXRoc1xcbmJpcmRicmFpbi9TTURcXG5iaXJkY2FnZS9TXFxuYmlyZGVyL01cXG5iaXJkaG91c2UvTVNcXG5iaXJkaWUvTURTXFxuYmlyZGllaW5nXFxuYmlyZGxpa2VcXG5iaXJkbGltZS9NXFxuYmlyZHNlZWQvTVxcbmJpcmRzb25nXFxuYmlyZHdhdGNoZXIvU01cXG5iaXJkeWluZ1xcbmJpcmV0dGEvU01cXG5iaXJ0aC9aR01EUlxcbmJpcnRoZGF5L01TXFxuYmlydGhlci9NXFxuYmlydGhtYXJrL01TXFxuYmlydGhwbGFjZS9NU1xcbmJpcnRocmF0ZS9NU1xcbmJpcnRocmlnaHQvTVNcXG5iaXJ0aHMvQVxcbmJpcnRoc3RvbmUvU01cXG5iaXNjdWl0L1NNXFxuYmlzZWN0L0RHU1xcbmJpc2VjdGlvbi9NU1xcbmJpc2VjdG9yL1NNXFxuYmlzZXh1YWwvTVlTXFxuYmlzZXh1YWxpdHkvTVxcbmJpc2hvcC9NU1xcbmJpc2hvcHJpYy9TTVxcbmJpc211dGgvTVxcbmJpc29uL01cXG5iaXNxdWUvTVxcbmJpc3Ryby9NU1xcbmJpdC9DU01HXFxuYml0Y2gvR01EU1xcbmJpdGNoaWx5XFxuYml0Y2hpbmVzcy9NXFxuYml0Y2h5L1BSVFxcbmJpdGNvaW4vU01cXG5iaXRlL1JTTVpcXG5iaXRlci9NXFxuYml0aW5nL1lcXG5iaXRtYXAvU1xcbmJpdHRlblxcbmJpdHRlci9QTVJZVFNcXG5iaXR0ZXJuL1NNXFxuYml0dGVybmVzcy9NXFxuYml0dGVycy9NXFxuYml0dGVyc3dlZXQvTVNcXG5iaXR0eS9UUlxcbmJpdHVtZW4vTVxcbmJpdHVtaW5vdXNcXG5iaXZhbGVudFxcbmJpdmFsdmUvU01cXG5iaXZvdWFjL01TXFxuYml2b3VhY2tlZFxcbmJpdm91YWNraW5nXFxuYml3ZWVrbHkvU01cXG5iaXllYXJseVxcbmJpei9NXFxuYml6YXJyZS9ZXFxuYmtcXG5ibC9ER1xcbmJsYWIvU01cXG5ibGFiYmVkXFxuYmxhYmJlci9ER1NcXG5ibGFiYmVybW91dGgvTVxcbmJsYWJiZXJtb3V0aHNcXG5ibGFiYmluZ1xcbmJsYWNrL1BYVEdNRE5SWVNcXG5ibGFja2Ftb29yL01TXFxuYmxhY2tiYWxsL1NHTURcXG5ibGFja2JlcnJ5L0dTTVxcbmJsYWNrYmlyZC9TTVxcbmJsYWNrYm9hcmQvTVNcXG5ibGFja2N1cnJhbnQvU1xcbmJsYWNrZW4vREdcXG5ibGFja2ZhY2VcXG5ibGFja2d1YXJkL1NNXFxuYmxhY2toZWFkL01TXFxuYmxhY2tpbmcvTVxcbmJsYWNraXNoXFxuYmxhY2tqYWNrL01ER1NcXG5ibGFja2xlZy9TXFxuYmxhY2tsaXN0L01EU0dcXG5ibGFja21haWwvTURSU1pHXFxuYmxhY2ttYWlsZXIvTVxcbmJsYWNrbmVzcy9NXFxuYmxhY2tvdXQvU01cXG5ibGFja3NtaXRoL01cXG5ibGFja3NtaXRoc1xcbmJsYWNrc25ha2UvU01cXG5ibGFja3Rob3JuL1NNXFxuYmxhY2t0b3AvU01cXG5ibGFja3RvcHBlZFxcbmJsYWNrdG9wcGluZ1xcbmJsYWRkZXIvTVNcXG5ibGFkZS9NRFNcXG5ibGFnL1NcXG5ibGFnZ2VkXFxuYmxhZ2dpbmdcXG5ibGFoL01cXG5ibGFocy9NXFxuYmxhbWUvQk1HRFJTXFxuYmxhbWVsZXNzL1lQXFxuYmxhbWVsZXNzbmVzcy9NXFxuYmxhbWV3b3J0aGluZXNzL01cXG5ibGFtZXdvcnRoeS9QXFxuYmxhbW1vXFxuYmxhbmNoL0dEU1xcbmJsYW5jbWFuZ2UvTVNcXG5ibGFuZC9QVFJZXFxuYmxhbmRpc2gvRFNMR1xcbmJsYW5kaXNobWVudC9TTVxcbmJsYW5kbmVzcy9NXFxuYmxhbmsvVEdQTURSWVNcXG5ibGFua2V0L0dNRFNcXG5ibGFua25lc3MvTVxcbmJsYXJlL01HRFNcXG5ibGFybmV5L1NNREdcXG5ibGFzZVxcbmJsYXNwaGVtZS9aR0RSU1xcbmJsYXNwaGVtZXIvTVxcbmJsYXNwaGVtb3VzL1lcXG5ibGFzcGhlbXkvU01cXG5ibGFzdC9aR01EUlNcXG5ibGFzdGVyL01cXG5ibGFzdG9mZi9NU1xcbmJsYXQvU1xcbmJsYXRhbmN5L1NNXFxuYmxhdGFudC9ZXFxuYmxhdGhlci9TTURHXFxuYmxhemUvTVpHRFJTXFxuYmxhemVyL01cXG5ibGF6b24vTURHU1xcbmJsZGdcXG5ibGVhY2gvTURSU1pHXFxuYmxlYWNoZWQvVVxcbmJsZWFjaGVyL01cXG5ibGVhay9UUFJZXFxuYmxlYWtuZXNzL01cXG5ibGVhclxcbmJsZWFyaWx5XFxuYmxlYXJpbmVzcy9NXFxuYmxlYXJ5L1BSVFxcbmJsZWF0L0dNRFNcXG5ibGVlZC9aR1JTXFxuYmxlZWRlci9NXFxuYmxlZWRpbmcvTVxcbmJsZWVwL1pHTURSU1xcbmJsZWVwZXIvTVxcbmJsZW1pc2gvR01EU1xcbmJsZW1pc2hlZC9VXFxuYmxlbmNoL0RTR1xcbmJsZW5kL1pHTURSU1xcbmJsZW5kZXIvTVxcbmJsZXNzL0dEU0pcXG5ibGVzc2VkL1lQXFxuYmxlc3NlZG5lc3MvTVxcbmJsZXNzaW5nL01cXG5ibGV0Y2hcXG5ibGV3XFxuYmxpZ2h0L1pHTURSU1xcbmJsaW1leVxcbmJsaW1wL01TXFxuYmxpbXBpc2hcXG5ibGluZC9QWlRHTURSWVNcXG5ibGluZGVyL01cXG5ibGluZGZvbGQvU01ER1xcbmJsaW5kaW5nL1lcXG5ibGluZG5lc3MvTVxcbmJsaW5kc2lkZS9EU0dcXG5ibGluaS9NU1xcbmJsaW5rL1pHTURSU1xcbmJsaW5rZXIvTURHXFxuYmxpbnR6L01TXFxuYmxpbnR6ZS9NXFxuYmxpcC9TTVxcbmJsaXNzL01cXG5ibGlzc2Z1bC9ZUFxcbmJsaXNzZnVsbmVzcy9NXFxuYmxpc3Rlci9HTURTXFxuYmxpc3RlcmluZy9ZXFxuYmxpc3RlcnlcXG5ibGl0aGUvUFlUUlxcbmJsaXRoZW5lc3MvTVxcbmJsaXRoZXIvR1xcbmJsaXRoZXNvbWVcXG5ibGl0ei9HTURTXFxuYmxpdHprcmllZy9NU1xcbmJsaXZldC9TXFxuYmxpenphcmQvU01cXG5ibG9hdC9aR0RSU1xcbmJsb2F0d2FyZVxcbmJsb2IvU01cXG5ibG9iYmVkXFxuYmxvYmJpbmdcXG5ibG9jL1NNXFxuYmxvY2snc1xcbmJsb2NrL1VHRFNcXG5ibG9ja2FkZS9NWkdEUlNcXG5ibG9ja2FkZXIvTVxcbmJsb2NrYWdlL01TXFxuYmxvY2tidXN0ZXIvU01cXG5ibG9ja2J1c3RpbmcvTVxcbmJsb2NrY2hhaW4vTVNcXG5ibG9ja2VyL01TXFxuYmxvY2toZWFkL1NNXFxuYmxvY2tob3VzZS9NU1xcbmJsb2cvU01cXG5ibG9nZ2VkXFxuYmxvZ2dlci9NU1xcbmJsb2dnaW5nXFxuYmxva2UvTVNcXG5ibG9raXNoXFxuYmxvbmQvUFRNUlNcXG5ibG9uZGUvTVNcXG5ibG9uZGlzaFxcbmJsb25kbmVzcy9NXFxuYmxvb2QvR01EU1xcbmJsb29kYmF0aC9NXFxuYmxvb2RiYXRoc1xcbmJsb29kY3VyZGxpbmdcXG5ibG9vZGhvdW5kL1NNXFxuYmxvb2RpbHlcXG5ibG9vZGluZXNzL01cXG5ibG9vZGxlc3MvWVBcXG5ibG9vZGxlc3NuZXNzL01cXG5ibG9vZGxldHRpbmcvTVxcbmJsb29kbGluZS9TTVxcbmJsb29kbW9iaWxlL01TXFxuYmxvb2RzaGVkL01cXG5ibG9vZHNob3RcXG5ibG9vZHN0YWluL1NNRFxcbmJsb29kc3RvY2svTVxcbmJsb29kc3RyZWFtL1NNXFxuYmxvb2RzdWNrZXIvU01cXG5ibG9vZHN1Y2tpbmdcXG5ibG9vZHRoaXJzdGlseVxcbmJsb29kdGhpcnN0aW5lc3MvTVxcbmJsb29kdGhpcnN0eS9SUFRcXG5ibG9vZHkvUFRHRFJTXFxuYmxvb20vWkdNRFJTXFxuYmxvb21lci9NXFxuYmxvb3AvWkdNRFJTXFxuYmxvb3Blci9NXFxuYmxvc3NvbS9HTURTXFxuYmxvc3NvbXlcXG5ibG90L1NNXFxuYmxvdGNoL0dNRFNcXG5ibG90Y2h5L1RSXFxuYmxvdHRlZFxcbmJsb3R0ZXIvTVNcXG5ibG90dGluZ1xcbmJsb3R0b1xcbmJsb3VzZS9NR0RTXFxuYmxvdy9TWkdNUlxcbmJsb3dlci9NXFxuYmxvd2ZseS9TTVxcbmJsb3dndW4vTVNcXG5ibG93aGFyZC9NU1xcbmJsb3dob2xlL1NcXG5ibG93am9iL1NNXFxuYmxvd2xhbXAvU1xcbmJsb3duXFxuYmxvd291dC9TTVxcbmJsb3dwaXBlL1NNXFxuYmxvd3RvcmNoL01TXFxuYmxvd3VwL01TXFxuYmxvd3kvVFJcXG5ibG93enkvUlRcXG5ibHViYmVyL0dTTURcXG5ibHViYmVyeVxcbmJsdWRnZW9uL01ER1NcXG5ibHVlL0RSU1BNVEdcXG5ibHVlYmVsbC9NU1xcbmJsdWViZXJyeS9TTVxcbmJsdWViaXJkL01TXFxuYmx1ZWJvbm5ldC9TTVxcbmJsdWVib3R0bGUvU01cXG5ibHVlZmlzaC9NU1xcbmJsdWVnaWxsL01TXFxuYmx1ZWdyYXNzL01cXG5ibHVlaXNoXFxuYmx1ZWphY2tldC9TTVxcbmJsdWVqZWFucy9NXFxuYmx1ZW5lc3MvTVxcbmJsdWVub3NlL01TXFxuYmx1ZXBvaW50L01TXFxuYmx1ZXByaW50L01ER1NcXG5ibHVlc3RvY2tpbmcvU01cXG5ibHVlc3kvUlRcXG5ibHVldC9NU1xcbmJsdWZmL1pUR1BNRFJZU1xcbmJsdWZmZXIvTVxcbmJsdWZmbmVzcy9NXFxuYmx1aW5nL01cXG5ibHVpc2hcXG5ibHVuZGVyL01EUlpHU1xcbmJsdW5kZXJidXNzL01TXFxuYmx1bmRlcmVyL01cXG5ibHVudC9QVEdEUllTXFxuYmx1bnRuZXNzL01cXG5ibHVyL1NNXFxuYmx1cmIvTVNcXG5ibHVycmVkXFxuYmx1cnJpbmVzcy9NXFxuYmx1cnJpbmdcXG5ibHVycnkvVFJQXFxuYmx1cnQvR0RTXFxuYmx1c2gvWkdNRFJTXFxuYmx1c2hlci9NXFxuYmx1c3Rlci9NRFJTWkdcXG5ibHVzdGVyZXIvTVxcbmJsdXN0ZXJvdXNcXG5ibHVzdGVyeVxcbmJsdmRcXG5ib2EvU01cXG5ib2FyL1NNXFxuYm9hcmQvWkdNRFJTXFxuYm9hcmRlci9NXFxuYm9hcmRpbmcvTVxcbmJvYXJkaW5naG91c2UvTVNcXG5ib2FyZHJvb20vTVNcXG5ib2FyZHdhbGsvTVNcXG5ib2FzdC9aR01EUlNcXG5ib2FzdGVyL01cXG5ib2FzdGZ1bC9QWVxcbmJvYXN0ZnVsbmVzcy9NXFxuYm9hdC9TWkdNRFJcXG5ib2F0ZXIvTVxcbmJvYXRob3VzZS9NU1xcbmJvYXRpbmcvTVxcbmJvYXRsb2FkL1NcXG5ib2F0bWFuL01cXG5ib2F0bWVuXFxuYm9hdHN3YWluL1NNXFxuYm9hdHlhcmQvU1xcbmJvYi9TTVxcbmJvYmJlZFxcbmJvYmJpbi9NU1xcbmJvYmJpbmdcXG5ib2JibGUvTUdEU1xcbmJvYmJ5L1NNXFxuYm9iYnlzb3hlci9TTVxcbmJvYmNhdC9NU1xcbmJvYm9saW5rL1NNXFxuYm9ic2xlZC9TTVxcbmJvYnNsZWRkZWRcXG5ib2JzbGVkZGVyL01TXFxuYm9ic2xlZGRpbmdcXG5ib2JzbGVpZ2gvTVxcbmJvYnNsZWlnaHNcXG5ib2J0YWlsL1NNXFxuYm9id2hpdGUvTVNcXG5ib2NjaWUvTVxcbmJvY2svTVxcbmJvZC9TTURHXFxuYm9kYWNpb3VzXFxuYm9kZS9TXFxuYm9kZWdhL01TXFxuYm9kZ2UvR0RTXFxuYm9kaWNlL01TXFxuYm9kaWx5XFxuYm9ka2luL01TXFxuYm9keS9EU01cXG5ib2R5YnVpbGRlci9TTVxcbmJvZHlidWlsZGluZy9NXFxuYm9keWd1YXJkL01TXFxuYm9keXN1aXQvU01cXG5ib2R5d29yay9NXFxuYm9mZmluL1NcXG5ib2Zmb1xcbmJvZy9TTVxcbmJvZ2FcXG5ib2dleS9HTURTXFxuYm9nZXltYW4vTVxcbmJvZ2V5bWVuXFxuYm9nZ2VkXFxuYm9nZ2luZ1xcbmJvZ2dsZS9HRFNcXG5ib2dneS9UUlxcbmJvZ2llL01TXFxuYm9nb25cXG5ib2dvc2l0eVxcbmJvZ3VzXFxuYm9neW1hbi9NXFxuYm9neW1lblxcbmJvaGVtaWFuL1NNXFxuYm9oZW1pYW5pc20vTVxcbmJvaWwvU0paR01EUlxcbmJvaWxlci9NXFxuYm9pbGVybWFrZXIvU01cXG5ib2lsZXJwbGF0ZS9NXFxuYm9pbmsvR0RTXFxuYm9pc3Rlcm91cy9ZUFxcbmJvaXN0ZXJvdXNuZXNzL01cXG5ib2xhL1NNXFxuYm9sZC9QVFJZXFxuYm9sZGZhY2UvRE1cXG5ib2xkbmVzcy9NXFxuYm9sZS9TTVxcbmJvbGVyby9NU1xcbmJvbGl2YXIvTVNcXG5ib2xpdmFyZXNcXG5ib2xsL1NNXFxuYm9sbGFyZC9TXFxuYm9sbGl4L0dNRFNcXG5ib2xsb2NraW5nL1NcXG5ib2xsb2Nrc1xcbmJvbG9nbmEvTVxcbmJvbHNoaWVcXG5ib2xzdGVyL0dNRFNcXG5ib2x0J3NcXG5ib2x0L1VTR0RcXG5ib2x0aG9sZS9TXFxuYm9sdXMvTVNcXG5ib21iL1NKWkdNRFJcXG5ib21iYXJkL0dETFNcXG5ib21iYXJkaWVyL01TXFxuYm9tYmFyZG1lbnQvU01cXG5ib21iYXN0L01cXG5ib21iYXN0aWNcXG5ib21iYXN0aWNhbGx5XFxuYm9tYmVyL01cXG5ib21icHJvb2ZcXG5ib21ic2hlbGwvU01cXG5ib21ic2l0ZS9TXFxuYm9uYW56YS9NU1xcbmJvbmJvbi9NU1xcbmJvbmNlL1NcXG5ib25kL1NHTURcXG5ib25kYWdlL01cXG5ib25kaG9sZGVyL01TXFxuYm9uZGluZy9NXFxuYm9uZG1hbi9NXFxuYm9uZG1lblxcbmJvbmRzbWFuL01cXG5ib25kc21lblxcbmJvbmR3b21hbi9NXFxuYm9uZHdvbWVuXFxuYm9uZS9EUlNNWkdcXG5ib25laGVhZC9TTURcXG5ib25lbGVzc1xcbmJvbmVyL01cXG5ib25lc2hha2VyL1NcXG5ib25leWFyZFxcbmJvbmZpcmUvTVNcXG5ib25nL1NHTURcXG5ib25nby9NU1xcbmJvbmhvbWllL01cXG5ib25pbmVzcy9NXFxuYm9uaXRvL01TXFxuYm9uay9TWkdEXFxuYm9ubmV0L01TXFxuYm9ubnkvVFJcXG5ib25vYm8vTVNcXG5ib25zYWkvTVxcbmJvbnVzL01TXFxuYm9ueS9QVFJcXG5ib28vU01ESEdcXG5ib29iL1NHTURcXG5ib29ieS9TTVxcbmJvb2RsZS9NU1xcbmJvb2dlci9TXFxuYm9vZ2V5bWFuL01cXG5ib29nZXltZW5cXG5ib29naWUvTURTXFxuYm9vZ2llaW5nXFxuYm9vZ2llbWFuL01cXG5ib29ob28vR01EU1xcbmJvb2svU0JKR01EXFxuYm9va2JpbmRlci9TTVxcbmJvb2tiaW5kZXJ5L1NNXFxuYm9va2JpbmRpbmcvTVxcbmJvb2tjYXNlL01TXFxuYm9va2VuZC9NU1xcbmJvb2tpZS9NU1xcbmJvb2tpbmcvTVxcbmJvb2tpc2hcXG5ib29ra2VlcGVyL01TXFxuYm9va2tlZXBpbmcvTVxcbmJvb2tsZXQvTVNcXG5ib29rbWFrZXIvU01cXG5ib29rbWFraW5nL01cXG5ib29rbWFyay9TTURHXFxuYm9va21vYmlsZS9TTVxcbmJvb2twbGF0ZS9NU1xcbmJvb2tzZWxsZXIvTVNcXG5ib29rc2hlbGYvTVxcbmJvb2tzaGVsdmVzXFxuYm9va3Nob3AvU01cXG5ib29rc3RhbGwvU1xcbmJvb2tzdG9yZS9NU1xcbmJvb2t3b3JtL1NNXFxuYm9vbGVhblxcbmJvb20vU1pHTURSXFxuYm9vbWJveC9NU1xcbmJvb21lcmFuZy9NREdTXFxuYm9vbi9TTVxcbmJvb25kb2Nrcy9NXFxuYm9vbmRvZ2dsZS9NWkdEUlNcXG5ib29uZG9nZ2xlci9NXFxuYm9vbmllcy9NXFxuYm9vci9TTVxcbmJvb3Jpc2gvUFlcXG5ib29yaXNobmVzcy9NU1xcbmJvb3N0L1pHTURSU1xcbmJvb3N0ZXIvTVxcbmJvb3Qnc1xcbmJvb3QvQVNHRFxcbmJvb3RibGFjay9TTVxcbmJvb3RlZS9NU1xcbmJvb3RoL01cXG5ib290aHNcXG5ib290bGFjZS9TXFxuYm9vdGxlZy9NU1xcbmJvb3RsZWdnZWRcXG5ib290bGVnZ2VyL01TXFxuYm9vdGxlZ2dpbmcvTVxcbmJvb3RsZXNzXFxuYm9vdHN0cmFwL01TXFxuYm9vdHN0cmFwcGVkXFxuYm9vdHN0cmFwcGluZ1xcbmJvb3R5L1NNXFxuYm9vemUvTVpHRFJTXFxuYm9vemVyL01cXG5ib296eS9UUlxcbmJvcC9TTVxcbmJvcHBlZFxcbmJvcHBpbmdcXG5ib3JheC9NXFxuYm9yZGVsbG8vTVNcXG5ib3JkZXIvR01EU1xcbmJvcmRlcmxhbmQvTVNcXG5ib3JkZXJsaW5lL01TXFxuYm9yZS9EUlNNWkdcXG5ib3JlZG9tL01cXG5ib3JlaG9sZS9TXFxuYm9yZXIvTVxcbmJvcmluZy9ZXFxuYm9ybi9JQVVcXG5ib3JuZVxcbmJvcm9uL01cXG5ib3JvdWdoL01cXG5ib3JvdWdoc1xcbmJvcnJvdy9TRFJaR0pcXG5ib3Jyb3dlci9NXFxuYm9ycm93aW5nL01cXG5ib3JzY2h0L01cXG5ib3JzdGFsL1NcXG5ib3J6b2kvU01cXG5ib3NoL01cXG5ib3NvbSdzXFxuYm9zb20vVVNcXG5ib3NvbXlcXG5ib3NzL0RTR01cXG5ib3NzaWx5XFxuYm9zc2luZXNzL01cXG5ib3NzaXNtL01cXG5ib3NzeS9SVFBcXG5ib3QvU1xcbmJvdGFuaWNcXG5ib3RhbmljYWwvWVxcbmJvdGFuaXN0L1NNXFxuYm90YW55L01cXG5ib3RjaC9EUlNaR01cXG5ib3RjaGVyL01cXG5ib3RoXFxuYm90aGVyL1NNREdcXG5ib3RoZXJhdGlvblxcbmJvdGhlcmVkL1VcXG5ib3RoZXJzb21lXFxuYm90bmV0L1NNXFxuYm90dGxlL0RSU01aR1xcbmJvdHRsZW5lY2svTVNcXG5ib3R0bGVyL01cXG5ib3R0b20vU01ER1xcbmJvdHRvbWxlc3NcXG5ib3R1bGludW1cXG5ib3R1bGlzbS9NXFxuYm91ZG9pci9TTVxcbmJvdWZmYW50L1NNXFxuYm91Z2FpbnZpbGxlYS9NU1xcbmJvdWdoL01cXG5ib3VnaHNcXG5ib3VnaHRcXG5ib3VpbGxhYmFpc3NlL1NNXFxuYm91aWxsb24vTVNcXG5ib3VsZGVyL1NNXFxuYm91bGVzXFxuYm91bGV2YXJkL1NNXFxuYm91bmNlL0RSU01aR1xcbmJvdW5jZXIvTVxcbmJvdW5jaWx5XFxuYm91bmNpbmVzcy9NXFxuYm91bmN5L1JUUFxcbmJvdW5kL0FTTUdEXFxuYm91bmRhcnkvU01cXG5ib3VuZGVuXFxuYm91bmRlci9TTVxcbmJvdW5kbGVzcy9QWVxcbmJvdW5kbGVzc25lc3MvTVxcbmJvdW50ZW91cy9ZUFxcbmJvdW50ZW91c25lc3MvTVxcbmJvdW50aWZ1bC9ZUFxcbmJvdW50aWZ1bG5lc3MvTVxcbmJvdW50eS9TTVxcbmJvdXF1ZXQvU01cXG5ib3VyYm9uL1NNXFxuYm91cmdlb2lzL01cXG5ib3VyZ2VvaXNpZS9NXFxuYm91c3Ryb3BoZWRvblxcbmJvdXQvTVNcXG5ib3V0aXF1ZS9TTVxcbmJvdXRvbm5pZXJlL01TXFxuYm91em91a2kvTVNcXG5ib3ZpbmUvU01cXG5ib3Z2ZXJcXG5ib3cvWkdTTURSXFxuYm93ZGxlcml6YXRpb24vTVNcXG5ib3dkbGVyaXplL0RTR1xcbmJvd2VkL1VcXG5ib3dlbC9TTVxcbmJvd2VyL01cXG5ib3dsL01EUlpHU1xcbmJvd2xlZy9TTVxcbmJvd2xlZ2dlZFxcbmJvd2xlci9NXFxuYm93bGZ1bC9TTVxcbmJvd2xpbmUvU01cXG5ib3dsaW5nL01cXG5ib3dtYW4vTVxcbmJvd21lblxcbmJvd3Nwcml0L1NNXFxuYm93c3RyaW5nL1NNXFxuYm93d293L1NNXFxuYm94L1pHTUROUlNcXG5ib3hjYXIvU01cXG5ib3hlci9NXFxuYm94aW5nL01cXG5ib3hsaWtlXFxuYm94cm9vbS9TXFxuYm94d29vZC9NXFxuYm94eS9SVFxcbmJveS9TTVxcbmJveWNvdHQvU0dNRFxcbmJveWZyaWVuZC9NU1xcbmJveWhvb2QvU01cXG5ib3lpc2gvWVBcXG5ib3lpc2huZXNzL01cXG5ib3lzZW5iZXJyeS9TTVxcbmJvem8vTVNcXG5icG1cXG5icHNcXG5icmEvU01cXG5icmFjZS9NWkdEUlNcXG5icmFjZWxldC9NU1xcbmJyYWNlci9NXFxuYnJhY2Vyby9NU1xcbmJyYWNrZW4vTVxcbmJyYWNrZXQvR01EU1xcbmJyYWNraXNoL1BcXG5icmFja2lzaG5lc3MvTVxcbmJyYWN0L01TXFxuYnJhZC9TTVxcbmJyYWRhd2wvU1xcbmJyYWR5Y2FyZGlhXFxuYnJhZS9TTVxcbmJyYWcvU01cXG5icmFnZ2Fkb2Npby9TTVxcbmJyYWdnYXJ0L1NNXFxuYnJhZ2dlZFxcbmJyYWdnZXIvTVNcXG5icmFnZ2luZ1xcbmJyYWlkL0dNRFNcXG5icmFpZGluZy9NXFxuYnJhaWxsZS9NXFxuYnJhaW4vR01EU1xcbmJyYWluY2hpbGQvTVxcbmJyYWluY2hpbGRyZW4vTVxcbmJyYWluaW5lc3MvTVxcbmJyYWlubGVzcy9ZXFxuYnJhaW5wb3dlclxcbmJyYWluc3Rvcm0vU01ER1xcbmJyYWluc3Rvcm1pbmcvTVxcbmJyYWludGVhc2VyL1NNXFxuYnJhaW53YXNoL0RTR1xcbmJyYWlud2FzaGluZy9NXFxuYnJhaW53YXZlL1NcXG5icmFpbnkvUFRSXFxuYnJhaXNlL0dEU1xcbmJyYWtlL01HRFNcXG5icmFrZW1hbi9NXFxuYnJha2VtZW5cXG5icmFtYmxlL01TXFxuYnJhbWJseVxcbmJyYW4vTVxcbmJyYW5jaC9HTURTXFxuYnJhbmNobGlrZVxcbmJyYW5kL1pHTURSU1xcbmJyYW5kZWQvVVxcbmJyYW5kZXIvTVxcbmJyYW5kaXNoL0RTR1xcbmJyYW5keS9HRFNNXFxuYnJhc2gvUFRSWVxcbmJyYXNobmVzcy9NXFxuYnJhc3MvTVNcXG5icmFzc2VyaWUvTVNcXG5icmFzc2llcmUvTVNcXG5icmFzc2lseVxcbmJyYXNzaW5lc3MvTVxcbmJyYXNzeS9QVFJcXG5icmF0L1NNXFxuYnJhdHR5L1JUXFxuYnJhdHd1cnN0L1NNXFxuYnJhdmFkby9NXFxuYnJhdmUvR1BNWURUUlNcXG5icmF2ZW5lc3MvTVxcbmJyYXZlcnkvTVxcbmJyYXZvL1NNXFxuYnJhdnVyYS9TTVxcbmJyYXdsL1NEUlpHTVxcbmJyYXdsZXIvTVxcbmJyYXduL01cXG5icmF3bmluZXNzL01cXG5icmF3bnkvUlRQXFxuYnJheS9ER1NNXFxuYnJhemUvRFJTWkdcXG5icmF6ZW4vU0RZR1BcXG5icmF6ZW5uZXNzL01cXG5icmF6ZXIvTVxcbmJyYXppZXIvU01cXG5icmVhY2gvR01EU1xcbmJyZWFkL0dNREhTXFxuYnJlYWRiYXNrZXQvU01cXG5icmVhZGJvYXJkL1NNXFxuYnJlYWRib3gvTVNcXG5icmVhZGNydW1iL01TXFxuYnJlYWRmcnVpdC9TTVxcbmJyZWFkbGluZS9NU1xcbmJyZWFkdGgvTVxcbmJyZWFkdGhzXFxuYnJlYWR3aW5uZXIvU01cXG5icmVhay9CTVpHUlNcXG5icmVha2FibGUvTVNcXG5icmVha2FnZS9NU1xcbmJyZWFrYXdheS9NU1xcbmJyZWFrZG93bi9NU1xcbmJyZWFrZXIvTVxcbmJyZWFrZmFzdC9NREdTXFxuYnJlYWtmcm9udC9NU1xcbmJyZWFrbmVja1xcbmJyZWFrb3V0L01TXFxuYnJlYWtwb2ludHNcXG5icmVha3Rocm91Z2gvTVxcbmJyZWFrdGhyb3VnaHNcXG5icmVha3VwL1NNXFxuYnJlYWt3YXRlci9TTVxcbmJyZWFtL01TXFxuYnJlYXN0L1NNREdcXG5icmVhc3Rib25lL01TXFxuYnJlYXN0ZmVkXFxuYnJlYXN0ZmVlZC9HU1xcbmJyZWFzdHBsYXRlL1NNXFxuYnJlYXN0c3Ryb2tlL1NNXFxuYnJlYXN0d29yay9NU1xcbmJyZWF0aC9NRFJTWkdCXFxuYnJlYXRoYWx5emUvWkdEUlNcXG5icmVhdGhlXFxuYnJlYXRoZXIvTVxcbmJyZWF0aGluZy9NXFxuYnJlYXRobGVzcy9QWVxcbmJyZWF0aGxlc3NuZXNzL01cXG5icmVhdGhzXFxuYnJlYXRodGFraW5nL1lcXG5icmVhdGh5L1JUXFxuYnJlZC9JXFxuYnJlZWNoL01TXFxuYnJlZWQvU1JaR01cXG5icmVlZGVyL01cXG5icmVlZGluZy9JTVxcbmJyZWV6ZS9EU01HXFxuYnJlZXpld2F5L1NNXFxuYnJlZXppbHlcXG5icmVlemluZXNzL01cXG5icmVlenkvUlRQXFxuYnJldGhyZW5cXG5icmV2ZS9TTVxcbmJyZXZldC9TTVxcbmJyZXZldHRlZFxcbmJyZXZldHRpbmdcXG5icmV2aWFyeS9TTVxcbmJyZXZpdHkvTVxcbmJyZXcvTURSWkdTXFxuYnJld2VyL01cXG5icmV3ZXJ5L1NNXFxuYnJld3B1Yi9TTVxcbmJyaWJlL0RSU01aR1xcbmJyaWJlci9NXFxuYnJpYmVyeS9NXFxuYnJpY2svU01ER1xcbmJyaWNrYmF0L1NNXFxuYnJpY2tpZS9TXFxuYnJpY2tsYXllci9NU1xcbmJyaWNrbGF5aW5nL01cXG5icmlja3dvcmsvTVxcbmJyaWNreWFyZC9TXFxuYnJpZGFsL1NNXFxuYnJpZGUvU01cXG5icmlkZWdyb29tL1NNXFxuYnJpZGVzbWFpZC9NU1xcbmJyaWRnZS9EU01HXFxuYnJpZGdlYWJsZS9VXFxuYnJpZGdlaGVhZC9TTVxcbmJyaWRnZXdvcmsvTVxcbmJyaWRsZS9EU01HXFxuYnJpZGxlZC9VXFxuYnJpZGxld2F5L1NcXG5icmllL01aUlxcbmJyaWVmJ3NcXG5icmllZi9DU0RUR0pcXG5icmllZmNhc2UvU01cXG5icmllZmVyXFxuYnJpZWZpbmcvQ01cXG5icmllZmx5XFxuYnJpZWZuZXNzL01cXG5icmllci9NXFxuYnJpZy9NU1xcbmJyaWdhZGUvU01cXG5icmlnYWRpZXIvTVNcXG5icmlnYW5kL1NNXFxuYnJpZ2FuZGFnZS9NXFxuYnJpZ2FudGluZS9NU1xcbmJyaWdodC9TUE5SWVhUXFxuYnJpZ2h0ZW4vRFJaR1xcbmJyaWdodGVuZXIvTVxcbmJyaWdodG5lc3MvTVxcbmJyaWdodHMvTVxcbmJyaWxsXFxuYnJpbGxpYW5jZS9NXFxuYnJpbGxpYW5jeS9NXFxuYnJpbGxpYW50L01ZU1xcbmJyaWxsaWFudGluZS9NXFxuYnJpbS9NU1xcbmJyaW1mdWxcXG5icmltbGVzc1xcbmJyaW1tZWRcXG5icmltbWluZ1xcbmJyaW1zdG9uZS9NXFxuYnJpbmRsZS9ETVxcbmJyaW5lL01cXG5icmluZy9TUlpHXFxuYnJpbmdlci9NXFxuYnJpbmluZXNzL01cXG5icmluay9TTVxcbmJyaW5rbWFuc2hpcC9NXFxuYnJpbnkvUlRQXFxuYnJpb2NoZS9TTVxcbmJyaXF1ZXR0ZS9NU1xcbmJyaXNrL1NEUllUR1BcXG5icmlza2V0L1NNXFxuYnJpc2tuZXNzL01cXG5icmlzdGxlL0RTTUdcXG5icmlzdGx5L1RSXFxuYnJpdGNoZXMvTVxcbmJyaXR0bGUvUFJNVFxcbmJyaXR0bGVuZXNzL01cXG5icm8vU01IXFxuYnJvYWNoL01EU0dcXG5icm9hZC9TTU5SWVhUUFxcbmJyb2FkYmFuZC9NXFxuYnJvYWRjYXN0L0FNR1NcXG5icm9hZGNhc3Rlci9NU1xcbmJyb2FkY2FzdGluZy9NXFxuYnJvYWRjbG90aC9NXFxuYnJvYWRlbi9ER1xcbmJyb2FkbG9vbS9NXFxuYnJvYWRtaW5kZWRcXG5icm9hZG5lc3MvTVxcbmJyb2Fkc2hlZXQvU01cXG5icm9hZHNpZGUvTUdEU1xcbmJyb2Fkc3dvcmQvU01cXG5icm9jYWRlL0RTTUdcXG5icm9jY29saS9NXFxuYnJvY2hldHRlL1NNXFxuYnJvY2h1cmUvTVNcXG5icm9nYW4vU01cXG5icm9ndWUvU01cXG5icm9pbC9TTURSWkdcXG5icm9pbGVyL01cXG5icm9rZVxcbmJyb2tlbi9ZUFxcbmJyb2tlbmhlYXJ0ZWQvWVxcbmJyb2tlbm5lc3MvTVxcbmJyb2tlci9TTURHXFxuYnJva2VyYWdlL01TXFxuYnJvbGx5L1NcXG5icm9taWRlL1NNXFxuYnJvbWlkaWNcXG5icm9taW5lL01cXG5icm9uYy9TTVxcbmJyb25jaGlcXG5icm9uY2hpYWxcXG5icm9uY2hpdGljXFxuYnJvbmNoaXRpcy9NXFxuYnJvbmNodXMvTVxcbmJyb25jby9TTVxcbmJyb25jb2J1c3Rlci9TTVxcbmJyb250b3NhdXIvTVNcXG5icm9udG9zYXVydXMvTVNcXG5icm9uemUvRFNNR1xcbmJyb29jaC9NU1xcbmJyb29kL1NNRFJaR1xcbmJyb29kZXIvTVxcbmJyb29kaWx5XFxuYnJvb2RpbmcvTVlcXG5icm9vZG1hcmUvTVNcXG5icm9vZHkvUk1QVFxcbmJyb29rL1NNREdcXG5icm9va2xldC9TTVxcbmJyb29tL1NNXFxuYnJvb21zdGljay9NU1xcbmJyb3RoL01SWlxcbmJyb3RoZWwvTVNcXG5icm90aGVyL01ZXFxuYnJvdGhlcmhvb2QvTVNcXG5icm90aGVybGluZXNzL01cXG5icm90aHNcXG5icm91Z2hhbS9TTVxcbmJyb3VnaHRcXG5icm91aGFoYS9TTVxcbmJyb3cvTVNcXG5icm93YmVhdC9TTkdcXG5icm93bi9TTURSUFRHXFxuYnJvd25maWVsZFxcbmJyb3duaWUvTVNcXG5icm93bmlzaFxcbmJyb3dubmVzcy9NXFxuYnJvd25vdXQvU01cXG5icm93bnN0b25lL01TXFxuYnJvd3NlL0RSU01aR1xcbmJyb3dzZXIvTVxcbmJyclxcbmJydWluL1NNXFxuYnJ1aXNlL0RSU01aR1xcbmJydWlzZXIvTVxcbmJydWlzaW5nL01cXG5icnVpdC9TREdcXG5icnVuY2gvTURTR1xcbmJydW5ldC9TTVxcbmJydW5ldHRlL01TXFxuYnJ1bnQvTVxcbmJydXNoL01EU0dcXG5icnVzaG9mZi9TTVxcbmJydXNoc3Ryb2tlL1NcXG5icnVzaHdvb2QvTVxcbmJydXNod29yay9NXFxuYnJ1c3F1ZS9SUFlUXFxuYnJ1c3F1ZW5lc3MvTVxcbmJydXRhbC9ZXFxuYnJ1dGFsaXR5L1NNXFxuYnJ1dGFsaXphdGlvbi9NXFxuYnJ1dGFsaXplL0dEU1xcbmJydXRlL1NNXFxuYnJ1dGlzaC9QWVxcbmJydXRpc2huZXNzL01cXG5idVxcbmJ1Yi9TTVxcbmJ1YmJsZS9EU01HXFxuYnViYmxlZ3VtL01cXG5idWJibHkvUk1UXFxuYnViby9NXFxuYnVib2VzXFxuYnVjY2FuZWVyL1NHTURcXG5idWNrL01ER1NcXG5idWNrYXJvby9TTVxcbmJ1Y2tib2FyZC9NU1xcbmJ1Y2tldC9TR01EXFxuYnVja2V0ZnVsL01TXFxuYnVja2V5ZS9NU1xcbmJ1Y2tsZSdzXFxuYnVja2xlL1VEU0dcXG5idWNrbGVyL01TXFxuYnVja3JhbS9NXFxuYnVja3Nhdy9NU1xcbmJ1Y2tzaG90L01cXG5idWNrc2tpbi9NU1xcbmJ1Y2t0ZWV0aFxcbmJ1Y2t0b290aC9NRFxcbmJ1Y2t3aGVhdC9NXFxuYnVja3liYWxsL1NNXFxuYnVjb2xpYy9NU1xcbmJ1Y29saWNhbGx5XFxuYnVkL1NNXFxuYnVkZGVkXFxuYnVkZGluZy9TXFxuYnVkZHkvU01cXG5idWRnZS9EU0dcXG5idWRnZXJpZ2FyL01TXFxuYnVkZ2V0L1NHTURcXG5idWRnZXRhcnlcXG5idWRnaWUvU01cXG5idWZmL0FNREdTXFxuYnVmZmFsby9NREdcXG5idWZmYWxvZXNcXG5idWZmZXIvU01ER1xcbmJ1ZmZldC9TTURHSlxcbmJ1ZmZvb24vU01cXG5idWZmb29uZXJ5L01cXG5idWZmb29uaXNoXFxuYnVnJ3NcXG5idWcvQ1NcXG5idWdhYm9vL1NNXFxuYnVnYmVhci9TTVxcbmJ1Z2dlZC9DXFxuYnVnZ2VyL1NNREdcXG5idWdnZXJ5XFxuYnVnZ2luZy9DXFxuYnVnZ3kvUlNNVFxcbmJ1Z2xlL0RSU01aR1xcbmJ1Z2xlci9NXFxuYnVpbGQvU01SWkdKXFxuYnVpbGRlci9NXFxuYnVpbGRpbmcvTVxcbmJ1aWxkdXAvU01cXG5idWlsdC9BSVxcbmJ1aWx0aW5cXG5idWxiL01TXFxuYnVsYm91c1xcbmJ1bGdlL0RTTUdcXG5idWxneS9SVFxcbmJ1bGltYXJleGlhL01cXG5idWxpbWlhL01cXG5idWxpbWljL1NNXFxuYnVsay9NREdTXFxuYnVsa2hlYWQvTVNcXG5idWxraW5lc3MvTVxcbmJ1bGt5L1JUUFxcbmJ1bGwvTURHU1xcbmJ1bGxkb2cvU01cXG5idWxsZG9nZ2VkXFxuYnVsbGRvZ2dpbmdcXG5idWxsZG96ZS9aR0RSU1xcbmJ1bGxkb3plci9NXFxuYnVsbGV0L1NNRFxcbmJ1bGxldGluL01ER1NcXG5idWxsZXRwcm9vZi9TREdcXG5idWxsZmlnaHQvU01SWkdcXG5idWxsZmlnaHRlci9NXFxuYnVsbGZpZ2h0aW5nL01cXG5idWxsZmluY2gvTVNcXG5idWxsZnJvZy9NU1xcbmJ1bGxoZWFkL01EU1xcbmJ1bGxoZWFkZWQvUFlcXG5idWxsaGVhZGVkbmVzcy9NXFxuYnVsbGhvcm4vTVNcXG5idWxsaW9uL01cXG5idWxsaXNoL1lQXFxuYnVsbGlzaG5lc3MvTVxcbmJ1bGxvY2svU01cXG5idWxscGVuL1NNXFxuYnVsbHJpbmcvTVNcXG5idWxsc2V5ZVxcbmJ1bGxzaGl0L01TIVxcbmJ1bGxzaGl0dGVkLyFcXG5idWxsc2hpdHRlci9TTSFcXG5idWxsc2hpdHRpbmcvIVxcbmJ1bGx3aGlwL1NcXG5idWxseS9EU01HXFxuYnVscnVzaC9NU1xcbmJ1bHdhcmsvTVNcXG5idW0vU01cXG5idW1iYWcvU1xcbmJ1bWJsZS9EUlNaR1xcbmJ1bWJsZWJlZS9TTVxcbmJ1bWJsZXIvTVxcbmJ1bWZcXG5idW1tZWRcXG5idW1tZXIvU01cXG5idW1tZXN0XFxuYnVtbWluZ1xcbmJ1bXAvTURSWkdTXFxuYnVtcGVyL01cXG5idW1waFxcbmJ1bXBpbmVzcy9NXFxuYnVtcGtpbi9NU1xcbmJ1bXB0aW91cy9QWVxcbmJ1bXB0aW91c25lc3MvTVxcbmJ1bXB5L1BSVFxcbmJ1bi9TTVxcbmJ1bmNoL01EU0dcXG5idW5jaHkvUlRcXG5idW5jby9TTURHXFxuYnVuZGxlL0RTTUdcXG5idW5nL01ER1NcXG5idW5nYWxvdy9NU1xcbmJ1bmdlZS9TTVxcbmJ1bmdob2xlL01TXFxuYnVuZ2xlL0RSU01aR1xcbmJ1bmdsZXIvTVxcbmJ1bmlvbi9TTVxcbmJ1bmsnc1xcbmJ1bmsvQ0RHU1xcbmJ1bmtlci9TTVxcbmJ1bmtob3VzZS9TTVxcbmJ1bmt1bS9NXFxuYnVubnkvU01cXG5idW50L01ER1NKXFxuYnVudGluZy9NXFxuYnVveS9NREdTXFxuYnVveWFuY3kvTVxcbmJ1b3lhbnQvWVxcbmJ1ci9TTVlcXG5idXJibGUvRFNNR1xcbmJ1cmJzL01cXG5idXJkZW4nc1xcbmJ1cmRlbi9VU0dEXFxuYnVyZGVuc29tZVxcbmJ1cmRvY2svTVxcbmJ1cmVhdS9TTVxcbmJ1cmVhdWNyYWN5L1NNXFxuYnVyZWF1Y3JhdC9NU1xcbmJ1cmVhdWNyYXRpY1xcbmJ1cmVhdWNyYXRpY2FsbHlcXG5idXJlYXVjcmF0aXphdGlvbi9NXFxuYnVyZWF1Y3JhdGl6ZS9HRFNcXG5idXJnL01SWlNcXG5idXJnZW9uL0RTR1xcbmJ1cmdlci9NXFxuYnVyZ2gvTVJaXFxuYnVyZ2hlci9NXFxuYnVyZ2hzXFxuYnVyZ2xhci9NU1xcbmJ1cmdsYXJpemUvR0RTXFxuYnVyZ2xhcnByb29mXFxuYnVyZ2xhcnkvU01cXG5idXJnbGUvRFNHXFxuYnVyZ29tYXN0ZXIvU01cXG5idXJndW5keS9TTVxcbmJ1cmlhbC9BU01cXG5idXJrYS9TTVxcbmJ1cmwvTURTXFxuYnVybGFwL01cXG5idXJsZXNxdWUvTUdEU1xcbmJ1cmxpbmVzcy9NXFxuYnVybHkvUlBUXFxuYnVybi9NRFJaR1NCXFxuYnVybmFibGUvU01cXG5idXJuZXIvTVxcbmJ1cm5pc2gvWkdNRFJTXFxuYnVybmlzaGVyL01cXG5idXJub29zZS9NU1xcbmJ1cm5vdXQvTVNcXG5idXJudFxcbmJ1cnAvTURHU1xcbmJ1cnIvTURHU1xcbmJ1cnJpdG8vTVNcXG5idXJyby9TTVxcbmJ1cnJvdy9TTURSWkdcXG5idXJyb3dlci9NXFxuYnVyc2EvTVxcbmJ1cnNhZVxcbmJ1cnNhci9TTVxcbmJ1cnNhcnkvU01cXG5idXJzaXRpcy9NXFxuYnVyc3QvU01HXFxuYnVyeS9BRFNHXFxuYnVzL0FNU1xcbmJ1c2JveS9TTVxcbmJ1c2J5L1NNXFxuYnVzZWRcXG5idXNnaXJsL01TXFxuYnVzaC9NRFNHSlxcbmJ1c2hlbC9TR01EXFxuYnVzaGluZXNzL01cXG5idXNoaW5nL01cXG5idXNobWFuL01cXG5idXNobWFzdGVyL1NNXFxuYnVzaG1lblxcbmJ1c2h3aGFjay9EUlNaR1xcbmJ1c2h3aGFja2VyL01cXG5idXNoeS9SUFRcXG5idXNpbHlcXG5idXNpbmVzcy9NU1xcbmJ1c2luZXNzbGlrZVxcbmJ1c2luZXNzbWFuL01cXG5idXNpbmVzc21lblxcbmJ1c2luZXNzcGVyc29uL1NNXFxuYnVzaW5lc3N3b21hbi9NXFxuYnVzaW5lc3N3b21lblxcbmJ1c2luZy9NXFxuYnVzay9EUlpHU1xcbmJ1c2tpbi9TTVxcbmJ1c2xvYWQvU1xcbmJ1c3MvTURTR1xcbmJ1c3QvTURSWkdTXFxuYnVzdGVyL01cXG5idXN0bGUvRFNNR1xcbmJ1c3R5L1JaVFxcbmJ1c3kvRFJTVEdQXFxuYnVzeWJvZHkvU01cXG5idXN5bmVzcy9NXFxuYnVzeXdvcmsvTVxcbmJ1dC9BQ1NcXG5idXRhbmUvTVxcbmJ1dGNoL01SU1pcXG5idXRjaGVyL01ER1xcbmJ1dGNoZXJ5L1NNXFxuYnV0bGVyL1NNXFxuYnV0dC9NRFJaR1NcXG5idXR0ZS9TTVxcbmJ1dHRlZC9BXFxuYnV0dGVyL01ER1xcbmJ1dHRlcmJhbGwvTVNcXG5idXR0ZXJjcmVhbVxcbmJ1dHRlcmN1cC9TTVxcbmJ1dHRlcmZhdC9NXFxuYnV0dGVyZmluZ2VyZWRcXG5idXR0ZXJmaW5nZXJzL01cXG5idXR0ZXJmbHkvR0RTTVxcbmJ1dHRlcm1pbGsvTVxcbmJ1dHRlcm51dC9TTVxcbmJ1dHRlcnNjb3RjaC9NXFxuYnV0dGVyeS9UUlNNXFxuYnV0dGluZy9BXFxuYnV0dG9jay9TTVxcbmJ1dHRvbidzXFxuYnV0dG9uL1VTREdcXG5idXR0b25ob2xlL0RTTUdcXG5idXR0b253b29kL01TXFxuYnV0dHJlc3MvTURTR1xcbmJ1dHR5L1NcXG5idXhvbVxcbmJ1eS9aR1NNUlxcbmJ1eWJhY2svU01cXG5idXllci9NXFxuYnV5b3V0L1NNXFxuYnV6ei9NRFJTWkdcXG5idXp6YXJkL01TXFxuYnV6emVyL01cXG5idXp6a2lsbC9TTVxcbmJ1enp3b3JkL1NNXFxuYnhcXG5ieHNcXG5ieS9NXFxuYnllL1NNXFxuYnlnb25lL1NNXFxuYnlsYXcvU01cXG5ieWxpbmUvU01cXG5ieXBhc3MvR01EU1xcbmJ5cGF0aC9NXFxuYnlwYXRoc1xcbmJ5cGxheS9NXFxuYnlwcm9kdWN0L01TXFxuYnlyZS9TXFxuYnlyb2FkL1NNXFxuYnlzdGFuZGVyL01TXFxuYnl0ZS9NU1xcbmJ5d2F5L1NNXFxuYnl3b3JkL1NNXFxuYnl6YW50aW5lXFxuYy9JRVNcXG5jYVxcbmNhYi9TTVJaXFxuY2FiYWwvTVNcXG5jYWJhbGEnc1xcbmNhYmFsbGVyby9NU1xcbmNhYmFuYS9TTVxcbmNhYmFyZXQvU01cXG5jYWJiYWdlL01TXFxuY2FiYmVkXFxuY2FiYmluZ1xcbmNhYmJ5L1NNXFxuY2FiZHJpdmVyL1NNXFxuY2FiaW4vTVNcXG5jYWJpbmV0L1NNXFxuY2FiaW5ldG1ha2VyL01TXFxuY2FiaW5ldG1ha2luZy9NXFxuY2FiaW5ldHJ5L01cXG5jYWJpbmV0d29yay9NXFxuY2FibGUvTUdEU1xcbmNhYmxlY2FzdC9HTVNcXG5jYWJsZWdyYW0vTVNcXG5jYWJvY2hvbi9TTVxcbmNhYm9vZGxlL01cXG5jYWJvb3NlL1NNXFxuY2FicmlvbGV0L1NNXFxuY2Fic3RhbmQvU01cXG5jYWNhby9NU1xcbmNhY2hlL01HRFNcXG5jYWNoZXBvdC9TTVxcbmNhY2hldC9NU1xcbmNhY2tsZS9NWkdEUlNcXG5jYWNrbGVyL01cXG5jYWNvcGhvbm91c1xcbmNhY29waG9ueS9TTVxcbmNhY3RpXFxuY2FjdHVzL01cXG5jYWQvU01cXG5jYWRhdmVyL1NNXFxuY2FkYXZlcm91c1xcbmNhZGRpZS9NRFNcXG5jYWRkaXNoL1lQXFxuY2FkZGlzaG5lc3MvTVxcbmNhZGR5aW5nXFxuY2FkZW5jZS9EU01cXG5jYWRlbnphL1NNXFxuY2FkZXQvTVNcXG5jYWRnZS9aR0RSU1xcbmNhZGdlci9NXFxuY2FkbWl1bS9NXFxuY2FkcmUvTVNcXG5jYWR1Y2VpXFxuY2FkdWNldXMvTVxcbmNhZXN1cmEvU01cXG5jYWZlL1NNXFxuY2FmZXRlcmlhL01TXFxuY2FmZXRpZXJlL1NcXG5jYWZmL0NTXFxuY2FmZmVpbmF0ZWRcXG5jYWZmZWluZS9NXFxuY2FmdGFuL01TXFxuY2FnZS9EU01HXFxuY2FnZXlcXG5jYWdpZXJcXG5jYWdpZXN0XFxuY2FnaWx5XFxuY2FnaW5lc3MvTVxcbmNhZ291bGUvU1xcbmNhaG9vdC9NU1xcbmNhaW1hbi9NU1xcbmNhaXJuL01TXFxuY2Fpc3Nvbi9TTVxcbmNhaXRpZmYvU01cXG5jYWpvbGUvWkdMRFJTXFxuY2Fqb2xlbWVudC9NXFxuY2Fqb2xlci9NXFxuY2Fqb2xlcnkvTVxcbmNha2UvRFNNR1xcbmNha2V3YWxrL1NNXFxuY2FsXFxuY2FsYWJhc2gvTVNcXG5jYWxhYm9vc2UvU01cXG5jYWxhbWFyaS9TTVxcbmNhbGFtaW5lL01cXG5jYWxhbWl0b3VzL1lcXG5jYWxhbWl0eS9TTVxcbmNhbGNhcmVvdXNcXG5jYWxjaWZlcm91c1xcbmNhbGNpZmljYXRpb24vTVxcbmNhbGNpZnkvR05EU1xcbmNhbGNpbWluZS9EU01HXFxuY2FsY2luZS9EU0dcXG5jYWxjaXRlL01cXG5jYWxjaXVtL01cXG5jYWxjdWxhYmxlL0lcXG5jYWxjdWxhdGUvQUdOVkRTWFxcbmNhbGN1bGF0ZWQvWVxcbmNhbGN1bGF0aW5nL1lcXG5jYWxjdWxhdGlvbi9BTVxcbmNhbGN1bGF0b3IvU01cXG5jYWxjdWxpXFxuY2FsY3VsdXMvTVxcbmNhbGRlcmEvU01cXG5jYWxlbmRhci9NREdTXFxuY2FsZi9NXFxuY2FsZnNraW4vTVxcbmNhbGliZXIvU01cXG5jYWxpYnJhdGUvR05EU1hcXG5jYWxpYnJhdGlvbi9NXFxuY2FsaWJyYXRvci9TTVxcbmNhbGljby9NXFxuY2FsaWNvZXNcXG5jYWxpZm9ybml1bS9NXFxuY2FsaXBlci9TR01EXFxuY2FsaXBoL01cXG5jYWxpcGhhdGUvTVNcXG5jYWxpcGhzXFxuY2FsaXN0aGVuaWMvU1xcbmNhbGlzdGhlbmljcy9NXFxuY2Fsay9TR01EXFxuY2FsbC9BU0dNRFxcbmNhbGxhL01TXFxuY2FsbGFibGVcXG5jYWxsYmFjay9NU1xcbmNhbGxlZC9VXFxuY2FsbGVyL01TXFxuY2FsbGlncmFwaGVyL1NNXFxuY2FsbGlncmFwaGljXFxuY2FsbGlncmFwaGlzdC9NU1xcbmNhbGxpZ3JhcGh5L01cXG5jYWxsaW5nL1NNXFxuY2FsbGlvcGUvTVNcXG5jYWxsb3NpdHkvU01cXG5jYWxsb3VzL1BHRFNZXFxuY2FsbG91c25lc3MvTVxcbmNhbGxvdy9SUFRcXG5jYWxsb3duZXNzL01cXG5jYWxsdXMvTURTR1xcbmNhbG0vUFNUR01EUllcXG5jYWxtbmVzcy9NXFxuY2Fsb3JpY1xcbmNhbG9yaWUvTVNcXG5jYWxvcmlmaWNcXG5jYWx1bWV0L01TXFxuY2FsdW1uaWF0ZS9HTkRTXFxuY2FsdW1uaWF0aW9uL01cXG5jYWx1bW5pYXRvci9NU1xcbmNhbHVtbmlvdXNcXG5jYWx1bW55L1NNXFxuY2FsdmUvR0RTXFxuY2FseXBzby9NU1xcbmNhbHl4L01TXFxuY2FtL1NNXFxuY2FtYXJhZGVyaWUvTVxcbmNhbWJlci9NRFNHXFxuY2FtYmlhbFxcbmNhbWJpdW0vU01cXG5jYW1icmljL01cXG5jYW1jb3JkZXIvU01cXG5jYW1lXFxuY2FtZWwvTVNcXG5jYW1lbGhhaXJcXG5jYW1lbGxpYS9NU1xcbmNhbWVvL01TXFxuY2FtZXJhL01TXFxuY2FtZXJhbWFuL01cXG5jYW1lcmFtZW5cXG5jYW1lcmFwZW9wbGVcXG5jYW1lcmFwZXJzb25cXG5jYW1lcmF3b21hbi9NXFxuY2FtZXJhd29tZW5cXG5jYW1lcmF3b3JrXFxuY2FtaWtuaWNrZXJzXFxuY2FtaXNvbGUvU01cXG5jYW1vdWZsYWdlL01aR0RSU1xcbmNhbW91ZmxhZ2VyL01cXG5jYW1wJ3NcXG5jYW1wL0NTR0RcXG5jYW1wYWlnbi9TTURSWkdcXG5jYW1wYWlnbmVyL01cXG5jYW1wYW5pbGUvU01cXG5jYW1wYW5vbG9naXN0L01TXFxuY2FtcGFub2xvZ3kvTVxcbmNhbXBlci9NU1xcbmNhbXBmaXJlL1NNXFxuY2FtcGdyb3VuZC9TTVxcbmNhbXBob3IvTVxcbmNhbXBpbmcvTVxcbmNhbXBzaXRlL1NNXFxuY2FtcHVzL01TXFxuY2FtcHkvVFJcXG5jYW1zaGFmdC9TTVxcbmNhbid0XFxuY2FuL1NNRFJaR1xcbmNhbmFsL01TXFxuY2FuYWxpemF0aW9uL01cXG5jYW5hbGl6ZS9HRFNcXG5jYW5hcGUvTVNcXG5jYW5hcmQvTVNcXG5jYW5hcnkvU01cXG5jYW5hc3RhL01cXG5jYW5jYW4vTVNcXG5jYW5jZWwvRFJTWkdcXG5jYW5jZWxlci9NXFxuY2FuY2VsbGF0aW9uL1NNXFxuY2FuY2Vsb3VzXFxuY2FuY2VyL01TXFxuY2FuY2Vyb3VzXFxuY2FuZGVsYWJyYS9TTVxcbmNhbmRlbGFicnVtL01cXG5jYW5kaWQvWVBcXG5jYW5kaWRhXFxuY2FuZGlkYWN5L1NNXFxuY2FuZGlkYXRlL01TXFxuY2FuZGlkYXR1cmUvU01cXG5jYW5kaWRuZXNzL01cXG5jYW5kbGUvTVpHRFJTXFxuY2FuZGxlbGlnaHQvTVxcbmNhbmRsZWxpdFxcbmNhbmRsZXBvd2VyL01cXG5jYW5kbGVyL01cXG5jYW5kbGVzdGljay9NU1xcbmNhbmRsZXdpY2svU01cXG5jYW5kb3IvTVxcbmNhbmR5L0dEU01cXG5jYW5keWZsb3NzXFxuY2FuZS9TTVxcbmNhbmVicmFrZS9NU1xcbmNhbmVyL01cXG5jYW5pbmUvTVNcXG5jYW5pc3Rlci9TTVxcbmNhbmtlci9HTURTXFxuY2Fua2Vyb3VzXFxuY2FubmFiaXMvTVNcXG5jYW5uZWRcXG5jYW5uZWxsb25pL01cXG5jYW5uZXJ5L1NNXFxuY2FubmliYWwvU01cXG5jYW5uaWJhbGlzbS9NXFxuY2FubmliYWxpc3RpY1xcbmNhbm5pYmFsaXphdGlvbi9NXFxuY2FubmliYWxpemUvR0RTXFxuY2FubmlseS9VXFxuY2FubmluZXNzL01cXG5jYW5uaW5nXFxuY2Fubm9uL0dNRFNcXG5jYW5ub25hZGUvTUdEU1xcbmNhbm5vbmJhbGwvU01cXG5jYW5ub3RcXG5jYW5ueS9VVFJcXG5jYW5vZS9NRFNcXG5jYW5vZWluZ1xcbmNhbm9laXN0L1NNXFxuY2Fub2xhL01cXG5jYW5vbi9NU1xcbmNhbm9uaWNhbC9ZXFxuY2Fub25pemF0aW9uL1NNXFxuY2Fub25pemUvRFNHXFxuY2Fub29kbGUvRFNHXFxuY2Fub3B5L0dEU01cXG5jYW5zdFxcbmNhbnQnc1xcbmNhbnQvQ1pSREdTXFxuY2FudGFiaWxlXFxuY2FudGFsb3VwZS9TTVxcbmNhbnRhbmtlcm91cy9QWVxcbmNhbnRhbmtlcm91c25lc3MvTVxcbmNhbnRhdGEvTVNcXG5jYW50ZWVuL01TXFxuY2FudGVyL0NNXFxuY2FudGVyZWRcXG5jYW50ZXJpbmdcXG5jYW50aWNsZS9NU1xcbmNhbnRpbGV2ZXIvTURHU1xcbmNhbnRvL01TXFxuY2FudG9uL01MU1xcbmNhbnRvbmFsXFxuY2FudG9ubWVudC9NU1xcbmNhbnRvci9NU1xcbmNhbnZhcy9NR0RTXFxuY2FudmFzYmFjay9TTVxcbmNhbnZhc3MvTURSU1pHXFxuY2FudmFzc2VyL01cXG5jYW55b24vTUdTXFxuY2FwL1NNRFJCWlxcbmNhcGFiaWxpdGllc1xcbmNhcGFiaWxpdHkvSU1cXG5jYXBhYmxlL0lcXG5jYXBhYmx5L0lcXG5jYXBhY2lvdXMvUFlcXG5jYXBhY2lvdXNuZXNzL01cXG5jYXBhY2l0YW5jZS9NXFxuY2FwYWNpdGllc1xcbmNhcGFjaXRvci9TTVxcbmNhcGFjaXR5L0lNXFxuY2FwYXJpc29uL01ER1NcXG5jYXBlL1NNXFxuY2FwZXIvR01EXFxuY2FwZXNraW4vTVxcbmNhcGlsbGFyaXR5L01cXG5jYXBpbGxhcnkvU01cXG5jYXBpdGFsL01TWVxcbmNhcGl0YWxpc20vTVxcbmNhcGl0YWxpc3QvU01cXG5jYXBpdGFsaXN0aWNcXG5jYXBpdGFsaXN0aWNhbGx5XFxuY2FwaXRhbGl6YXRpb24vTVxcbmNhcGl0YWxpemUvQURTR1xcbmNhcGl0YXRpb24vQ1NNXFxuY2FwaXRvbC9TTVxcbmNhcGl0dWxhdGUvQURTWEdOXFxuY2FwaXR1bGF0aW9uL0FNXFxuY2FwbGV0L01TXFxuY2Fwby9TTVxcbmNhcG9uL01TXFxuY2FwcGVkL1VBXFxuY2FwcGluZy9VQVxcbmNhcHB1Y2Npbm8vU01cXG5jYXByaWNlL1NNXFxuY2FwcmljaW91cy9QWVxcbmNhcHJpY2lvdXNuZXNzL01cXG5jYXBzaWN1bS9TTVxcbmNhcHNpemUvRFNHXFxuY2Fwc3Rhbi9TTVxcbmNhcHN0b25lL01TXFxuY2Fwc3VsYXJcXG5jYXBzdWxlL0RTTUdcXG5jYXBzdWxpemUvRFNHXFxuY2FwdFxcbmNhcHRhaW4vU01ER1xcbmNhcHRhaW5jeS9TTVxcbmNhcHRpb24vU01ER1xcbmNhcHRpb3VzL1lQXFxuY2FwdGlvdXNuZXNzL01cXG5jYXB0aXZhdGUvRFNHTlxcbmNhcHRpdmF0aW9uL01cXG5jYXB0aXZhdG9yL1NNXFxuY2FwdGl2ZS9TTVxcbmNhcHRpdml0eS9TTVxcbmNhcHRvci9NU1xcbmNhcHR1cmUvQURTTUdcXG5jYXIvU01EUlpHXFxuY2FyYWZlL01TXFxuY2FyYW1lbC9TTVxcbmNhcmFtZWxpemUvRFNHXFxuY2FyYXBhY2UvU01cXG5jYXJhdC9NU1xcbmNhcmF2YW4vU01cXG5jYXJhdmFuc2FyeS9TTVxcbmNhcmF2ZWwvU01cXG5jYXJhd2F5L1NNXFxuY2FyYmlkZS9TTVxcbmNhcmJpbmUvU01cXG5jYXJib2h5ZHJhdGUvU01cXG5jYXJib2xpY1xcbmNhcmJvbi9NU1xcbmNhcmJvbmFjZW91c1xcbmNhcmJvbmF0ZS9NR05EU1xcbmNhcmJvbmF0aW9uL01cXG5jYXJib25pZmVyb3VzXFxuY2FyYm9uaXplL0dEU1xcbmNhcmJvcnVuZHVtL01cXG5jYXJib3kvTVNcXG5jYXJic1xcbmNhcmJ1bmNsZS9TTVxcbmNhcmJ1bmN1bGFyXFxuY2FyYnVyZXRvci9TTVxcbmNhcmNhc3MvTVNcXG5jYXJjaW5vZ2VuL1NNXFxuY2FyY2lub2dlbmljL01TXFxuY2FyY2lub2dlbmljaXR5L01cXG5jYXJjaW5vbWEvTVNcXG5jYXJkL0VTR01EXFxuY2FyZGFtb20vU01cXG5jYXJkYW1vbi9TXFxuY2FyZGJvYXJkL01cXG5jYXJkZXIvTVNcXG5jYXJkaG9sZGVyL1NcXG5jYXJkaWFjXFxuY2FyZGllL1NcXG5jYXJkaWdhbi9TTVxcbmNhcmRpbmFsL1NNWVxcbmNhcmRpb1xcbmNhcmRpb2dyYW0vU01cXG5jYXJkaW9ncmFwaC9NXFxuY2FyZGlvZ3JhcGhzXFxuY2FyZGlvbG9naXN0L01TXFxuY2FyZGlvbG9neS9NXFxuY2FyZGlvbXlvcGF0aHlcXG5jYXJkaW9wdWxtb25hcnlcXG5jYXJkaW92YXNjdWxhclxcbmNhcmRzaGFycC9NUlpTXFxuY2FyZHNoYXJwZXIvTVxcbmNhcmUvU01cXG5jYXJlZW4vREdTXFxuY2FyZWVyL01ER1NcXG5jYXJlZXJpc21cXG5jYXJlZXJpc3QvU01cXG5jYXJlZnJlZVxcbmNhcmVmdWwvWVBcXG5jYXJlZnVsbGVyXFxuY2FyZWZ1bGxlc3RcXG5jYXJlZnVsbmVzcy9NXFxuY2FyZWdpdmVyL1NNXFxuY2FyZWxlc3MvUFlcXG5jYXJlbGVzc25lc3MvTVxcbmNhcmVyL01cXG5jYXJlc3MvTURTR1xcbmNhcmV0L01TXFxuY2FyZXRha2VyL01TXFxuY2FyZXdvcm5cXG5jYXJmYXJlL01cXG5jYXJnby9NXFxuY2FyZ29lc1xcbmNhcmhvcC9NU1xcbmNhcmlib3UvU01cXG5jYXJpY2F0dXJlL01HRFNcXG5jYXJpY2F0dXJpc3QvU01cXG5jYXJpZXMvTVxcbmNhcmlsbG9uL1NNXFxuY2FyaW5nL01cXG5jYXJpb3VzXFxuY2FyamFjay9KU0RSWkdcXG5jYXJqYWNrZXIvTVxcbmNhcmphY2tpbmcvTVxcbmNhcmxvYWQvU01cXG5jYXJtYWtlci9TXFxuY2FybWluZS9TTVxcbmNhcm5hZ2UvTVxcbmNhcm5hbC9ZXFxuY2FybmFsaXR5L01cXG5jYXJuYXRpb24vSU1TXFxuY2FybmVsaWFuL01TXFxuY2Fybml2YWwvTVNcXG5jYXJuaXZvcmFcXG5jYXJuaXZvcmUvU01cXG5jYXJuaXZvcm91cy9QWVxcbmNhcm5pdm9yb3VzbmVzcy9NXFxuY2FybnkvU01cXG5jYXJvYi9NU1xcbmNhcm9sL1pHTURSU1xcbmNhcm9sZXIvTVxcbmNhcm9tL0dNRFNcXG5jYXJvdGVuZS9NXFxuY2Fyb3RpZC9TTVxcbmNhcm91c2FsL1NNXFxuY2Fyb3VzZS9EUlNNWkdcXG5jYXJvdXNlbC9TTVxcbmNhcm91c2VyL01cXG5jYXJwL1NaR01EUlxcbmNhcnBhbC9NU1xcbmNhcnBlbC9NU1xcbmNhcnBlbnRlci9NREdTXFxuY2FycGVudHJ5L01cXG5jYXJwZXIvTVxcbmNhcnBldC9NREdTXFxuY2FycGV0YmFnL01TXFxuY2FycGV0YmFnZ2VkXFxuY2FycGV0YmFnZ2VyL01TXFxuY2FycGV0YmFnZ2luZ1xcbmNhcnBldGluZy9NXFxuY2FycGlcXG5jYXJwb29sL1NNREdcXG5jYXJwb3J0L1NNXFxuY2FycHVzL01cXG5jYXJyZWwvTVNcXG5jYXJyaWFnZS9TTVxcbmNhcnJpYWdld2F5L1NcXG5jYXJyaWVyL01cXG5jYXJyaW9uL01cXG5jYXJyb3QvTVNcXG5jYXJyb3R5XFxuY2FycnkvWkdEUlNNXFxuY2FycnlhbGwvU01cXG5jYXJyeWNvdC9TXFxuY2FycnlvdXRcXG5jYXJyeW92ZXIvTVNcXG5jYXJzaWNrL1BcXG5jYXJzaWNrbmVzcy9NXFxuY2FydC9TWkdNRFJcXG5jYXJ0YWdlL01cXG5jYXJ0ZWwvTVNcXG5jYXJ0ZXIvTVxcbmNhcnRob3JzZS9TTVxcbmNhcnRpbGFnZS9TTVxcbmNhcnRpbGFnaW5vdXNcXG5jYXJ0bG9hZC9TTVxcbmNhcnRvZ3JhcGhlci9TTVxcbmNhcnRvZ3JhcGhpY1xcbmNhcnRvZ3JhcGh5L01cXG5jYXJ0b24vTVNcXG5jYXJ0b29uL1NNREdcXG5jYXJ0b29uaXN0L01TXFxuY2FydHJpZGdlL01TXFxuY2FydHdoZWVsL0dNRFNcXG5jYXJ2ZS9KWkdEUlNcXG5jYXJ2ZXIvTVxcbmNhcnZlcnkvU1xcbmNhcnZpbmcvTVxcbmNhcnlhdGlkL01TXFxuY2FzYWJhL01TXFxuY2FzY2FkZS9EU01HXFxuY2FzY2FyYS9TTVxcbmNhc2UvTERTSk1HXFxuY2FzZWJvb2svU1xcbmNhc2VkL1VcXG5jYXNlaGFyZGVuL0RHU1xcbmNhc2Vpbi9NXFxuY2FzZWxvYWQvTVNcXG5jYXNlbWVudC9NU1xcbmNhc2V3b3JrL1pNUlxcbmNhc2V3b3JrZXIvTVxcbmNhc2gvR01EU1xcbmNhc2hiYWNrL01cXG5jYXNoYm9vay9NU1xcbmNhc2hldy9NU1xcbmNhc2hpZXIvR1NNRFxcbmNhc2hsZXNzXFxuY2FzaG1lcmUvTVxcbmNhc2luZy9NXFxuY2FzaW5vL01TXFxuY2Fzay9TTVxcbmNhc2tldC9NU1xcbmNhc3NhdmEvU01cXG5jYXNzZXJvbGUvRFNNR1xcbmNhc3NldHRlL01TXFxuY2Fzc2lhL01TXFxuY2Fzc29jay9TTVxcbmNhc3Nvd2FyeS9TTVxcbmNhc3QvQVNHTVxcbmNhc3RhbmV0L01TXFxuY2FzdGF3YXkvTVNcXG5jYXN0ZS9KTVpSU1xcbmNhc3RlbGxhdGVkXFxuY2FzdGVyL01cXG5jYXN0aWdhdGUvRFNHTlxcbmNhc3RpZ2F0aW9uL01cXG5jYXN0aWdhdG9yL1NNXFxuY2FzdGluZy9BTVxcbmNhc3RsZS9NR0RTXFxuY2FzdG9mZi9TTVxcbmNhc3Rvci9NU1xcbmNhc3RyYXRlL0dOWERTXFxuY2FzdHJhdGlvbi9NXFxuY2FzdWFsL1BNWVNcXG5jYXN1YWxuZXNzL01cXG5jYXN1YWx0eS9TTVxcbmNhc3Vpc3QvU01cXG5jYXN1aXN0aWNcXG5jYXN1aXN0cnkvTVxcbmNhdC9TTVxcbmNhdGFjbHlzbS9NU1xcbmNhdGFjbHlzbWFsXFxuY2F0YWNseXNtaWNcXG5jYXRhY29tYi9TTVxcbmNhdGFmYWxxdWUvTVNcXG5jYXRhbGVwc3kvTVxcbmNhdGFsZXB0aWMvTVNcXG5jYXRhbG9nL1pHU01EUlxcbmNhdGFsb2dlci9NXFxuY2F0YWxwYS9TTVxcbmNhdGFseXNlc1xcbmNhdGFseXNpcy9NXFxuY2F0YWx5c3QvTVNcXG5jYXRhbHl0aWMvTVxcbmNhdGFseXplL0dEU1xcbmNhdGFtYXJhbi9TTVxcbmNhdGFwdWx0L0dNRFNcXG5jYXRhcmFjdC9NU1xcbmNhdGFycmgvTVxcbmNhdGFzdHJvcGhlL01TXFxuY2F0YXN0cm9waGljXFxuY2F0YXN0cm9waGljYWxseVxcbmNhdGF0b25pYS9NXFxuY2F0YXRvbmljL1NNXFxuY2F0YmlyZC9TTVxcbmNhdGJvYXQvU01cXG5jYXRjYWxsL0dTTURcXG5jYXRjaC9aR0pMTVJTXFxuY2F0Y2hhbGwvTVNcXG5jYXRjaGVyL01cXG5jYXRjaG1lbnQvTVNcXG5jYXRjaHBlbm55XFxuY2F0Y2hwaHJhc2UvU01cXG5jYXRjaHdvcmQvTVNcXG5jYXRjaHkvUlRcXG5jYXRlY2hpc20vU01cXG5jYXRlY2hpc3QvU01cXG5jYXRlY2hpemUvRFNHXFxuY2F0ZWdvcmljYWwvWVxcbmNhdGVnb3JpemF0aW9uL01TXFxuY2F0ZWdvcml6ZS9HRFNcXG5jYXRlZ29yeS9TTVxcbmNhdGVyL1pHSkRSU1xcbmNhdGVyY29ybmVyXFxuY2F0ZXJlci9NXFxuY2F0ZXJwaWxsYXIvTVNcXG5jYXRlcndhdWwvU01ER1xcbmNhdGZpc2gvTVNcXG5jYXRndXQvTVxcbmNhdGhhcnNlc1xcbmNhdGhhcnNpcy9NXFxuY2F0aGFydGljL1NNXFxuY2F0aGVkcmFsL1NNXFxuY2F0aGV0ZXIvU01cXG5jYXRoZXRlcml6ZS9EU0dcXG5jYXRob2RlL1NNXFxuY2F0aG9kaWNcXG5jYXRob2xpY1xcbmNhdGhvbGljaXR5L01cXG5jYXRpb24vTVNcXG5jYXRraW4vTVNcXG5jYXRsaWtlXFxuY2F0bmFwL01TXFxuY2F0bmFwcGVkXFxuY2F0bmFwcGluZ1xcbmNhdG5pcC9NXFxuY2F0c3VpdC9TXFxuY2F0dGFpbC9TTVxcbmNhdHRlZFxcbmNhdHRlcnkvU1xcbmNhdHRpbHlcXG5jYXR0aW5lc3MvTVxcbmNhdHRpbmdcXG5jYXR0bGUvTVxcbmNhdHRsZW1hbi9NXFxuY2F0dGxlbWVuXFxuY2F0dHkvVFBSXFxuY2F0d2Fsay9TTVxcbmNhdWN1cy9NRFNHXFxuY2F1ZGFsL1lcXG5jYXVnaHQvVVxcbmNhdWxkcm9uL01TXFxuY2F1bGlmbG93ZXIvU01cXG5jYXVsay9aR01EUlNcXG5jYXVsa2VyL01cXG5jYXVzYWwvWVxcbmNhdXNhbGl0eS9TTVxcbmNhdXNhdGlvbi9NXFxuY2F1c2F0aXZlXFxuY2F1c2UvTVpHRFJTXFxuY2F1c2VsZXNzXFxuY2F1c2VyL01cXG5jYXVzZXJpZS9TTVxcbmNhdXNld2F5L1NNXFxuY2F1c3RpYy9TTVxcbmNhdXN0aWNhbGx5XFxuY2F1c3RpY2l0eS9NXFxuY2F1dGVyaXphdGlvbi9NXFxuY2F1dGVyaXplL0dEU1xcbmNhdXRpb24vU01ER1xcbmNhdXRpb25hcnlcXG5jYXV0aW91cy9JWVxcbmNhdXRpb3VzbmVzcy9NXFxuY2F2YWxjYWRlL01TXFxuY2F2YWxpZXIvU01ZXFxuY2F2YWxyeS9TTVxcbmNhdmFscnltYW4vTVxcbmNhdmFscnltZW5cXG5jYXZlL0RSU01aR1xcbmNhdmVhdC9NU1xcbmNhdmVtYW4vTVxcbmNhdmVtZW5cXG5jYXZlcm4vTVNcXG5jYXZlcm5vdXMvWVxcbmNhdmlhci9NXFxuY2F2aWwvWkdKTURSU1xcbmNhdmlsZXIvTVxcbmNhdmluZy9NXFxuY2F2aXRhdGlvblxcbmNhdml0eS9GU01cXG5jYXZvcnQvREdTXFxuY2F3L1NNREdcXG5jYXkvQ1NNXFxuY2F5ZW5uZS9NXFxuY2F5dXNlL01TXFxuY2NcXG5jZWFzZS9DTUdEU1xcbmNlYXNlZmlyZS9NU1xcbmNlYXNlbGVzcy9ZUFxcbmNlYXNlbGVzc25lc3MvTVxcbmNlY2FcXG5jZWNhbFxcbmNlY3VtL01cXG5jZWRhci9NU1xcbmNlZGUvRkFHU0RcXG5jZWRlci9NU1xcbmNlZGlsbGEvU01cXG5jZWlsaWRoXFxuY2VpbGlkaHNcXG5jZWlsaW5nL01TXFxuY2VsYW5kaW5lL01cXG5jZWxlYi9TXFxuY2VsZWJyYW50L1NNXFxuY2VsZWJyYXRlL0RTR05YXFxuY2VsZWJyYXRpb24vTVxcbmNlbGVicmF0b3IvU01cXG5jZWxlYnJhdG9yeVxcbmNlbGVicml0eS9TTVxcbmNlbGVyaWFjXFxuY2VsZXJpdHkvTVxcbmNlbGVyeS9NXFxuY2VsZXN0YS9NU1xcbmNlbGVzdGlhbC9ZXFxuY2VsaWJhY3kvTVxcbmNlbGliYXRlL01TXFxuY2VsbC9TTURcXG5jZWxsYXIvTVNcXG5jZWxsaXN0L1NNXFxuY2VsbG1hdGUvU01cXG5jZWxsby9NU1xcbmNlbGxvcGhhbmUvTVxcbmNlbGxwaG9uZS9NU1xcbmNlbGx1bGFyL1NNXFxuY2VsbHVsaXRlL01cXG5jZWxsdWxpdGlzXFxuY2VsbHVsb2lkL01cXG5jZWxsdWxvc2UvTVxcbmNlbWVudC9NRFJaR1NcXG5jZW1lbnRlci9NXFxuY2VtZW50dW0vTVxcbmNlbWV0ZXJ5L1NNXFxuY2Vub2JpdGUvTVNcXG5jZW5vYml0aWNcXG5jZW5vdGFwaC9NXFxuY2Vub3RhcGhzXFxuY2Vuc2VyL01TXFxuY2Vuc29yL01ER1NcXG5jZW5zb3JlZC9VXFxuY2Vuc29yaWFsXFxuY2Vuc29yaW91cy9QWVxcbmNlbnNvcmlvdXNuZXNzL01cXG5jZW5zb3JzaGlwL01cXG5jZW5zdXJlL0JEUlNNWkdcXG5jZW5zdXJlci9NXFxuY2Vuc3VzL01EU0dcXG5jZW50L1NaTVJcXG5jZW50YXVyL1NNXFxuY2VudGF2by9TTVxcbmNlbnRlbmFyaWFuL01TXFxuY2VudGVuYXJ5L1NNXFxuY2VudGVubmlhbC9NWVNcXG5jZW50ZXIvTURHXFxuY2VudGVyYm9hcmQvU01cXG5jZW50ZXJmb2xkL01TXFxuY2VudGVycGllY2UvTVNcXG5jZW50aWdyYWRlXFxuY2VudGlncmFtL1NNXFxuY2VudGlsaXRlci9NU1xcbmNlbnRpbWUvU01cXG5jZW50aW1ldGVyL01TXFxuY2VudGlwZWRlL1NNXFxuY2VudHJhbC9TTVlcXG5jZW50cmFsaXNtXFxuY2VudHJhbGlzdFxcbmNlbnRyYWxpdHkvTVxcbmNlbnRyYWxpemF0aW9uL0NNXFxuY2VudHJhbGl6ZS9DR0RTXFxuY2VudHJhbGl6ZXIvTVNcXG5jZW50cmlmdWdhbC9ZXFxuY2VudHJpZnVnZS9EU01HXFxuY2VudHJpcGV0YWwvWVxcbmNlbnRyaXNtL01cXG5jZW50cmlzdC9NU1xcbmNlbnR1cmlvbi9TTVxcbmNlbnR1cnkvU01cXG5jZXBoYWxpY1xcbmNlcmFtaWMvU01cXG5jZXJhbWljaXN0L1NNXFxuY2VyYW1pY3MvTVxcbmNlcmFtaXN0L01TXFxuY2VyZWFsL01TXFxuY2VyZWJlbGxhclxcbmNlcmViZWxsdW0vU01cXG5jZXJlYnJhXFxuY2VyZWJyYWxcXG5jZXJlYnJhdGUvR05EU1xcbmNlcmVicmF0aW9uL01cXG5jZXJlYnJvdmFzY3VsYXJcXG5jZXJlYnJ1bS9NU1xcbmNlcmVtZW50L01TXFxuY2VyZW1vbmlhbC9TTVlcXG5jZXJlbW9uaW91cy9VWVxcbmNlcmVtb25pb3VzbmVzcy9NXFxuY2VyZW1vbnkvU01cXG5jZXJpc2UvTVxcbmNlcml1bS9NXFxuY2VybWV0L01cXG5jZXJ0L1NcXG5jZXJ0YWluL1VZXFxuY2VydGFpbnR5L1VTTVxcbmNlcnRpZmlhYmxlXFxuY2VydGlmaWFibHlcXG5jZXJ0aWZpY2F0ZS9NR05YRFNcXG5jZXJ0aWZpY2F0aW9uL01cXG5jZXJ0aWZ5L0RTR1xcbmNlcnRpdHVkZS9JTVxcbmNlcnRpdHVkZXNcXG5jZXJ1bGVhbi9NXFxuY2VydmljYWxcXG5jZXJ2aWNlc1xcbmNlcnZpeC9NXFxuY2VzYXJlYW4vTVNcXG5jZXNpdW0vTVxcbmNlc3NhdGlvbi9NU1xcbmNlc3Npb24vS0FGU01cXG5jZXNzcGl0L1NcXG5jZXNzcG9vbC9NU1xcbmNldGFjZWFuL01TXFxuY2V0ZXJpc1xcbmNmXFxuY2dcXG5jaC9JRlZUXFxuY2hhZC9TXFxuY2hhZmUvR0RTXFxuY2hhZmYvR01EU1xcbmNoYWZmaW5jaC9NU1xcbmNoYWdyaW4vR1NNRFxcbmNoYWluJ3NcXG5jaGFpbi9VR0RTXFxuY2hhaW5zYXcvTURHU1xcbmNoYWlyL0dNRFNcXG5jaGFpcmxpZnQvTVNcXG5jaGFpcm1hbi9NXFxuY2hhaXJtYW5zaGlwL1NNXFxuY2hhaXJtZW5cXG5jaGFpcnBlcnNvbi9TTVxcbmNoYWlyd29tYW4vTVxcbmNoYWlyd29tZW5cXG5jaGFpc2UvTVNcXG5jaGFsY2Vkb255L01cXG5jaGFsZXQvTVNcXG5jaGFsaWNlL1NNXFxuY2hhbGsvR01EU1xcbmNoYWxrYm9hcmQvU01cXG5jaGFsa2luZXNzL01cXG5jaGFsa3kvUFJUXFxuY2hhbGxlbmdlL0RSU01aR1xcbmNoYWxsZW5nZWQvVVxcbmNoYWxsZW5nZXIvTVxcbmNoYWxsaXMvTVxcbmNoYW1iZXIvU01EXFxuY2hhbWJlcmxhaW4vTVNcXG5jaGFtYmVybWFpZC9NU1xcbmNoYW1icmF5L01cXG5jaGFtZWxlb24vU01cXG5jaGFtb2lzL01cXG5jaGFtb21pbGUvTVNcXG5jaGFtcC9aR01EU1xcbmNoYW1wYWduZS9NU1xcbmNoYW1waW9uL0dNRFNcXG5jaGFtcGlvbnNoaXAvTVNcXG5jaGFuY2UvTUdEU1xcbmNoYW5jZWwvU01cXG5jaGFuY2VsbGVyeS9TTVxcbmNoYW5jZWxsb3IvTVNcXG5jaGFuY2VsbG9yc2hpcC9NXFxuY2hhbmNlcnkvU01cXG5jaGFuY2luZXNzL01cXG5jaGFuY3JlL1NNXFxuY2hhbmN5L1BSVFxcbmNoYW5kZWxpZXIvU01cXG5jaGFuZGxlci9NU1xcbmNoYW5nZS9NWkdEUlNcXG5jaGFuZ2VhYmlsaXR5L01cXG5jaGFuZ2VhYmxlL1BcXG5jaGFuZ2VhYmxlbmVzcy9NXFxuY2hhbmdlYWJseVxcbmNoYW5nZWQvVVxcbmNoYW5nZWxlc3MvWVxcbmNoYW5nZWxpbmcvU01cXG5jaGFuZ2VvdmVyL1NNXFxuY2hhbmdlci9NXFxuY2hhbmdpbmcvVVxcbmNoYW5uZWwvR1NNRFxcbmNoYW5uZWxpemF0aW9uL01cXG5jaGFubmVsaXplL0RTR1xcbmNoYW5zb24vU01cXG5jaGFudC9aR01EUlNcXG5jaGFudGVyL01cXG5jaGFudGV1c2UvTVNcXG5jaGFudGV5L1NNXFxuY2hhbnRpY2xlZXIvTVNcXG5jaGFvcy9NXFxuY2hhb3RpY1xcbmNoYW90aWNhbGx5XFxuY2hhcC9TTVxcbmNoYXBhcnJhbC9TTVxcbmNoYXBhdGkvU1xcbmNoYXBhdHRpL1NcXG5jaGFwYm9vay9NU1xcbmNoYXBlYXUvU01cXG5jaGFwZWwvTVNcXG5jaGFwZXJvbi9NREdTXFxuY2hhcGVyb25hZ2UvTVxcbmNoYXBlcm9uZWQvVVxcbmNoYXBsYWluL01TXFxuY2hhcGxhaW5jeS9TTVxcbmNoYXBsZXQvU01cXG5jaGFwcGVkXFxuY2hhcHBpbmdcXG5jaGFwcHkvU1xcbmNoYXB0ZXIvU01cXG5jaGFyL1NNXFxuY2hhcmFiYW5jL01TXFxuY2hhcmFjdGVyL01TXFxuY2hhcmFjdGVyZnVsXFxuY2hhcmFjdGVyaXN0aWMvU01cXG5jaGFyYWN0ZXJpc3RpY2FsbHkvVVxcbmNoYXJhY3Rlcml6YXRpb24vTVNcXG5jaGFyYWN0ZXJpemUvRFNHXFxuY2hhcmFjdGVybGVzc1xcbmNoYXJhZGUvU01cXG5jaGFyYnJvaWwvR0RTXFxuY2hhcmNvYWwvTVNcXG5jaGFyZC9NXFxuY2hhcmRvbm5heS9TTVxcbmNoYXJnZS9BRVNER01cXG5jaGFyZ2VhYmxlL0FcXG5jaGFyZ2VkL1VcXG5jaGFyZ2VyL1NNXFxuY2hhcmlseVxcbmNoYXJpbmVzcy9NXFxuY2hhcmlvdC9TTVxcbmNoYXJpb3RlZXIvTVNcXG5jaGFyaXNtYS9NXFxuY2hhcmlzbWF0aWMvTVNcXG5jaGFyaXRhYmxlL1BcXG5jaGFyaXRhYmxlbmVzcy9NXFxuY2hhcml0YWJseS9VXFxuY2hhcml0eS9TTVxcbmNoYXJsYWR5L1NcXG5jaGFybGF0YW4vU01cXG5jaGFybGF0YW5pc20vTVxcbmNoYXJsYXRhbnJ5L01cXG5jaGFybGllL1NcXG5jaGFybS9aR01EUlNcXG5jaGFybWVyL01cXG5jaGFybWluZy9ZXFxuY2hhcm1sZXNzXFxuY2hhcnJlZFxcbmNoYXJyaW5nXFxuY2hhcnQvR01EU1xcbmNoYXJ0ZWQvVVxcbmNoYXJ0ZXInc1xcbmNoYXJ0ZXIvQVNHRFxcbmNoYXJ0ZXJlci9NU1xcbmNoYXJ0cmV1c2UvTVxcbmNoYXJ3b21hbi9NXFxuY2hhcndvbWVuXFxuY2hhcnkvVFJQXFxuY2hhc2UvTVpHRFJTXFxuY2hhc2VyL01cXG5jaGFzbS9NU1xcbmNoYXNzaXMvTVxcbmNoYXN0ZS9QWVRSXFxuY2hhc3Rlbi9ER1NcXG5jaGFzdGVuZXNzL01cXG5jaGFzdGlzZS9EUlNaR0xcXG5jaGFzdGlzZW1lbnQvU01cXG5jaGFzdGlzZXIvTVxcbmNoYXN0aXR5L01cXG5jaGFzdWJsZS9TTVxcbmNoYXQvU01cXG5jaGF0ZWF1L1NNXFxuY2hhdGVhdXhcXG5jaGF0ZWxhaW5lL1NNXFxuY2hhdGxpbmUvU1xcbmNoYXRyb29tL01cXG5jaGF0dGVkXFxuY2hhdHRlbC9NU1xcbmNoYXR0ZXIvTURSWkdTXFxuY2hhdHRlcmJveC9NU1xcbmNoYXR0ZXJlci9NXFxuY2hhdHRpbHlcXG5jaGF0dGluZXNzL01cXG5jaGF0dGluZ1xcbmNoYXR0eS9UUFJcXG5jaGF1ZmZldXIvR01EU1xcbmNoYXV2aW5pc20vTVxcbmNoYXV2aW5pc3QvU01cXG5jaGF1dmluaXN0aWNcXG5jaGF1dmluaXN0aWNhbGx5XFxuY2hlYXAvUFhUTlJZXFxuY2hlYXBlbi9ER1xcbmNoZWFwbmVzcy9NXFxuY2hlYXBvXFxuY2hlYXBza2F0ZS9NU1xcbmNoZWF0L1pHTURSU1xcbmNoZWF0ZXIvTVxcbmNoZWNrL0FHTURTXFxuY2hlY2tib29rL1NNXFxuY2hlY2tib3hcXG5jaGVja2VkL1VcXG5jaGVja2VyL01ER1NcXG5jaGVja2VyYm9hcmQvU01cXG5jaGVja2Vycy9NXFxuY2hlY2tsaXN0L01TXFxuY2hlY2ttYXRlL01HRFNcXG5jaGVja29mZi9TTVxcbmNoZWNrb3V0L1NNXFxuY2hlY2twb2ludC9TTVxcbmNoZWNrcm9vbS9NU1xcbmNoZWNrc3VtXFxuY2hlY2t1cC9NU1xcbmNoZWRkYXIvTVxcbmNoZWVrL0dNRFNcXG5jaGVla2JvbmUvU01cXG5jaGVla2lseVxcbmNoZWVraW5lc3MvTVxcbmNoZWVreS9UUFJcXG5jaGVlcC9HTURTXFxuY2hlZXIvWkdNRFJTXFxuY2hlZXJlci9NXFxuY2hlZXJmdWwvWVBcXG5jaGVlcmZ1bGxlclxcbmNoZWVyZnVsbGVzdFxcbmNoZWVyZnVsbmVzcy9NXFxuY2hlZXJpbHlcXG5jaGVlcmluZXNzL01cXG5jaGVlcmlvL01TXFxuY2hlZXJsZWFkZXIvU01cXG5jaGVlcmxlc3MvUFlcXG5jaGVlcmxlc3NuZXNzL01cXG5jaGVlcnkvVFBSXFxuY2hlZXNlL01HRFNcXG5jaGVlc2Vib2FyZC9TXFxuY2hlZXNlYnVyZ2VyL1NNXFxuY2hlZXNlY2FrZS9TTVxcbmNoZWVzZWNsb3RoL01cXG5jaGVlc2VwYXJpbmcvTVxcbmNoZWVzaW5lc3MvTVxcbmNoZWVzeS9UUFJcXG5jaGVldGFoL01cXG5jaGVldGFoc1xcbmNoZWYvU01cXG5jaGVtXFxuY2hlbWljYWwvU01ZXFxuY2hlbWlzZS9NU1xcbmNoZW1pc3QvTVNcXG5jaGVtaXN0cnkvTVxcbmNoZW1vL01cXG5jaGVtb3RoZXJhcGV1dGljXFxuY2hlbW90aGVyYXB5L01cXG5jaGVtdXJneS9NXFxuY2hlbmlsbGUvTVxcbmNoZXJpc2gvRFNHXFxuY2hlcm9vdC9NU1xcbmNoZXJyeS9TTVxcbmNoZXJ0L01cXG5jaGVydWIvTVNcXG5jaGVydWJpY1xcbmNoZXJ1YmltXFxuY2hlcnZpbC9NXFxuY2hlc3MvTVxcbmNoZXNzYm9hcmQvTVNcXG5jaGVzc21hbi9NXFxuY2hlc3NtZW5cXG5jaGVzdC9NRFNcXG5jaGVzdGVyZmllbGQvU01cXG5jaGVzdGZ1bC9TTVxcbmNoZXN0bnV0L1NNXFxuY2hlc3R5L1RSXFxuY2hldmFsaWVyL1NNXFxuY2hldmlvdC9NXFxuY2hldnJvbi9NU1xcbmNoZXcvU1pHTURSXFxuY2hld2VyL01cXG5jaGV3aW5lc3MvTVxcbmNoZXd5L1BUUlxcbmNoZ1xcbmNoZ2VcXG5jaGkvU01cXG5jaGlhcm9zY3Vyby9NXFxuY2hpYy9QVE1SXFxuY2hpY2FuZS9NU1xcbmNoaWNhbmVyeS9TTVxcbmNoaWNoaS9NU1xcbmNoaWNrL1hNTlNcXG5jaGlja2FkZWUvU01cXG5jaGlja2VuL01ER1xcbmNoaWNrZW5mZWVkL01cXG5jaGlja2VuaGVhcnRlZFxcbmNoaWNrZW5wb3gvTVxcbmNoaWNrZW5zaGl0L1MhXFxuY2hpY2twZWEvU01cXG5jaGlja3dlZWQvTVxcbmNoaWNsZS9NXFxuY2hpY25lc3MvTVxcbmNoaWNvcnkvU01cXG5jaGlkZS9HRFNcXG5jaGlkaW5nL1lcXG5jaGllZi9UTVJZU1xcbmNoaWVmZG9tL01cXG5jaGllZnRhaW4vTVNcXG5jaGllZnRhaW5zaGlwL1NNXFxuY2hpZmZvbi9NXFxuY2hpZmZvbmllci9NU1xcbmNoaWdnZXIvTVNcXG5jaGlnbm9uL01TXFxuY2hpaHVhaHVhL1NNXFxuY2hpbGJsYWluL1NNXFxuY2hpbGQvTVxcbmNoaWxkYmVhcmluZy9NXFxuY2hpbGRiaXJ0aC9NXFxuY2hpbGRiaXJ0aHNcXG5jaGlsZGNhcmUvTVxcbmNoaWxkaG9vZC9TTVxcbmNoaWxkaXNoL1lQXFxuY2hpbGRpc2huZXNzL01cXG5jaGlsZGxlc3MvUFxcbmNoaWxkbGVzc25lc3MvTVxcbmNoaWxkbGlrZVxcbmNoaWxkbWluZGVyL1NcXG5jaGlsZG1pbmRpbmdcXG5jaGlsZHByb29mL0dTRFxcbmNoaWxkcmVuL01cXG5jaGlsaS9NXFxuY2hpbGllc1xcbmNoaWxsL0pQWlRHTURSU1xcbmNoaWxsZXIvTVxcbmNoaWxsaW5lc3MvTVxcbmNoaWxsaW5nL1lcXG5jaGlsbG5lc3MvTVxcbmNoaWxseS9UUFJcXG5jaGltZS9NWkdEUlNcXG5jaGltZXIvTVxcbmNoaW1lcmEvTVNcXG5jaGltZXJpY1xcbmNoaW1lcmljYWxcXG5jaGltbmV5L01TXFxuY2hpbXAvTVNcXG5jaGltcGFuemVlL1NNXFxuY2hpbi9TTVxcbmNoaW5hL01cXG5jaGluYXdhcmUvTVxcbmNoaW5jaGlsbGEvTVNcXG5jaGluZS9NU1xcbmNoaW5rL0dNRFNcXG5jaGlubGVzc1xcbmNoaW5uZWRcXG5jaGlubmluZ1xcbmNoaW5vL01TXFxuY2hpbnN0cmFwL01TXFxuY2hpbnR6L01cXG5jaGludHp5L1JUXFxuY2hpbndhZy9TXFxuY2hpcC9TTVxcbmNoaXBib2FyZFxcbmNoaXBtdW5rL1NNXFxuY2hpcG9sYXRhL1NcXG5jaGlwcGVkXFxuY2hpcHBlci9NU1xcbmNoaXBwaWVcXG5jaGlwcGluZy9TXFxuY2hpcHB5L1NcXG5jaGlyb2dyYXBoeS9NXFxuY2hpcm9wb2Rpc3QvTVNcXG5jaGlyb3BvZHkvTVxcbmNoaXJvcHJhY3RpYy9TTVxcbmNoaXJvcHJhY3Rvci9TTVxcbmNoaXJwL0dNRFNcXG5jaGlycGlseVxcbmNoaXJweS9QVFJcXG5jaGlycnVwL0dNRFNcXG5jaGlzZWwvWkdNRFJTXFxuY2hpc2VsZXIvTVxcbmNoaXQvU01cXG5jaGl0Y2hhdC9TTVxcbmNoaXRjaGF0dGVkXFxuY2hpdGNoYXR0aW5nXFxuY2hpdGluL01cXG5jaGl0aW5vdXNcXG5jaGl0b3NhblxcbmNoaXR0ZXJsaW5ncy9NXFxuY2hpdmFscm91cy9QWVxcbmNoaXZhbHJvdXNuZXNzL01cXG5jaGl2YWxyeS9NXFxuY2hpdmUvTVNcXG5jaGl2eS9HRFNcXG5jaGxhbXlkaWEvTVNcXG5jaGxhbXlkaWFlXFxuY2hsb3JhbC9NXFxuY2hsb3JkYW5lL01cXG5jaGxvcmlkZS9NU1xcbmNobG9yaW5hdGUvR05EU1xcbmNobG9yaW5hdGlvbi9NXFxuY2hsb3JpbmUvTVxcbmNobG9yb2ZsdW9yb2NhcmJvbi9TTVxcbmNobG9yb2Zvcm0vU0dNRFxcbmNobG9yb3BoeWxsL01cXG5jaGxvcm9wbGFzdC9NU1xcbmNobVxcbmNob2MvU1xcbmNob2NrL0dNRFNcXG5jaG9ja2FibG9ja1xcbmNob2NvaG9saWMvU01cXG5jaG9jb2xhdGUvTVNcXG5jaG9jb2xhdHlcXG5jaG9pY2UvTVRSU1xcbmNob2lyL01TXFxuY2hvaXJib3kvTVNcXG5jaG9pcm1hc3Rlci9TTVxcbmNob2tlL01aR0RSU1xcbmNob2tlY2hlcnJ5L1NNXFxuY2hva2VyL01cXG5jaG9sZWN5c3RlY3RvbXlcXG5jaG9sZWN5c3RpdGlzXFxuY2hvbGVyL01cXG5jaG9sZXJhL01cXG5jaG9sZXJpY1xcbmNob2xlc3Rlcm9sL01cXG5jaG9tcC9aR01EUlNcXG5jaG9vc2UvWkdSU1xcbmNob29zZXIvTVxcbmNob29zaW5lc3MvTVxcbmNob29zeS9UUFJcXG5jaG9wL1NNXFxuY2hvcGhvdXNlL1NNXFxuY2hvcHBlZFxcbmNob3BwZXIvTURHU1xcbmNob3BwaWx5XFxuY2hvcHBpbmVzcy9NXFxuY2hvcHBpbmdcXG5jaG9wcHkvVFBSXFxuY2hvcHN0aWNrL1NNXFxuY2hvcmFsL01ZU1xcbmNob3JhbGUvTVNcXG5jaG9yZC9NU1xcbmNob3JkYWxcXG5jaG9yZGF0ZS9TTVxcbmNob3JlL01TXFxuY2hvcmVhL01cXG5jaG9yZW9ncmFwaC9EUlpHXFxuY2hvcmVvZ3JhcGhlci9NXFxuY2hvcmVvZ3JhcGhpY1xcbmNob3Jlb2dyYXBoaWNhbGx5XFxuY2hvcmVvZ3JhcGhzXFxuY2hvcmVvZ3JhcGh5L01cXG5jaG9yaXN0ZXIvU01cXG5jaG9yb2lkL01TXFxuY2hvcnRsZS9NWkdEUlNcXG5jaG9ydGxlci9NXFxuY2hvcnVzL0dNRFNcXG5jaG9zZVxcbmNob3NlblxcbmNob3cvU0dNRFxcbmNob3dkZXIvTVNcXG5jaHJpc20vTVxcbmNocmlzdGVuL0FTR0RcXG5jaHJpc3RlbmluZy9NU1xcbmNocmlzdGlhbi9VXFxuY2hyaXN0b2xvZ3lcXG5jaHJvbWF0aWNcXG5jaHJvbWF0aWNhbGx5XFxuY2hyb21hdGluL01cXG5jaHJvbWF0b2dyYXBoeVxcbmNocm9tZS9NR0RTXFxuY2hyb21pdW0vTVxcbmNocm9tb3NvbWFsXFxuY2hyb21vc29tZS9NU1xcbmNocm9uaWNcXG5jaHJvbmljYWxseVxcbmNocm9uaWNsZS9EUlNNWkdcXG5jaHJvbmljbGVyL01cXG5jaHJvbm9ncmFwaC9NXFxuY2hyb25vZ3JhcGhzXFxuY2hyb25vbG9naWNhbC9ZXFxuY2hyb25vbG9naXN0L01TXFxuY2hyb25vbG9neS9TTVxcbmNocm9ub21ldGVyL1NNXFxuY2hyeXNhbGlzL01TXFxuY2hyeXNhbnRoZW11bS9NU1xcbmNodWIvU01cXG5jaHViYmluZXNzL01cXG5jaHViYnkvVFBSXFxuY2h1Y2svR01EU1xcbmNodWNraG9sZS9TTVxcbmNodWNrbGUvTUdEU1xcbmNodWZmZWRcXG5jaHVnL1NNXFxuY2h1Z2dlZFxcbmNodWdnaW5nXFxuY2h1a2thL01TXFxuY2h1bS9TTVxcbmNodW1tZWRcXG5jaHVtbWlseVxcbmNodW1taW5lc3MvTVxcbmNodW1taW5nXFxuY2h1bW15L1BUUlxcbmNodW1wL01TXFxuY2h1bmRlci9HRFNcXG5jaHVuay9HTURTXFxuY2h1bmtpbmVzcy9NXFxuY2h1bmt5L1BUUlxcbmNodW50ZXIvREdTXFxuY2h1cmNoL01TXFxuY2h1cmNoZ29lci9TTVxcbmNodXJjaGdvaW5nL01cXG5jaHVyY2htYW4vTVxcbmNodXJjaG1lblxcbmNodXJjaHdhcmRlbi9NU1xcbmNodXJjaHdvbWFuXFxuY2h1cmNod29tZW5cXG5jaHVyY2h5YXJkL1NNXFxuY2h1cmwvTVNcXG5jaHVybGlzaC9QWVxcbmNodXJsaXNobmVzcy9NXFxuY2h1cm4vWkdNRFJTXFxuY2h1cm5lci9NXFxuY2h1dGUvTVNcXG5jaHV0bmV5L01TXFxuY2h1dHpwYWgvTVxcbmNoeW1lL01cXG5jaHlyb24vTVNcXG5jaWFiYXR0YS9TTVxcbmNpYW8vU1xcbmNpY2FkYS9NU1xcbmNpY2F0cmljZXNcXG5jaWNhdHJpeC9NXFxuY2ljZXJvbmUvU01cXG5jaWNlcm9uaVxcbmNpZGVyJ3NcXG5jaWRlci9TXFxuY2lnYXIvTVNcXG5jaWdhcmV0dGUvTVNcXG5jaWdhcmlsbG8vTVNcXG5jaWxhbnRyby9NXFxuY2lsaWFcXG5jaWxpdW0vTVxcbmNpbmNoL0dNRFNcXG5jaW5jaG9uYS9TTVxcbmNpbmN0dXJlL1NNXFxuY2luZGVyL0dNRFNcXG5jaW5lXFxuY2luZW1hL01TXFxuY2luZW1hdGljXFxuY2luZW1hdG9ncmFwaGVyL01TXFxuY2luZW1hdG9ncmFwaGljXFxuY2luZW1hdG9ncmFwaHkvTVxcbmNpbm5hYmFyL01cXG5jaW5uYW1vbi9NXFxuY2lwaGVyJ3NcXG5jaXBoZXIvQ0dEU1xcbmNpclxcbmNpcmNhXFxuY2lyY2FkaWFuXFxuY2lyY2xlL01HRFNcXG5jaXJjbGV0L01TXFxuY2lyY3VpdC9NREdTXFxuY2lyY3VpdGFsXFxuY2lyY3VpdG91cy9ZUFxcbmNpcmN1aXRvdXNuZXNzL01cXG5jaXJjdWl0cnkvTVxcbmNpcmN1aXR5L01cXG5jaXJjdWxhci9TTVlcXG5jaXJjdWxhcml0eS9NXFxuY2lyY3VsYXJpemUvRFNHXFxuY2lyY3VsYXRlL0FEU0dcXG5jaXJjdWxhdGlvbi9TTVxcbmNpcmN1bGF0b3J5XFxuY2lyY3VtY2lzZS9YRFNHTlxcbmNpcmN1bWNpc2VkL1VcXG5jaXJjdW1jaXNpb24vTVxcbmNpcmN1bWZlcmVuY2UvTVNcXG5jaXJjdW1mZXJlbnRpYWxcXG5jaXJjdW1mbGV4L01TXFxuY2lyY3VtbG9jdXRpb24vTVNcXG5jaXJjdW1sb2N1dG9yeVxcbmNpcmN1bW5hdmlnYXRlL1hHTkRTXFxuY2lyY3VtbmF2aWdhdGlvbi9NXFxuY2lyY3VtcG9sYXJcXG5jaXJjdW1zY3JpYmUvR0RTXFxuY2lyY3Vtc2NyaXB0aW9uL01TXFxuY2lyY3Vtc3BlY3QvWVxcbmNpcmN1bXNwZWN0aW9uL01cXG5jaXJjdW1zdGFuY2UvTUdEU1xcbmNpcmN1bXN0YW50aWFsL1lcXG5jaXJjdW12ZW50L0RTR1xcbmNpcmN1bXZlbnRpb24vTVxcbmNpcmN1cy9NU1xcbmNpcnF1ZS9NU1xcbmNpcnJob3Npcy9NXFxuY2lycmhvdGljL1NNXFxuY2lycmlcXG5jaXJydXMvTVxcbmNpc1xcbmNpc2dlbmRlclxcbmNpc3Rlcm4vTVNcXG5jaXRcXG5jaXRhZGVsL01TXFxuY2l0YXRpb24vQU1TXFxuY2l0ZSdzXFxuY2l0ZS9JQUdTRFxcbmNpdGlmaWVkXFxuY2l0aXplbi9NU1xcbmNpdGl6ZW5yeS9NXFxuY2l0aXplbnNoaXAvTVxcbmNpdHJpY1xcbmNpdHJvbi9NU1xcbmNpdHJvbmVsbGEvTVxcbmNpdHJ1cy9NU1xcbmNpdHkvU01cXG5jaXR5d2lkZVxcbmNpdmV0L01TXFxuY2l2aWMvU1xcbmNpdmljYWxseVxcbmNpdmljcy9NXFxuY2l2aWwvVVlcXG5jaXZpbGlhbi9NU1xcbmNpdmlsaXR5L0lTTVxcbmNpdmlsaXphdGlvbi9NU1xcbmNpdmlsaXplL0dEU1xcbmNpdmlsaXplZC9VXFxuY2l2dmllcy9NXFxuY2tcXG5jbFxcbmNsYWNrL0dNRFNcXG5jbGFkL1VcXG5jbGFkZGluZy9NXFxuY2xhZGVcXG5jbGFpbSdzXFxuY2xhaW0vQ0tFQUdEU1xcbmNsYWltYWJsZS9BXFxuY2xhaW1hbnQvTVNcXG5jbGFpbWVkL1VcXG5jbGFpbWVyL0VDU01cXG5jbGFpcnZveWFuY2UvTVxcbmNsYWlydm95YW50L01TXFxuY2xhbS9TTVxcbmNsYW1iYWtlL01TXFxuY2xhbWJlci9aR01EUlNcXG5jbGFtYmVyZXIvTVxcbmNsYW1tZWRcXG5jbGFtbWlseVxcbmNsYW1taW5lc3MvTVxcbmNsYW1taW5nXFxuY2xhbW15L1BUUlxcbmNsYW1vci9HTURTXFxuY2xhbW9yb3VzXFxuY2xhbXAvR01EU1xcbmNsYW1wZG93bi9NU1xcbmNsYW4vU01cXG5jbGFuZGVzdGluZS9ZXFxuY2xhbmcvWkdNRFJTXFxuY2xhbmdvci9NXFxuY2xhbmdvcm91cy9ZXFxuY2xhbmsvR01EU1xcbmNsYW5uaXNoL1BcXG5jbGFubmlzaG5lc3MvTVxcbmNsYW5zbWFuL01cXG5jbGFuc21lblxcbmNsYW5zd29tYW5cXG5jbGFuc3dvbWVuXFxuY2xhcC9TTVxcbmNsYXBib2FyZC9NREdTXFxuY2xhcHBlZFxcbmNsYXBwZXIvTVNcXG5jbGFwcGVyYm9hcmQvU1xcbmNsYXBwaW5nL01cXG5jbGFwdHJhcC9NXFxuY2xhcXVlL01TXFxuY2xhcmV0L01TXFxuY2xhcmlmaWNhdGlvbi9NXFxuY2xhcmlmeS9YRFNOR1xcbmNsYXJpbmV0L1NNXFxuY2xhcmluZXRpc3QvU01cXG5jbGFyaW9uL01ER1NcXG5jbGFyaXR5L01cXG5jbGFzaC9HTURTXFxuY2xhc3Anc1xcbmNsYXNwL1VHRFNcXG5jbGFzcy9HTURTXFxuY2xhc3NpYy9NU1xcbmNsYXNzaWNhbC9NWVxcbmNsYXNzaWNpc20vTVxcbmNsYXNzaWNpc3QvTVNcXG5jbGFzc2lmaWFibGVcXG5jbGFzc2lmaWNhdGlvbi9DQU1cXG5jbGFzc2lmaWNhdGlvbnNcXG5jbGFzc2lmaWVkJ3NcXG5jbGFzc2lmaWVkL1VcXG5jbGFzc2lmaWVkc1xcbmNsYXNzaWZpZXIvTVNcXG5jbGFzc2lmeS9BQ1NER05cXG5jbGFzc2luZXNzL01cXG5jbGFzc2lzbVxcbmNsYXNzbGVzcy9QXFxuY2xhc3NtYXRlL01TXFxuY2xhc3Nyb29tL01TXFxuY2xhc3N3b3JrL01cXG5jbGFzc3kvVFJQXFxuY2xhdHRlci9HTURTXFxuY2xhdXNhbFxcbmNsYXVzZS9NU1xcbmNsYXVzdHJvcGhvYmlhL01cXG5jbGF1c3Ryb3Bob2JpY1xcbmNsYXZpY2hvcmQvU01cXG5jbGF2aWNsZS9NU1xcbmNsYXZpZXIvTVNcXG5jbGF3J3NcXG5jbGF3L0NTR0RcXG5jbGF5L01cXG5jbGF5ZXlcXG5jbGF5aWVyXFxuY2xheWllc3RcXG5jbGVhbi9CSlBaVEdEUllTXFxuY2xlYW5lci9NXFxuY2xlYW5pbmcvTVxcbmNsZWFubGluZXNzL1VNXFxuY2xlYW5seS9VVFBSXFxuY2xlYW5uZXNzL1VNXFxuY2xlYW5zZS9aR0RSU1xcbmNsZWFuc2VyL01cXG5jbGVhbnVwL01TXFxuY2xlYXIvSlBUR01EUllTXFxuY2xlYXJhbmNlL1NNXFxuY2xlYXJoZWFkZWRcXG5jbGVhcmluZy9NXFxuY2xlYXJpbmdob3VzZS9TTVxcbmNsZWFybmVzcy9NXFxuY2xlYXJ3YXkvU1xcbmNsZWF0L01TXFxuY2xlYXZhZ2UvTVNcXG5jbGVhdmUvWkdEUlNcXG5jbGVhdmVyL01cXG5jbGVmL1NNXFxuY2xlZnQvTVNcXG5jbGVtYXRpcy9NU1xcbmNsZW1lbmN5L0lNXFxuY2xlbWVudC9ZXFxuY2xlbWVudGluZS9TXFxuY2xlbmNoL0dNRFNcXG5jbGVyZXN0b3J5L1NNXFxuY2xlcmd5L1NNXFxuY2xlcmd5bWFuL01cXG5jbGVyZ3ltZW5cXG5jbGVyZ3l3b21hbi9NXFxuY2xlcmd5d29tZW5cXG5jbGVyaWMvTVNcXG5jbGVyaWNhbC9ZXFxuY2xlcmljYWxpc20vTVxcbmNsZXJrL0dNRFNcXG5jbGVya3NoaXAvTVxcbmNsZXZlci9QVFJZXFxuY2xldmVybmVzcy9NXFxuY2xldmlzL01TXFxuY2xldy9TR01EXFxuY2xpY2hlL01EU1xcbmNsaWNrL0JaR01EUlNcXG5jbGlja2JhaXRcXG5jbGlja2VyL01cXG5jbGllbnQvTVNcXG5jbGllbnRlbGUvTVNcXG5jbGlmZi9NU1xcbmNsaWZmaGFuZ2VyL1NNXFxuY2xpZmZoYW5naW5nXFxuY2xpZmZ0b3AvU1xcbmNsaWlcXG5jbGltYWN0ZXJpYy9NXFxuY2xpbWFjdGljXFxuY2xpbWF0ZS9TTVxcbmNsaW1hdGljXFxuY2xpbWF0aWNhbGx5XFxuY2xpbWF0b2xvZ2lzdC9TTVxcbmNsaW1hdG9sb2d5L01cXG5jbGltYXgvTURTR1xcbmNsaW1iL1NNRFJaR0JcXG5jbGltYmVyL01cXG5jbGltYmluZy9NXFxuY2xpbWUvU01cXG5jbGluY2gvTURSU1pHXFxuY2xpbmNoZXIvTVxcbmNsaW5nL1NNUlpHXFxuY2xpbmdlci9NXFxuY2xpbmdmaWxtXFxuY2xpbmd5L1JUXFxuY2xpbmljL1NNXFxuY2xpbmljYWwvWVxcbmNsaW5pY2lhbi9TTVxcbmNsaW5rL1NNRFJaR1xcbmNsaW5rZXIvTVxcbmNsaW9tZXRyaWMvU1xcbmNsaW9tZXRyaWNpYW4vTVNcXG5jbGlvbWV0cmljcy9NXFxuY2xpcC9TTVxcbmNsaXBib2FyZC9NU1xcbmNsaXBwZWRcXG5jbGlwcGVyL1NNXFxuY2xpcHBpbmcvU01cXG5jbGlxdWUvU01cXG5jbGlxdWV5XFxuY2xpcXVpc2gvWVBcXG5jbGlxdWlzaG5lc3MvTVxcbmNsaXQvU01cXG5jbGl0b3JhbFxcbmNsaXRvcmlkZXNcXG5jbGl0b3Jpcy9NU1xcbmNsaXhcXG5jbG9hY2EvTVxcbmNsb2FjYWVcXG5jbG9haydzXFxuY2xvYWsvVVNER1xcbmNsb2Frcm9vbS9NU1xcbmNsb2JiZXIvU01ER1xcbmNsb2NoZS9TTVxcbmNsb2NrL1NNREdcXG5jbG9ja3dpc2VcXG5jbG9ja3dvcmsvU01cXG5jbG9kL01TXFxuY2xvZGRpc2hcXG5jbG9kaG9wcGVyL01TXFxuY2xvZydzXFxuY2xvZy9VU1xcbmNsb2dnZWQvVVxcbmNsb2dnaW5nL1VcXG5jbG9pc29ubmUvTVxcbmNsb2lzdGVyL1NNREdcXG5jbG9pc3RyYWxcXG5jbG9tcC9TREdcXG5jbG9uYWxcXG5jbG9uZS9EU01HXFxuY2xvbmlkaW5lXFxuY2xvbmsvU01ER1xcbmNsb3AvTVNcXG5jbG9wcGVkXFxuY2xvcHBpbmdcXG5jbG9zZS9EUlNNWVRHSlBcXG5jbG9zZWZpc3RlZFxcbmNsb3NlbW91dGhlZFxcbmNsb3NlbmVzcy9NXFxuY2xvc2VvdXQvTVNcXG5jbG9zZXQvU01ER1xcbmNsb3NldXAvU01cXG5jbG9zaW5nL01cXG5jbG9zdXJlL0VTTVxcbmNsb3QvTVNcXG5jbG90aC9NXFxuY2xvdGhlL1VEU0dcXG5jbG90aGVzaG9yc2UvTVNcXG5jbG90aGVzbGluZS9TTVxcbmNsb3RoZXNwaW4vU01cXG5jbG90aGllci9NU1xcbmNsb3RoaW5nL01cXG5jbG90aHNcXG5jbG90dGVkXFxuY2xvdHRpbmdcXG5jbG90dXJlL1NNXFxuY2xvdWQvU01ER1xcbmNsb3VkYnVyc3QvU01cXG5jbG91ZGVkL1VcXG5jbG91ZGluZXNzL01cXG5jbG91ZGxlc3NcXG5jbG91ZHkvUlBUXFxuY2xvdXQvU01ER1xcbmNsb3ZlL1JTTVpcXG5jbG92ZW5cXG5jbG92ZXIvTVxcbmNsb3ZlcmxlYWYvU01cXG5jbG92ZXJsZWF2ZXNcXG5jbG93bi9TTURHXFxuY2xvd25pc2gvWVBcXG5jbG93bmlzaG5lc3MvTVxcbmNsb3kvREdTXFxuY2xveWluZy9ZXFxuY2x1Yi9NU1xcbmNsdWJiYWJsZVxcbmNsdWJiZWRcXG5jbHViYmVyL1NcXG5jbHViYmluZ1xcbmNsdWJmZWV0XFxuY2x1YmZvb3QvTURcXG5jbHViaG91c2UvU01cXG5jbHVibGFuZFxcbmNsdWNrL1NNREdcXG5jbHVlL01HRFNcXG5jbHVlbGVzc1xcbmNsdW1wL1NNREdcXG5jbHVtcHkvVFJcXG5jbHVtc2lseVxcbmNsdW1zaW5lc3MvTVxcbmNsdW1zeS9UUlBcXG5jbHVuZ1xcbmNsdW5rL1NNRFJaR1xcbmNsdW5rZXIvTVxcbmNsdW5reS9UUlxcbmNsdXN0ZXIvTURTR1xcbmNsdXRjaC9HTURTXFxuY2x1dHRlcidzXFxuY2x1dHRlci9VRFNHXFxuY2x2aVxcbmNsdmlpXFxuY2x4aVxcbmNseGlpXFxuY2x4aXZcXG5jbHhpeFxcbmNseHZpXFxuY2x4dmlpXFxuY21cXG5jbmlkYXJpYW4vTVNcXG5jby9FU0RcXG5jb2FjaC9NRFNHXFxuY29hY2hsb2FkL1NcXG5jb2FjaG1hbi9NXFxuY29hY2htZW5cXG5jb2FjaHdvcmtcXG5jb2FkanV0b3IvTVNcXG5jb2FndWxhbnQvTVNcXG5jb2FndWxhdGUvR05EU1xcbmNvYWd1bGF0aW9uL01cXG5jb2FndWxhdG9yL01TXFxuY29hbC9NREdTXFxuY29hbGVzY2UvR0RTXFxuY29hbGVzY2VuY2UvTVxcbmNvYWxlc2NlbnRcXG5jb2FsZmFjZS9NU1xcbmNvYWxmaWVsZC9TXFxuY29hbGl0aW9uL01TXFxuY29hbGl0aW9uaXN0L01TXFxuY29hbG1pbmUvU1xcbmNvYXJzZS9SWVRQXFxuY29hcnNlbi9TREdcXG5jb2Fyc2VuZXNzL01cXG5jb2FzdC9TTURSWkdcXG5jb2FzdGFsXFxuY29hc3Rlci9NXFxuY29hc3RndWFyZC9TXFxuY29hc3RsaW5lL01TXFxuY29hdC9NREdKU1xcbmNvYXRpbmcvTVxcbmNvYXRyb29tL1NcXG5jb2F0dGFpbC9TTVxcbmNvYXV0aG9yL01ER1NcXG5jb2F4L0RSU1pHXFxuY29heGVyL01cXG5jb2F4aWFsXFxuY29heGluZy9ZXFxuY29iL1NNXFxuY29iYWx0L01cXG5jb2JiZXIvU1xcbmNvYmJsZS9EUlNNWkdcXG5jb2JibGVyL01cXG5jb2JibGVzdG9uZS9TTVxcbmNvYm51dC9TXFxuY29icmEvU01cXG5jb2J3ZWIvU01cXG5jb2J3ZWJiZWRcXG5jb2J3ZWJieS9SVFxcbmNvY2EvTVxcbmNvY2FpbmUvTVxcbmNvY2NpL1NcXG5jb2NjdXMvTVxcbmNvY2N5Z2VzXFxuY29jY3l4L01cXG5jb2NoaW5lYWwvTVxcbmNvY2hsZWEvU01cXG5jb2NobGVhZVxcbmNvY2hsZWFyXFxuY29jay9NREdTXFxuY29ja2FkZS9TTVxcbmNvY2thbWFtaWVcXG5jb2NrYXRpZWwvTVNcXG5jb2NrYXRvby9TTVxcbmNvY2thdHJpY2UvU01cXG5jb2NrY2hhZmVyL1NcXG5jb2NrY3Jvdy9TTVxcbmNvY2tlcmVsL1NNXFxuY29ja2V5ZWRcXG5jb2NrZmlnaHQvTUdTXFxuY29ja2ZpZ2h0aW5nL01cXG5jb2NraWx5XFxuY29ja2luZXNzL01cXG5jb2NrbGUvU01cXG5jb2NrbGVzaGVsbC9TTVxcbmNvY2tuZXkvU01cXG5jb2NrcGl0L1NNXFxuY29ja3JvYWNoL01TXFxuY29ja3Njb21iL1NNXFxuY29ja3N1Y2tlci9NUyFcXG5jb2Nrc3VyZVxcbmNvY2t0YWlsL01TXFxuY29ja3kvUlRQXFxuY29jby9NU1xcbmNvY29hL1NNXFxuY29jb251dC9TTVxcbmNvY29vbi9TTURHXFxuY29kL1NNXFxuY29kYS9NU1xcbmNvZGRlZFxcbmNvZGRpbmdcXG5jb2RkbGUvRFNHXFxuY29kZSdzXFxuY29kZS9DWkdEUlNcXG5jb2RlaW5lL01cXG5jb2RlcGVuZGVuY3kvTVxcbmNvZGVwZW5kZW50L1NNXFxuY29kZXIvQ01cXG5jb2RleC9NXFxuY29kZmlzaC9NU1xcbmNvZGdlci9TTVxcbmNvZGljZXNcXG5jb2RpY2lsL1NNXFxuY29kaWZpY2F0aW9uL01cXG5jb2RpZmllci9NXFxuY29kaWZ5L1hEUlNOWkdcXG5jb2Rvbi9TXFxuY29kcGllY2UvTVNcXG5jb2Rzd2FsbG9wXFxuY29lZC9NU1xcbmNvZWR1Y2F0aW9uL01cXG5jb2VkdWNhdGlvbmFsXFxuY29lZmZpY2llbnQvTVNcXG5jb2VsZW50ZXJhdGUvTVNcXG5jb2VuenltZVxcbmNvZXF1YWwvTVlTXFxuY29lcmNlL0RSU1pHTlZcXG5jb2VyY2VyL01cXG5jb2VyY2lvbi9NXFxuY29ldmFsL1NNWVxcbmNvZXhpc3QvRFNHXFxuY29leGlzdGVuY2UvTVxcbmNvZXhpc3RlbnRcXG5jb2V4dGVuc2l2ZVxcbmNvZmZlZS9TTVxcbmNvZmZlZWNha2UvU01cXG5jb2ZmZWVob3VzZS9NU1xcbmNvZmZlZW1ha2VyL1NNXFxuY29mZmVlcG90L01TXFxuY29mZmVyL1NNXFxuY29mZmVyZGFtL01TXFxuY29mZmluL1NNREdcXG5jb2cvU01cXG5jb2dlbmN5L01cXG5jb2dlbnQvWVxcbmNvZ2l0YXRlL0RTWEdOVlxcbmNvZ2l0YXRpb24vTVxcbmNvZ2l0YXRvci9NU1xcbmNvZ25hYy9TTVxcbmNvZ25hdGUvTVNcXG5jb2duaXRpb24vQU1cXG5jb2duaXRpb25hbFxcbmNvZ25pdGl2ZS9ZXFxuY29nbml6YWJsZVxcbmNvZ25pemFuY2UvQU1cXG5jb2duaXphbnRcXG5jb2dub21lbi9TTVxcbmNvZ25vc2NlbnRlL01cXG5jb2dub3NjZW50aVxcbmNvZ3doZWVsL1NNXFxuY29oYWJpdC9TR0RcXG5jb2hhYml0YW50L01TXFxuY29oYWJpdGF0aW9uL01cXG5jb2hlaXIvU01cXG5jb2hlcmUvRFNHXFxuY29oZXJlbmNlL0lNXFxuY29oZXJlbmN5L01cXG5jb2hlcmVudC9JWVxcbmNvaGVzaW9uL01cXG5jb2hlc2l2ZS9ZUFxcbmNvaGVzaXZlbmVzcy9NXFxuY29oby9NU1xcbmNvaG9ydC9TTVxcbmNvaWYvTVNcXG5jb2lmZmVkXFxuY29pZmZpbmdcXG5jb2lmZnVyZS9EU01HXFxuY29pbCdzL0FcXG5jb2lsL1VBREdTXFxuY29pbi9NRFJaR1NcXG5jb2luYWdlL1NNXFxuY29pbmNpZGUvRFNHXFxuY29pbmNpZGVuY2UvTVNcXG5jb2luY2lkZW50XFxuY29pbmNpZGVudGFsL1lcXG5jb2luZXIvTVxcbmNvaW5zdXJhbmNlL01cXG5jb2lyXFxuY29pdGFsXFxuY29pdHVzL01cXG5jb2tlL01HRFNcXG5jb2wvU1xcbmNvbGEvTVNcXG5jb2xhbmRlci9TTVxcbmNvbGQvTVJZVFBTXFxuY29sZGJsb29kZWRcXG5jb2xkbmVzcy9NXFxuY29sZXNsYXcvTVxcbmNvbGV1cy9NU1xcbmNvbGV5L1NcXG5jb2xpYy9NXFxuY29saWNreVxcbmNvbGlzZXVtL01TXFxuY29saXRpcy9NXFxuY29sbFxcbmNvbGxhYm9yYXRlL0RTWEdOVlxcbmNvbGxhYm9yYXRpb24vTVxcbmNvbGxhYm9yYXRpb25pc3RcXG5jb2xsYWJvcmF0aXZlL1lcXG5jb2xsYWJvcmF0b3IvTVNcXG5jb2xsYWdlL1NNXFxuY29sbGFnZW5cXG5jb2xsYXBzZS9NR0RTXFxuY29sbGFwc2libGVcXG5jb2xsYXIvU01ER1xcbmNvbGxhcmJvbmUvU01cXG5jb2xsYXJkL1NNXFxuY29sbGFybGVzc1xcbmNvbGxhdGUvRFNYR05cXG5jb2xsYXRlcmFsL01ZXFxuY29sbGF0ZXJhbGl6ZVxcbmNvbGxhdGlvbi9NXFxuY29sbGF0b3IvTVNcXG5jb2xsZWFndWUvTVNcXG5jb2xsZWN0J3NcXG5jb2xsZWN0L0FTR1ZEXFxuY29sbGVjdGVkL1VcXG5jb2xsZWN0ZWRseVxcbmNvbGxlY3RpYmxlL1NNXFxuY29sbGVjdGlvbi9BTVNcXG5jb2xsZWN0aXZlL01ZU1xcbmNvbGxlY3RpdmlzbS9NXFxuY29sbGVjdGl2aXN0L1NNXFxuY29sbGVjdGl2aXphdGlvbi9NXFxuY29sbGVjdGl2aXplL0RTR1xcbmNvbGxlY3Rvci9NU1xcbmNvbGxlZW4vU01cXG5jb2xsZWdlL1NNXFxuY29sbGVnaWFsaXR5L01cXG5jb2xsZWdpYW4vTVNcXG5jb2xsZWdpYXRlXFxuY29sbGlkZS9EUlNaR1xcbmNvbGxpZS9SU01aXFxuY29sbGllci9NXFxuY29sbGllcnkvU01cXG5jb2xsaXNpb24vU01cXG5jb2xsb2NhdGUvTUdORFNYXFxuY29sbG9jYXRpb24vTVxcbmNvbGxvaWQvU01cXG5jb2xsb2lkYWxcXG5jb2xsb3FcXG5jb2xsb3F1aWFsL1lcXG5jb2xsb3F1aWFsaXNtL1NNXFxuY29sbG9xdWllc1xcbmNvbGxvcXVpdW0vTVNcXG5jb2xsb3F1eS9NXFxuY29sbHVkZS9EU0dcXG5jb2xsdXNpb24vTVxcbmNvbGx1c2l2ZVxcbmNvbG9nbmUvU01cXG5jb2xvbi9TTVxcbmNvbG9uZWwvU01cXG5jb2xvbmVsY3kvTVxcbmNvbG9uZXNcXG5jb2xvbmlhbC9TTVlcXG5jb2xvbmlhbGlzbS9NXFxuY29sb25pYWxpc3QvTVNcXG5jb2xvbmlzdC9TTVxcbmNvbG9uaXphdGlvbi9BQ01cXG5jb2xvbml6ZS9DQUdTRFxcbmNvbG9uaXplci9NU1xcbmNvbG9ubmFkZS9NRFNcXG5jb2xvbm9zY29weS9TTVxcbmNvbG9ueS9TTVxcbmNvbG9waG9uL1NNXFxuY29sb3Inc1xcbmNvbG9yL0FFR0RTXFxuY29sb3JhbnQvU01cXG5jb2xvcmF0aW9uL0VNXFxuY29sb3JhdHVyYS9NU1xcbmNvbG9yYmxpbmQvUFxcbmNvbG9yYmxpbmRuZXNzL01cXG5jb2xvcmVkJ3NcXG5jb2xvcmVkL1VcXG5jb2xvcmVkc1xcbmNvbG9yZmFzdC9QXFxuY29sb3JmYXN0bmVzcy9NXFxuY29sb3JmdWwvUFlcXG5jb2xvcmZ1bG5lc3MvTVxcbmNvbG9yaW5nJ3NcXG5jb2xvcmlzdC9TXFxuY29sb3JpemF0aW9uL01cXG5jb2xvcml6ZS9EU0dcXG5jb2xvcmxlc3MvUFlcXG5jb2xvcmxlc3NuZXNzL01cXG5jb2xvcndheS9TXFxuY29sb3NzYWwvWVxcbmNvbG9zc2lcXG5jb2xvc3N1cy9NXFxuY29sb3N0b215L1NNXFxuY29sb3N0cnVtL01cXG5jb2x0L01TXFxuY29sdGlzaFxcbmNvbHVtYmluZS9TTVxcbmNvbHVtbi9TTURcXG5jb2x1bW5hclxcbmNvbHVtbmlzdC9TTVxcbmNvbS9KTFxcbmNvbWEvTVNcXG5jb21ha2VyL1NNXFxuY29tYXRvc2VcXG5jb21iL01EUlpHSlNcXG5jb21iYXQvU01ER1ZcXG5jb21iYXRhbnQvU01cXG5jb21iYXRpdmVuZXNzL01cXG5jb21iZWQvVVxcbmNvbWJlci9NXFxuY29tYmluYXRpb24vU01cXG5jb21iaW5lJ3NcXG5jb21iaW5lL0FEU0dcXG5jb21iaW5lZC9VXFxuY29tYmluZXIvTVNcXG5jb21iaW5ncy9NXFxuY29tYm8vU01cXG5jb21idXN0L1NHVkRcXG5jb21idXN0aWJpbGl0eS9NXFxuY29tYnVzdGlibGUvTVNcXG5jb21idXN0aW9uL01cXG5jb21lL0lNWkdSU1xcbmNvbWViYWNrL01TXFxuY29tZWRpYW4vTVNcXG5jb21lZGljXFxuY29tZWRpZW5uZS9NU1xcbmNvbWVkb3duL01TXFxuY29tZWR5L1NNXFxuY29tZWxpbmVzcy9NXFxuY29tZWx5L1JQVFxcbmNvbWVyJ3NcXG5jb21lc3RpYmxlL1NNXFxuY29tZXQvU01cXG5jb21ldXBwYW5jZS9TTVxcbmNvbWZpdCdzXFxuY29tZml0L0VTXFxuY29tZm9ydC9FU01ER1xcbmNvbWZvcnRhYmxlL1BcXG5jb21mb3J0YWJsZW5lc3MvTVxcbmNvbWZvcnRhYmx5L1VcXG5jb21mb3J0ZXIvTVNcXG5jb21mb3J0aW5nL1lcXG5jb21mb3J0bGVzc1xcbmNvbWZ5L1JUXFxuY29taWMvU01cXG5jb21pY2FsL1lcXG5jb21pY2FsaXR5L01cXG5jb21pbmcvTVxcbmNvbWl0eS9NXFxuY29tbVxcbmNvbW1hL1NNXFxuY29tbWFuZC9TTURSTFpHXFxuY29tbWFuZGFudC9NU1xcbmNvbW1hbmRlZXIvR0RTXFxuY29tbWFuZGVyL01cXG5jb21tYW5kbWVudC9NU1xcbmNvbW1hbmRvL1NNXFxuY29tbWVtb3JhdGUvWEdOVkRTXFxuY29tbWVtb3JhdGlvbi9NXFxuY29tbWVtb3JhdG9yL01TXFxuY29tbWVuY2UvQURTTEdcXG5jb21tZW5jZW1lbnQvQU1cXG5jb21tZW5jZW1lbnRzXFxuY29tbWVuZC9BU0RCR1xcbmNvbW1lbmRhYmx5XFxuY29tbWVuZGF0aW9uL0FNU1xcbmNvbW1lbmRhdG9yeVxcbmNvbW1lbnN1cmFibGVcXG5jb21tZW5zdXJhdGUvSVlcXG5jb21tZW50L0dTTURcXG5jb21tZW50YXJ5L1NNXFxuY29tbWVudGF0ZS9EU0dcXG5jb21tZW50YXRvci9TTVxcbmNvbW1lcmNlL01cXG5jb21tZXJjaWFsL1NNWVxcbmNvbW1lcmNpYWxpc20vTVxcbmNvbW1lcmNpYWxpemF0aW9uL01cXG5jb21tZXJjaWFsaXplL0dEU1xcbmNvbW1pZS9TTVxcbmNvbW1pbmdsZS9EU0dcXG5jb21taXNlcmF0ZS9HTlZEU1hcXG5jb21taXNlcmF0aW9uL01cXG5jb21taXNzYXIvU01cXG5jb21taXNzYXJpYXQvU01cXG5jb21taXNzYXJ5L1NNXFxuY29tbWlzc2lvbidzXFxuY29tbWlzc2lvbi9BQ1NHRFxcbmNvbW1pc3Npb25haXJlL1NcXG5jb21taXNzaW9uZXIvU01cXG5jb21taXQvQVNcXG5jb21taXRtZW50L01TXFxuY29tbWl0dGFsL1NNXFxuY29tbWl0dGVkL0FVXFxuY29tbWl0dGVlL1NNXFxuY29tbWl0dGVlbWFuL01cXG5jb21taXR0ZWVtZW5cXG5jb21taXR0ZWV3b21hbi9NXFxuY29tbWl0dGVld29tZW5cXG5jb21taXR0ZXIvU1xcbmNvbW1pdHRpbmcvQVxcbmNvbW1vZGUnc1xcbmNvbW1vZGUvRUlTXFxuY29tbW9kaWZpY2F0aW9uXFxuY29tbW9kaW91cy9ZXFxuY29tbW9kaXR5L1NNXFxuY29tbW9kb3JlL1NNXFxuY29tbW9uJ3NcXG5jb21tb24vVVBSWVRcXG5jb21tb25hbGl0eS9TXFxuY29tbW9uYWx0eS9NXFxuY29tbW9uZXIvTVNcXG5jb21tb25uZXNzL1VNXFxuY29tbW9ucGxhY2UvTVNcXG5jb21tb25zXFxuY29tbW9uc2Vuc2VcXG5jb21tb253ZWFsL01IXFxuY29tbW9ud2VhbHRoL01cXG5jb21tb253ZWFsdGhzXFxuY29tbW90aW9uL1NNXFxuY29tbXVuYWwvWVxcbmNvbW11bmUvWERTTUdOXFxuY29tbXVuaWNhYmlsaXR5L01cXG5jb21tdW5pY2FibGUvSVxcbmNvbW11bmljYWJseVxcbmNvbW11bmljYW50L01TXFxuY29tbXVuaWNhdGUvR05WRFNYXFxuY29tbXVuaWNhdGlvbi9NXFxuY29tbXVuaWNhdGl2ZS9VXFxuY29tbXVuaWNhdG9yL1NNXFxuY29tbXVuaW9uL01cXG5jb21tdW5pcXVlL1NNXFxuY29tbXVuaXNtL01cXG5jb21tdW5pc3QvU01cXG5jb21tdW5pc3RpY1xcbmNvbW11bml0eS9TTVxcbmNvbW11dGF0aW9uL01TXFxuY29tbXV0YXRpdmVcXG5jb21tdXRhdGl2aXR5XFxuY29tbXV0YXRvci9TTVxcbmNvbW11dGUvQkRSU01aR1xcbmNvbW11dGVyL01cXG5jb21vcmJpZGl0eVxcbmNvbXAvTURZR1NcXG5jb21wYWN0L1RHU01EUllQXFxuY29tcGFjdGlvblxcbmNvbXBhY3RuZXNzL01cXG5jb21wYWN0b3IvU01cXG5jb21wYW5pb24vU0JNXFxuY29tcGFuaW9uYWJseVxcbmNvbXBhbmlvbnNoaXAvTVxcbmNvbXBhbmlvbndheS9NU1xcbmNvbXBhbnkvU01cXG5jb21wYXJhYmlsaXR5L01cXG5jb21wYXJhYmxlL0lcXG5jb21wYXJhYmx5L0lcXG5jb21wYXJhdGl2ZS9NWVNcXG5jb21wYXJlL0JEU0dcXG5jb21wYXJpc29uL01TXFxuY29tcGFydG1lbnQvU01cXG5jb21wYXJ0bWVudGFsXFxuY29tcGFydG1lbnRhbGl6YXRpb24vTVxcbmNvbXBhcnRtZW50YWxpemUvRFNHXFxuY29tcGFzcy9HTURTXFxuY29tcGFzc2lvbi9NXFxuY29tcGFzc2lvbmF0ZS9ZXFxuY29tcGF0aWJpbGl0eS9JTVxcbmNvbXBhdGlibGUvSU1TXFxuY29tcGF0aWJseS9JXFxuY29tcGF0cmlvdC9NU1xcbmNvbXBlZXIvU01cXG5jb21wZWwvU1xcbmNvbXBlbGxlZFxcbmNvbXBlbGxpbmcvWVxcbmNvbXBlbmRpb3VzXFxuY29tcGVuZGl1bS9TTVxcbmNvbXBlbnNhdGUvRFNYR05cXG5jb21wZW5zYXRlZC9VXFxuY29tcGVuc2F0aW9uL01cXG5jb21wZW5zYXRvcnlcXG5jb21wZXJlL0RTR1xcbmNvbXBldGUvRFNHXFxuY29tcGV0ZW5jZS9JTVxcbmNvbXBldGVuY2VzXFxuY29tcGV0ZW5jaWVzXFxuY29tcGV0ZW5jeS9JTVxcbmNvbXBldGVudC9JWVxcbmNvbXBldGl0aW9uL1NNXFxuY29tcGV0aXRpdmUvUFlcXG5jb21wZXRpdGl2ZW5lc3MvTVxcbmNvbXBldGl0b3IvU01cXG5jb21waWxhdGlvbi9TTVxcbmNvbXBpbGUvRFJTWkdcXG5jb21waWxlci9NXFxuY29tcGxhY2VuY2UvTVxcbmNvbXBsYWNlbmN5L01cXG5jb21wbGFjZW50L1lcXG5jb21wbGFpbi9EUlpHU1xcbmNvbXBsYWluYW50L01TXFxuY29tcGxhaW5lci9NXFxuY29tcGxhaW50L1NNXFxuY29tcGxhaXNhbmNlL01cXG5jb21wbGFpc2FudC9ZXFxuY29tcGxlY3RlZFxcbmNvbXBsZW1lbnQvU0dNRFxcbmNvbXBsZW1lbnRhcnlcXG5jb21wbGV0ZS9QWVRHTlhEUlNcXG5jb21wbGV0ZWQvVVxcbmNvbXBsZXRlbmVzcy9JTVxcbmNvbXBsZXRpb24vTVxcbmNvbXBsZXgvTVNZXFxuY29tcGxleGlvbi9NRFNcXG5jb21wbGV4aW9uYWxcXG5jb21wbGV4aXR5L1NNXFxuY29tcGxpYW5jZS9NXFxuY29tcGxpYW50L1lcXG5jb21wbGljYXRlL0dEU1xcbmNvbXBsaWNhdGVkL1lcXG5jb21wbGljYXRpb24vTVxcbmNvbXBsaWNpdFxcbmNvbXBsaWNpdHkvTVxcbmNvbXBsaW1lbnQvTURHU1xcbmNvbXBsaW1lbnRhcnkvVVxcbmNvbXBseS9ORFNYR1xcbmNvbXBvL1NcXG5jb21wb25lbnQvU01cXG5jb21wb3J0L0xTR0RcXG5jb21wb3J0bWVudC9NXFxuY29tcG9zZS9BRUNHU0RcXG5jb21wb3NlZGx5XFxuY29tcG9zZXIvTVNcXG5jb21wb3NpdGUvTVlHTlhEU1xcbmNvbXBvc2l0aW9uL0NNXFxuY29tcG9zaXRpb25hbFxcbmNvbXBvc2l0b3IvU01cXG5jb21wb3N0L1NHTURcXG5jb21wb3N1cmUvRU1cXG5jb21wb3RlL1NNXFxuY29tcG91bmQvR01EQlNcXG5jb21wb3VuZGVkL1VcXG5jb21wcmVoZW5kL1NER1xcbmNvbXByZWhlbnNpYmlsaXR5L0lNXFxuY29tcHJlaGVuc2libGUvSVxcbmNvbXByZWhlbnNpYmx5L0lcXG5jb21wcmVoZW5zaW9uL0lNXFxuY29tcHJlaGVuc2lvbnNcXG5jb21wcmVoZW5zaXZlL1BNWVNcXG5jb21wcmVoZW5zaXZlbmVzcy9NXFxuY29tcHJlc3Mnc1xcbmNvbXByZXNzL0NHVkRTXFxuY29tcHJlc3NlZC9VXFxuY29tcHJlc3NpYmxlXFxuY29tcHJlc3Npb24vQ01cXG5jb21wcmVzc29yL1NNXFxuY29tcHJpc2UvR0RTXFxuY29tcHJvbWlzZS9NR0RTXFxuY29tcHRyb2xsZXIvTVNcXG5jb21wdWxzaW9uL01TXFxuY29tcHVsc2l2ZS9ZUFxcbmNvbXB1bHNpdmVuZXNzL01cXG5jb21wdWxzb3JpbHlcXG5jb21wdWxzb3J5L1NNXFxuY29tcHVuY3Rpb24vU01cXG5jb21wdXRhdGlvbi9TTVxcbmNvbXB1dGF0aW9uYWwvWVxcbmNvbXB1dGUvQURTR1xcbmNvbXB1dGVyL01TXFxuY29tcHV0ZXJhdGVcXG5jb21wdXRlcml6YXRpb24vTVxcbmNvbXB1dGVyaXplL0dEU1xcbmNvbXB1dGluZy9NXFxuY29tcmFkZS9TTVlcXG5jb21yYWRlc2hpcC9NXFxuY29uL0dTTVxcbmNvbmNhdGVuYXRlL1hEU0dOXFxuY29uY2F0ZW5hdGlvbi9NXFxuY29uY2F2ZS9ZUFxcbmNvbmNhdmVuZXNzL01cXG5jb25jZWFsL1NEUlpHQkxcXG5jb25jZWFsZWQvVVxcbmNvbmNlYWxlci9NXFxuY29uY2VhbG1lbnQvTVxcbmNvbmNlaXQvU01EXFxuY29uY2VpdGVkL1BZXFxuY29uY2VpdGVkbmVzcy9NXFxuY29uY2VpdmFibGUvSVxcbmNvbmNlaXZhYmx5L0lcXG5jb25jZWl2ZS9EU0dCXFxuY29uY2VudHJhdGUvRFNNR05YXFxuY29uY2VudHJhdGlvbi9NXFxuY29uY2VudHJpY1xcbmNvbmNlbnRyaWNhbGx5XFxuY29uY2VwdC9TTVxcbmNvbmNlcHRpb24vU01cXG5jb25jZXB0aW9uYWxcXG5jb25jZXB0dWFsL1lcXG5jb25jZXB0dWFsaXphdGlvbi9NU1xcbmNvbmNlcHR1YWxpemUvRFNHXFxuY29uY2Vybi9VTURcXG5jb25jZXJuZWQvVVlcXG5jb25jZXJuaW5nXFxuY29uY2VybnNcXG5jb25jZXJ0J3NcXG5jb25jZXJ0L0VTREdcXG5jb25jZXJ0ZWQvWVxcbmNvbmNlcnRnb2VyL1NcXG5jb25jZXJ0aW5hL1NHTURcXG5jb25jZXJ0aXplL0RTR1xcbmNvbmNlcnRtYXN0ZXIvTVNcXG5jb25jZXJ0by9TTVxcbmNvbmNlc3Npb25haXJlL01TXFxuY29uY2Vzc2lvbmFsXFxuY29uY2Vzc2lvbmFyeVxcbmNvbmNoL01cXG5jb25jaGllL1NcXG5jb25jaHNcXG5jb25jaWVyZ2UvTVNcXG5jb25jaWxpYXRlL0RTR05cXG5jb25jaWxpYXRpb24vQU1cXG5jb25jaWxpYXRvci9TTVxcbmNvbmNpbGlhdG9yeVxcbmNvbmNpc2UvUlBZVE5cXG5jb25jaXNlbmVzcy9NXFxuY29uY2lzaW9uL01cXG5jb25jbGF2ZS9TTVxcbmNvbmNsdWRlL0RTR1xcbmNvbmNsdXNpb24vTVNcXG5jb25jbHVzaXZlL0lZUFxcbmNvbmNsdXNpdmVuZXNzL0lNXFxuY29uY29jdC9TREdcXG5jb25jb2N0aW9uL01TXFxuY29uY29taXRhbnQvTVlTXFxuY29uY29yZC9NXFxuY29uY29yZGFuY2UvU01cXG5jb25jb3JkYW50XFxuY29uY29yZGF0L1NNXFxuY29uY291cnNlL1NNXFxuY29uY3JldGUvRFNQTVlHTlhcXG5jb25jcmV0ZW5lc3MvTVxcbmNvbmNyZXRpb24vTVxcbmNvbmN1YmluYWdlL01cXG5jb25jdWJpbmUvTVNcXG5jb25jdXBpc2NlbmNlL01cXG5jb25jdXBpc2NlbnRcXG5jb25jdXIvU1xcbmNvbmN1cnJlZFxcbmNvbmN1cnJlbmNlL1NNXFxuY29uY3VycmVuY3lcXG5jb25jdXJyaW5nXFxuY29uY3Vzcy9WXFxuY29uY3Vzc2lvbi9TTVxcbmNvbmRlbW4vU0RSWkdcXG5jb25kZW1uYXRpb24vTVNcXG5jb25kZW1uYXRvcnlcXG5jb25kZW1uZXIvTVxcbmNvbmRlbnNhdGUvTU5YU1xcbmNvbmRlbnNhdGlvbi9NXFxuY29uZGVuc2UvRFJTWkdcXG5jb25kZW5zZXIvTVxcbmNvbmRlc2NlbmRpbmcvWVxcbmNvbmRlc2NlbnNpb24vTVxcbmNvbmRpZ25cXG5jb25kaW1lbnQvTVNcXG5jb25kaXRpb24nc1xcbmNvbmRpdGlvbi9BR1NEXFxuY29uZGl0aW9uYWwvU01ZXFxuY29uZGl0aW9uYWxpdHlcXG5jb25kaXRpb25lZC9VXFxuY29uZGl0aW9uZXIvU01cXG5jb25kaXRpb25pbmcvTVxcbmNvbmRvL1NNXFxuY29uZG9sZW5jZS9TTVxcbmNvbmRvbS9TTVxcbmNvbmRvbWluaXVtL01TXFxuY29uZG9uZS9EU0dcXG5jb25kb3IvU01cXG5jb25kdWNlL0RTR1ZcXG5jb25kdWN0L01ER1ZcXG5jb25kdWN0YW5jZS9NXFxuY29uZHVjdGliaWxpdHkvTVxcbmNvbmR1Y3RpYmxlXFxuY29uZHVjdGlvbi9NXFxuY29uZHVjdGl2aXR5L01cXG5jb25kdWN0b3IvTVNcXG5jb25kdWN0cmVzcy9NU1xcbmNvbmR1aXQvU01cXG5jb25lL01cXG5jb25leXNcXG5jb25mYWIvU01cXG5jb25mYWJiZWRcXG5jb25mYWJiaW5nXFxuY29uZmFidWxhdGUvWERTR05cXG5jb25mYWJ1bGF0aW9uL01cXG5jb25mZWN0aW9uL1NaTVJcXG5jb25mZWN0aW9uZXIvTVxcbmNvbmZlY3Rpb25lcnkvU01cXG5jb25mZWRlcmFjeS9TTVxcbmNvbmZlZGVyYXRlL01cXG5jb25mZXIvU1xcbmNvbmZlcmVlL1NNXFxuY29uZmVyZW5jZS9NR1NcXG5jb25mZXJyYWJsZVxcbmNvbmZlcnJhbC9NXFxuY29uZmVycmVkXFxuY29uZmVycmVyL01TXFxuY29uZmVycmluZ1xcbmNvbmZlc3NlZC9ZXFxuY29uZmVzc2lvbi9TTVxcbmNvbmZlc3Npb25hbC9TTVxcbmNvbmZlc3Nvci9NU1xcbmNvbmZldHRpL01cXG5jb25maWRhbnQvTVNcXG5jb25maWRhbnRlL1NNXFxuY29uZmlkZS9EUlNaR1xcbmNvbmZpZGVuY2UvU01cXG5jb25maWRlbnQvWVxcbmNvbmZpZGVudGlhbC9ZXFxuY29uZmlkZW50aWFsaXR5L01cXG5jb25maWRlci9NXFxuY29uZmlkaW5nL1lcXG5jb25maWd1cmF0aW9uL1NcXG5jb25maWd1cmUvQlxcbmNvbmZpbmVkL1VcXG5jb25maW5lbWVudC9NU1xcbmNvbmZpcm0vQVNER1xcbmNvbmZpcm1hdGlvbi9BU01cXG5jb25maXJtYXRvcnlcXG5jb25maXJtZWQvVVxcbmNvbmZpc2NhdGUvRFNHTlhcXG5jb25maXNjYXRpb24vTVxcbmNvbmZpc2NhdG9yL1NNXFxuY29uZmlzY2F0b3J5XFxuY29uZmxhZ3JhdGlvbi9NU1xcbmNvbmZsYXRlL1hEU0dOXFxuY29uZmxhdGlvbi9NXFxuY29uZmxpY3QvU0dNRFxcbmNvbmZsdWVuY2UvTVNcXG5jb25mbHVlbnRcXG5jb25mb3JtL1pCXFxuY29uZm9ybWFibGUvVVxcbmNvbmZvcm1hbFxcbmNvbmZvcm1hbmNlL01cXG5jb25mb3JtaXNtL01cXG5jb25mb3JtaXN0L1NNXFxuY29uZm9ybWl0eS9NXFxuY29uZnJlcmUvTVNcXG5jb25mcm9udGF0aW9uL1NNXFxuY29uZnJvbnRhdGlvbmFsXFxuY29uZnVzZS9SWlxcbmNvbmZ1c2VkL1lcXG5jb25mdXNpbmcvWVxcbmNvbmZ1dGF0aW9uL01cXG5jb25mdXRlL0RTR1xcbmNvbmdhL1NNREdcXG5jb25nZWFsL1NMREdcXG5jb25nZWFsbWVudC9NXFxuY29uZ2VyL1NNXFxuY29uZ2VyaWVzL01cXG5jb25nZXN0L1NER1ZcXG5jb25nZXN0aW9uL01cXG5jb25nbG9tZXJhdGUvRFNYTUdOXFxuY29uZ2xvbWVyYXRpb24vTVxcbmNvbmdyYXRzL01cXG5jb25ncmF0dWxhdGUvWEdORFNcXG5jb25ncmF0dWxhdGlvbi9NXFxuY29uZ3JhdHVsYXRvcnlcXG5jb25ncmVnYW50L01TXFxuY29uZ3JlZ2F0ZS9HTkRTWFxcbmNvbmdyZWdhdGlvbi9NXFxuY29uZ3JlZ2F0aW9uYWxcXG5jb25ncmVnYXRpb25hbGlzbS9NXFxuY29uZ3JlZ2F0aW9uYWxpc3QvTVNcXG5jb25ncmVzcy9NU1xcbmNvbmdyZXNzaW9uYWxcXG5jb25ncmVzc21hbi9NXFxuY29uZ3Jlc3NtZW5cXG5jb25ncmVzc3Blb3BsZVxcbmNvbmdyZXNzcGVyc29uL01TXFxuY29uZ3Jlc3N3b21hbi9NXFxuY29uZ3Jlc3N3b21lblxcbmNvbmdydWVuY2UvTVxcbmNvbmdydWVudC9ZXFxuY29uZ3J1aXR5L0lTTVxcbmNvbmdydW91c1xcbmNvbmljL1NNXFxuY29uaWNhbC9ZXFxuY29uaWZlci9TTVxcbmNvbmlmZXJvdXNcXG5jb25qZWN0dXJhbFxcbmNvbmplY3R1cmUvTUdEU1xcbmNvbmpvaW50XFxuY29uanVnYWwvWVxcbmNvbmp1Z2F0ZS9EU1hHTlxcbmNvbmp1Z2F0aW9uL01cXG5jb25qdW5jdC9WTVNcXG5jb25qdW5jdGl2YS9TTVxcbmNvbmp1bmN0aXZlL1NNXFxuY29uanVuY3Rpdml0aXMvTVxcbmNvbmp1cmF0aW9uL01TXFxuY29uanVyZS9EUlNaR1xcbmNvbmp1cmVyL01cXG5jb25rL01EUlpcXG5jb25tYW5cXG5jb25uZWN0L0FFRFZHU1xcbmNvbm5lY3RhYmxlXFxuY29ubmVjdGVkL1VcXG5jb25uZWN0aW9uL0VNU1xcbmNvbm5lY3RpdmUvTVNcXG5jb25uZWN0aXZpdHkvTVxcbmNvbm5lY3Rvci9NU1xcbmNvbm5lZFxcbmNvbm5pbmdcXG5jb25uaXB0aW9uL01TXFxuY29ubml2YW5jZS9NXFxuY29ubml2ZS9EUlNaR1xcbmNvbm5pdmVyL01cXG5jb25ub2lzc2V1ci9TTVxcbmNvbm5vdGF0aXZlXFxuY29ubnViaWFsXFxuY29ucXVlci9BU0RHXFxuY29ucXVlcmFibGUvVVxcbmNvbnF1ZXJlZC9VXFxuY29ucXVlcm9yL01TXFxuY29ucXVlc3QvQU1cXG5jb25xdWlzdGFkb3IvU01cXG5jb25zL0RTR1xcbmNvbnNhbmd1aW5lb3VzXFxuY29uc2FuZ3Vpbml0eS9NXFxuY29uc2NpZW5jZWxlc3NcXG5jb25zY2llbnRpb3VzL1BZXFxuY29uc2NpZW50aW91c25lc3MvTVxcbmNvbnNjaW91cy9VWVBcXG5jb25zY2lvdXNuZXNzL1VNXFxuY29uc2Npb3VzbmVzc2VzXFxuY29uc2NyaXB0aW9uL01cXG5jb25zZWNyYXRlL0FEU0dOXFxuY29uc2VjcmF0ZWQvVVxcbmNvbnNlY3JhdGlvbi9BTVxcbmNvbnNlY3JhdGlvbnNcXG5jb25zZWN1dGl2ZS9ZXFxuY29uc2Vuc3VhbFxcbmNvbnNlbnN1cy9NU1xcbmNvbnNlbnQvU01ER1xcbmNvbnNlcXVlbmNlL1NNXFxuY29uc2VxdWVudC9ZXFxuY29uc2VxdWVudGlhbC9JWVxcbmNvbnNlcnZhbmN5L1NNXFxuY29uc2VydmF0aW9uL01cXG5jb25zZXJ2YXRpb25pc20vTVxcbmNvbnNlcnZhdGlvbmlzdC9TTVxcbmNvbnNlcnZhdGlzbS9NXFxuY29uc2VydmF0aXZlL01ZU1xcbmNvbnNlcnZhdG9pcmUvU1xcbmNvbnNlcnZhdG9yL1NNXFxuY29uc2VydmF0b3J5L1NNXFxuY29uc2lkZXIvQUdTRFxcbmNvbnNpZGVyYWJsZS9JXFxuY29uc2lkZXJhYmx5XFxuY29uc2lkZXJhdGUvSVBZTlxcbmNvbnNpZGVyYXRlbmVzcy9JTVxcbmNvbnNpZGVyYXRpb24vQUlNXFxuY29uc2lkZXJhdGlvbnNcXG5jb25zaWRlcmVkL1VcXG5jb25zaWduL0FTREdcXG5jb25zaWduZWUvTVNcXG5jb25zaWdubWVudC9NU1xcbmNvbnNpc3QvU0RHXFxuY29uc2lzdGVuY2UvTVNcXG5jb25zaXN0ZW5jeS9JU01cXG5jb25zaXN0ZW50L0lZXFxuY29uc2lzdG9yeS9TTVxcbmNvbnNvbGFibGUvSVxcbmNvbnNvbGF0aW9uL01TXFxuY29uc29sYXRvcnlcXG5jb25zb2xpZGF0ZS9YRFNHTlxcbmNvbnNvbGlkYXRlZC9VXFxuY29uc29saWRhdGlvbi9NXFxuY29uc29saWRhdG9yL01TXFxuY29uc29saW5nL1lcXG5jb25zb21tZS9NXFxuY29uc29uYW5jZS9TTVxcbmNvbnNvbmFudC9TTVlcXG5jb25zb3J0aWFcXG5jb25zb3J0aXVtL01cXG5jb25zcGVjdHVzL01TXFxuY29uc3BpY3VvdXMvSVBZXFxuY29uc3BpY3VvdXNuZXNzL0lNXFxuY29uc3BpcmFjeS9TTVxcbmNvbnNwaXJhdG9yL01TXFxuY29uc3BpcmF0b3JpYWwvWVxcbmNvbnNwaXJlL0dEXFxuY29uc3RhYmxlL1NNXFxuY29uc3RhYnVsYXJ5L1NNXFxuY29uc3RhbmN5L0lNXFxuY29uc3RhbnQvTVlTXFxuY29uc3RlbGxhdGlvbi9TTVxcbmNvbnN0ZXJuYXRpb24vTVxcbmNvbnN0aXBhdGUvR05EU1xcbmNvbnN0aXBhdGlvbi9NXFxuY29uc3RpdHVlbmN5L1NNXFxuY29uc3RpdHVlbnQvU01cXG5jb25zdGl0dXRlL0FEU0dOVlxcbmNvbnN0aXR1dGlvbi9BTVxcbmNvbnN0aXR1dGlvbmFsL01ZU1xcbmNvbnN0aXR1dGlvbmFsaXNtXFxuY29uc3RpdHV0aW9uYWxpdHkvVU1cXG5jb25zdGl0dXRpb25zXFxuY29uc3RyYWluZWQvVVxcbmNvbnN0cmFpbnQvU01cXG5jb25zdHJpY3QvR1ZTRFxcbmNvbnN0cmljdGlvbi9TTVxcbmNvbnN0cmljdG9yL1NNXFxuY29uc3RydWFibGVcXG5jb25zdHJ1Y3Qnc1xcbmNvbnN0cnVjdC9DQURWR1NcXG5jb25zdHJ1Y3Rpb24vQ0FNU1xcbmNvbnN0cnVjdGlvbmFsXFxuY29uc3RydWN0aW9uaXN0J3NcXG5jb25zdHJ1Y3Rpb25pc3QvQ1NcXG5jb25zdHJ1Y3RpdmUvWVBcXG5jb25zdHJ1Y3RpdmVuZXNzL01cXG5jb25zdHJ1Y3Rvci9NU1xcbmNvbnN0cnVlL0dEU1xcbmNvbnN1bC9LU01cXG5jb25zdWxhci9LXFxuY29uc3VsYXRlL1NNXFxuY29uc3Vsc2hpcC9NXFxuY29uc3VsdC9HU0RcXG5jb25zdWx0YW5jeS9TTVxcbmNvbnN1bHRhbnQvTVNcXG5jb25zdWx0YXRpb24vTVNcXG5jb25zdWx0YXRpdmVcXG5jb25zdW1hYmxlL1NNXFxuY29uc3VtZS9CRFJTWkdcXG5jb25zdW1lZC9VXFxuY29uc3VtZXIvTVxcbmNvbnN1bWVyaXNtL01cXG5jb25zdW1lcmlzdC9NU1xcbmNvbnN1bW1hdGUvWUdOWERTXFxuY29uc3VtbWF0ZWQvVVxcbmNvbnN1bXB0aW9uL01cXG5jb25zdW1wdGl2ZS9TTVxcbmNvbnRcXG5jb250YWN0L0FTREdcXG5jb250YWN0YWJsZVxcbmNvbnRhY3RsZXNzXFxuY29udGFnaW9uL01TXFxuY29udGFnaW91cy9QWVxcbmNvbnRhZ2lvdXNuZXNzL01cXG5jb250YWluL1NCTERSWkdcXG5jb250YWluZXIvTVxcbmNvbnRhaW5lcml6YXRpb24vTVxcbmNvbnRhaW5lcml6ZS9EU0dcXG5jb250YWlubWVudC9NXFxuY29udGFtaW5hbnQvU01cXG5jb250YW1pbmF0ZS9BQ0RTR1xcbmNvbnRhbWluYXRlZC9VXFxuY29udGFtaW5hdGlvbi9DTVxcbmNvbnRhbWluYXRvci9TTVxcbmNvbnRkXFxuY29udGVtbi9TREdcXG5jb250ZW1wbGF0ZS9EU0dOVlxcbmNvbnRlbXBsYXRpb24vTVxcbmNvbnRlbXBsYXRpdmUvU01ZXFxuY29udGVtcG9yYW5laXR5L01cXG5jb250ZW1wb3JhbmVvdXMvWVxcbmNvbnRlbXB0L01cXG5jb250ZW1wdGlibGVcXG5jb250ZW1wdGlibHlcXG5jb250ZW1wdHVvdXMvWVBcXG5jb250ZW1wdHVvdXNuZXNzL01cXG5jb250ZW5kZXIvTVNcXG5jb250ZW50L0VTTE1ER1xcbmNvbnRlbnRlZC9FWVxcbmNvbnRlbnRlZG5lc3MvTVxcbmNvbnRlbnRpb24vU01cXG5jb250ZW50aW91cy9ZUFxcbmNvbnRlbnRpb3VzbmVzcy9NXFxuY29udGVudGx5XFxuY29udGVudG1lbnQvRU1cXG5jb250ZXJtaW5vdXMvWVxcbmNvbnRlc3RhYmxlL0lcXG5jb250ZXN0YW50L01TXFxuY29udGVzdGVkL1VcXG5jb250ZXh0dWFsaXphdGlvblxcbmNvbnRleHR1YWxpemUvRFNHXFxuY29udGlndWl0eS9NXFxuY29udGlndW91cy9ZXFxuY29udGluZW5jZS9JTVxcbmNvbnRpbmVudC9TTVxcbmNvbnRpbmVudGFsL1NNXFxuY29udGluZ2VuY3kvU01cXG5jb250aW5nZW50L1NNWVxcbmNvbnRpbnVhXFxuY29udGludWFsL1lcXG5jb250aW51YW5jZS9FTVNcXG5jb250aW51YXRpb24vRU1TXFxuY29udGludWUvRUdEU1xcbmNvbnRpbnVpdHkvRVNNXFxuY29udGludW91cy9FWVxcbmNvbnRpbnV1bS9NXFxuY29udG9ydC9HRFxcbmNvbnRvcnRpb24vTVNcXG5jb250b3J0aW9uaXN0L1NNXFxuY29udHJhXFxuY29udHJhYmFuZC9NXFxuY29udHJhYmFzc29vbi9TXFxuY29udHJhY2VwdGlvbi9NXFxuY29udHJhY2VwdGl2ZS9TTVxcbmNvbnRyYWN0L01ER1xcbmNvbnRyYWN0aWJsZVxcbmNvbnRyYWN0aWxlXFxuY29udHJhY3RpbGl0eVxcbmNvbnRyYWN0aW9uL1NcXG5jb250cmFjdHVhbC9ZXFxuY29udHJhZGljdC9TREdcXG5jb250cmFkaWN0aW9uL1NNXFxuY29udHJhZGljdG9yeVxcbmNvbnRyYWRpc3RpbmN0aW9uL01TXFxuY29udHJhZmxvdy9TXFxuY29udHJhaWwvTVNcXG5jb250cmFpbmRpY2F0ZS9HTlhEU1xcbmNvbnRyYWluZGljYXRpb24vTVxcbmNvbnRyYWx0by9TTVxcbmNvbnRyYXB0aW9uL1NNXFxuY29udHJhcHVudGFsL1lcXG5jb250cmFyaWFuL1NNXFxuY29udHJhcmlhbmlzbVxcbmNvbnRyYXJpZXR5L01cXG5jb250cmFyaWx5XFxuY29udHJhcmluZXNzL01cXG5jb250cmFyaXdpc2VcXG5jb250cmFyeS9QU01cXG5jb250cmFzdC9NREdTXFxuY29udHJhdmVuZS9HRFNcXG5jb250cmF2ZW50aW9uL1NNXFxuY29udHJldGVtcHMvTVxcbmNvbnRyaWJ1dGUvWEdORFxcbmNvbnRyaWJ1dGlvbi9NXFxuY29udHJpYnV0b3IvTVNcXG5jb250cmlidXRvcnlcXG5jb250cml0aW9uL01cXG5jb250cml2YW5jZS9NU1xcbmNvbnRyaXZlL1pHRFJTXFxuY29udHJpdmVyL01cXG5jb250cm9sJ3NcXG5jb250cm9sL0NTXFxuY29udHJvbGxhYmxlL1VcXG5jb250cm9sbGVkL1VDXFxuY29udHJvbGxlci9NU1xcbmNvbnRyb2xsaW5nL0NcXG5jb250cm92ZXJzaWFsL1lcXG5jb250cm92ZXJzeS9TTVxcbmNvbnRyb3ZlcnQvRFNHXFxuY29udHJvdmVydGlibGUvSVxcbmNvbnR1bWFjaW91cy9ZXFxuY29udHVtYWN5L01cXG5jb250dW1lbGlvdXNcXG5jb250dW1lbHkvU01cXG5jb250dXNlL1hEU0dOXFxuY29udHVzaW9uL01cXG5jb251bmRydW0vU01cXG5jb251cmJhdGlvbi9NU1xcbmNvbnZhbGVzY2UvRFNHXFxuY29udmFsZXNjZW5jZS9NU1xcbmNvbnZhbGVzY2VudC9TTVxcbmNvbnZlY3Rpb24vTVxcbmNvbnZlY3Rpb25hbFxcbmNvbnZlY3RpdmVcXG5jb252ZWN0b3IvU1xcbmNvbnZlbmUvQURTR1xcbmNvbnZlbmVyL01TXFxuY29udmVuaWVuY2UvSU1TXFxuY29udmVuaWVudC9JWVxcbmNvbnZlbnQvU01cXG5jb252ZW50aWNsZS9NU1xcbmNvbnZlbnRpb24vU01cXG5jb252ZW50aW9uYWwvVVlcXG5jb252ZW50aW9uYWxpdHkvVU1cXG5jb252ZW50aW9uYWxpemUvR0RTXFxuY29udmVudGlvbmVlci9TXFxuY29udmVyZ2VuY2UvTVNcXG5jb252ZXJnZW50XFxuY29udmVyc2FudFxcbmNvbnZlcnNhdGlvbi9NU1xcbmNvbnZlcnNhdGlvbmFsL1lcXG5jb252ZXJzYXRpb25hbGlzdC9TTVxcbmNvbnZlcnNlL1lcXG5jb252ZXJ0J3NcXG5jb252ZXJ0L0FHU0RcXG5jb252ZXJ0ZWQvVVxcbmNvbnZlcnRlci9TTVxcbmNvbnZlcnRpYmlsaXR5L01cXG5jb252ZXJ0aWJsZS9TTVxcbmNvbnZleC9ZXFxuY29udmV4aXR5L01cXG5jb252ZXkvU0JER1xcbmNvbnZleWFuY2UvTUdTXFxuY29udmV5b3IvTVNcXG5jb252aWN0L0dTTURcXG5jb252aWN0aW9uL01TXFxuY29udmluY2UvR0RTXFxuY29udmluY2VkL1VcXG5jb252aW5jaW5nL1VZXFxuY29udml2aWFsL1lcXG5jb252aXZpYWxpdHkvTVxcbmNvbnZva2UvRFNHXFxuY29udm9sdXRlZFxcbmNvbnZvbHV0aW9uL01TXFxuY29udm95L1NNREdcXG5jb252dWxzZS9HTlZYRFNcXG5jb252dWxzaW9uL01cXG5jb252dWxzaXZlL1lcXG5jb255L01cXG5jb28vR1NNRFxcbmNvb2snc1xcbmNvb2svQURHU1xcbmNvb2tib29rL01TXFxuY29va2VkL1VcXG5jb29rZXIvU01cXG5jb29rZXJ5L1NNXFxuY29va2hvdXNlL1NcXG5jb29raWUvU01cXG5jb29raW5nL01cXG5jb29rb3V0L1NNXFxuY29va3dhcmUvU01cXG5jb29sL01EUllaVEdQU1xcbmNvb2xhbnQvU01cXG5jb29sZXIvTVxcbmNvb2xpZS9TTVxcbmNvb2xuZXNzL01cXG5jb29uL01TIVxcbmNvb25za2luL01TXFxuY29vcC9NRFJaR1NcXG5jb29wZXIvTURHXFxuY29vcGVyYWdlL01cXG5jb29wZXJhdGUvRFNHTlZcXG5jb29wZXJhdGlvbi9NXFxuY29vcGVyYXRpdmUvUE1ZU1xcbmNvb3BlcmF0aXZlbmVzcy9NXFxuY29vcGVyYXRvci9TTVxcbmNvb3JkaW5hdGUvRFNNWUdOXFxuY29vcmRpbmF0ZWQvVVxcbmNvb3JkaW5hdGlvbi9NXFxuY29vcmRpbmF0b3IvTVNcXG5jb290L01TXFxuY29vdGllL1NNXFxuY29wL0dKU01EXFxuY29wYWNldGljXFxuY29wYXkvTVxcbmNvcGUvTVNcXG5jb3BpZXIvU01cXG5jb3BpbG90L1NNXFxuY29waW5nL01cXG5jb3Bpb3VzL1BZXFxuY29waW91c25lc3MvTVxcbmNvcHBlZFxcbmNvcHBlci9TTVxcbmNvcHBlcmhlYWQvU01cXG5jb3BwZXJwbGF0ZS9NXFxuY29wcGVyeVxcbmNvcHBpbmdcXG5jb3ByYS9NXFxuY29wc2UvU01cXG5jb3B0ZXIvU01cXG5jb3B1bGEvU01cXG5jb3B1bGF0ZS9HTlZEU1xcbmNvcHVsYXRpb24vTVxcbmNvcHVsYXRpdmUvU01cXG5jb3B5J3NcXG5jb3B5L0FEU0dcXG5jb3B5Ym9vay9TTVxcbmNvcHljYXQvTVNcXG5jb3B5Y2F0dGVkXFxuY29weWNhdHRpbmdcXG5jb3B5aXN0L01TXFxuY29weWxlZnRcXG5jb3B5cmlnaHQvR1NNRFxcbmNvcHl3cml0ZXIvTVNcXG5jb3F1ZXRyeS9TTVxcbmNvcXVldHRlL0RTTUdcXG5jb3F1ZXR0aXNoL1lcXG5jb3JcXG5jb3JhY2xlL1NNXFxuY29yYWwvU01cXG5jb3JiZWwvU01cXG5jb3JkL0VBU0dETVxcbmNvcmRhZ2UvTVxcbmNvcmRpYWwvU01ZXFxuY29yZGlhbGl0eS9NXFxuY29yZGlsbGVyYS9NU1xcbmNvcmRpdGUvTVxcbmNvcmRsZXNzXFxuY29yZG9uL1NNREdcXG5jb3Jkb3Zhbi9NXFxuY29yZHVyb3kvTVNcXG5jb3JkdXJveXMvTVxcbmNvcmUvTVpHRFJTXFxuY29yZWxpZ2lvbmlzdC9TXFxuY29yZXIvTVxcbmNvcmVzcG9uZGVudC9NU1xcbmNvcmdpL1NNXFxuY29yaWFuZGVyL01cXG5jb3JrJ3NcXG5jb3JrL1VER1NcXG5jb3JrYWdlXFxuY29ya2VyL1NNXFxuY29ya3NjcmV3L1NNREdcXG5jb3JtL01TXFxuY29ybW9yYW50L1NNXFxuY29ybi9NRFJaR1NcXG5jb3JuYmFsbC9NU1xcbmNvcm5icmVhZC9NXFxuY29ybmNvYi9NU1xcbmNvcm5jcmFrZS9TXFxuY29ybmVhL1NNXFxuY29ybmVhbFxcbmNvcm5lci9HTURcXG5jb3JuZXJzdG9uZS9TTVxcbmNvcm5ldC9TTVxcbmNvcm5maWVsZC9TXFxuY29ybmZsYWtlcy9NXFxuY29ybmZsb3VyXFxuY29ybmZsb3dlci9TTVxcbmNvcm5pY2UvTVNcXG5jb3JuaWx5XFxuY29ybmluZXNzL01cXG5jb3JubWVhbC9NXFxuY29ybnJvdy9NREdTXFxuY29ybnN0YWxrL1NNXFxuY29ybnN0YXJjaC9NXFxuY29ybnVjb3BpYS9NU1xcbmNvcm55L1BSVFxcbmNvcm9sbGEvTVNcXG5jb3JvbGxhcnkvU01cXG5jb3JvbmEvU01cXG5jb3JvbmFsL01TXFxuY29yb25hcnkvU01cXG5jb3JvbmF0aW9uL1NNXFxuY29yb25hdmlydXMvTVNcXG5jb3JvbmVyL01TXFxuY29yb25ldC9NU1xcbmNvcnBcXG5jb3Jwb3JhXFxuY29ycG9yYWwvU01cXG5jb3Jwb3JhdGUvWFlOXFxuY29ycG9yYXRpb24vSU1cXG5jb3Jwb3JhdGlzbVxcbmNvcnBvcmVhbC9ZXFxuY29ycG9yZWFsaXR5L01cXG5jb3Jwcy9NU1xcbmNvcnBzZS9NXFxuY29ycHNtYW4vTVxcbmNvcnBzbWVuXFxuY29ycHVsZW5jZS9NXFxuY29ycHVsZW50XFxuY29ycHVzL01cXG5jb3JwdXNjbGUvTVNcXG5jb3JwdXNjdWxhclxcbmNvcnJcXG5jb3JyYWwvU01cXG5jb3JyYWxsZWRcXG5jb3JyYWxsaW5nXFxuY29ycmVjdC9EUllUR1ZTQlBcXG5jb3JyZWN0ZWQvVVxcbmNvcnJlY3Rpb24vU01cXG5jb3JyZWN0aW9uYWxcXG5jb3JyZWN0aXZlL1NNXFxuY29ycmVjdG5lc3MvSU1cXG5jb3JyZWN0b3JcXG5jb3JyZWxhdGUvWERTTUdOVlxcbmNvcnJlbGF0ZWQvVVxcbmNvcnJlbGF0aW9uL01cXG5jb3JyZWxhdGlvbmFsXFxuY29ycmVsYXRpdmUvTVNcXG5jb3JyZXNwb25kL1NER1xcbmNvcnJlc3BvbmRlbmNlL1NNXFxuY29ycmVzcG9uZGVudC9TTVxcbmNvcnJlc3BvbmRpbmcvWVxcbmNvcnJpZG9yL1NNXFxuY29ycmllL1NcXG5jb3Jyb2JvcmF0ZS9HTlZEU1hcXG5jb3Jyb2JvcmF0ZWQvVVxcbmNvcnJvYm9yYXRpb24vTVxcbmNvcnJvYm9yYXRvci9TTVxcbmNvcnJvYm9yYXRvcnlcXG5jb3Jyb2RlL0dEU1xcbmNvcnJvc2lvbi9NXFxuY29ycm9zaXZlL1NNWVxcbmNvcnJ1Z2F0ZS9HTlhEU1xcbmNvcnJ1Z2F0aW9uL01cXG5jb3JydXB0L0RSWVBTVEdcXG5jb3JydXB0aWJpbGl0eS9JTVxcbmNvcnJ1cHRpYmxlL0lcXG5jb3JydXB0aW9uL01TXFxuY29ycnVwdG5lc3MvTVxcbmNvcnNhZ2UvTVNcXG5jb3JzYWlyL01TXFxuY29yc2V0L1NHTURcXG5jb3J0ZWdlL01TXFxuY29ydGV4L01cXG5jb3J0aWNhbFxcbmNvcnRpY2VzXFxuY29ydGlzb2xcXG5jb3J0aXNvbmUvTVxcbmNvcnVuZHVtL01cXG5jb3J1c2NhdGUvR05EU1xcbmNvcnVzY2F0aW9uL01cXG5jb3J2ZXR0ZS9TTVxcbmNvcy9NXFxuY29zaC9EU0dcXG5jb3NpZ24vWkdTRFJcXG5jb3NpZ25hdG9yeS9TTVxcbmNvc2lnbmVyL01cXG5jb3NpbmUvU01cXG5jb3NtZXRpYy9TTVxcbmNvc21ldGljYWxseVxcbmNvc21ldGljaWFuL01TXFxuY29zbWV0b2xvZ2lzdC9NU1xcbmNvc21ldG9sb2d5L01cXG5jb3NtaWNcXG5jb3NtaWNhbGx5XFxuY29zbW9nb25pc3QvU01cXG5jb3Ntb2dvbnkvU01cXG5jb3Ntb2xvZ2ljYWxcXG5jb3Ntb2xvZ2lzdC9TTVxcbmNvc21vbG9neS9TTVxcbmNvc21vbmF1dC9TTVxcbmNvc21vcG9saXRhbi9NU1xcbmNvc21vcG9saXRhbmlzbS9NXFxuY29zbW9zL01TXFxuY29zcGxheVxcbmNvc3BvbnNvci9HU01EXFxuY29zc2V0L1NHRFxcbmNvc3NldHRlZFxcbmNvc3NldHRpbmdcXG5jb3N0L01EWUdTSlxcbmNvc3Rhci9TTVxcbmNvc3RhcnJlZFxcbmNvc3RhcnJpbmdcXG5jb3N0bGluZXNzL01cXG5jb3N0bHkvUFRSXFxuY29zdHVtZS9NWkdEUlNcXG5jb3N0dW1lci9NXFxuY29zdHVtaWVyL1NcXG5jb3QvU01cXG5jb3RhbmdlbnQvTVNcXG5jb3RlL01TXFxuY290ZXJpZS9NU1xcbmNvdGVybWlub3VzXFxuY290aWxsaW9uL1NNXFxuY290dGFnZS9NWkdSU1xcbmNvdHRhZ2VyL01cXG5jb3R0YXIvU01cXG5jb3R0ZXIvU01cXG5jb3R0b24vU0dNRFxcbmNvdHRvbm1vdXRoL01cXG5jb3R0b25tb3V0aHNcXG5jb3R0b25zZWVkL01TXFxuY290dG9udGFpbC9NU1xcbmNvdHRvbndvb2QvU01cXG5jb3R0b255XFxuY290eWxlZG9uL01TXFxuY291Y2gvTURTR1xcbmNvdWNoZXR0ZS9TXFxuY291Z2FyL1NNXFxuY291Z2gvTURHXFxuY291Z2hzXFxuY291bGRcXG5jb3VsZCd2ZVxcbmNvdWxkbid0XFxuY291bGVlL1NNXFxuY291bGlzXFxuY291bG9tYi9NU1xcbmNvdW5jaWwvTVNcXG5jb3VuY2lsbWFuL01cXG5jb3VuY2lsbWVuXFxuY291bmNpbG9yL01TXFxuY291bmNpbHBlcnNvbi9TTVxcbmNvdW5jaWx3b21hbi9NXFxuY291bmNpbHdvbWVuXFxuY291bnNlbC9KTURHU1xcbmNvdW5zZWxvci9NU1xcbmNvdW50L0VBU01ER1xcbmNvdW50YWJsZS9VXFxuY291bnRhYmx5XFxuY291bnRkb3duL01TXFxuY291bnRlZC9VXFxuY291bnRlbmFuY2Unc1xcbmNvdW50ZW5hbmNlL0VHRFNcXG5jb3VudGVyL0VNU1xcbmNvdW50ZXJhY3QvU0dWRFxcbmNvdW50ZXJhY3Rpb24vTVNcXG5jb3VudGVyYXJndW1lbnQvU1xcbmNvdW50ZXJhdHRhY2svR01EU1xcbmNvdW50ZXJiYWxhbmNlL01HRFNcXG5jb3VudGVyYmxhc3QvU1xcbmNvdW50ZXJjbGFpbS9HU01EXFxuY291bnRlcmNsb2Nrd2lzZVxcbmNvdW50ZXJjdWx0dXJlL1NNXFxuY291bnRlcmVkXFxuY291bnRlcmVzcGlvbmFnZS9NXFxuY291bnRlcmV4YW1wbGUvU1xcbmNvdW50ZXJmYWN0dWFsXFxuY291bnRlcmZlaXQvWkdNRFJTXFxuY291bnRlcmZlaXRlci9NXFxuY291bnRlcmZvaWwvTVNcXG5jb3VudGVyaW5nXFxuY291bnRlcmluc3VyZ2VuY3kvU01cXG5jb3VudGVyaW50ZWxsaWdlbmNlL01cXG5jb3VudGVybWFuL01cXG5jb3VudGVybWFuZC9HTURTXFxuY291bnRlcm1lYXN1cmUvU01cXG5jb3VudGVybWVsb2R5L1NcXG5jb3VudGVybWVuXFxuY291bnRlcm1vdmUvU1xcbmNvdW50ZXJvZmZlbnNpdmUvU01cXG5jb3VudGVyb2ZmZXIvU01cXG5jb3VudGVycGFuZS9TTVxcbmNvdW50ZXJwYXJ0L1NNXFxuY291bnRlcnBldGl0aW9uXFxuY291bnRlcnBvaW50L01ER1NcXG5jb3VudGVycG9pc2UvTUdEU1xcbmNvdW50ZXJwcm9kdWN0aXZlXFxuY291bnRlcnJldm9sdXRpb24vU01cXG5jb3VudGVycmV2b2x1dGlvbmFyeS9TTVxcbmNvdW50ZXJzaWduL0dTTURcXG5jb3VudGVyc2lnbmF0dXJlL01TXFxuY291bnRlcnNpbmsvR1NNXFxuY291bnRlcnNweS9TTVxcbmNvdW50ZXJzdHJva2UvU01cXG5jb3VudGVyc3Vua1xcbmNvdW50ZXJ0ZW5vci9NU1xcbmNvdW50ZXJ2YWlsL0dTRFxcbmNvdW50ZXJ3ZWlnaHQvTVNcXG5jb3VudGVzcy9NU1xcbmNvdW50bGVzc1xcbmNvdW50cmlmaWVkXFxuY291bnRyeS9TTVxcbmNvdW50cnltYW4vTVxcbmNvdW50cnltZW5cXG5jb3VudHJ5c2lkZS9NU1xcbmNvdW50cnl3aWRlXFxuY291bnRyeXdvbWFuL01cXG5jb3VudHJ5d29tZW5cXG5jb3VudHkvU01cXG5jb3VudHl3aWRlXFxuY291cCdzXFxuY291cC9BU1xcbmNvdXBlL1NNXFxuY291cGxlJ3NcXG5jb3VwbGUvVUNHU0RcXG5jb3VwbGV0L01TXFxuY291cGxpbmcvU01cXG5jb3Vwb24vU01cXG5jb3VyYWdlL01cXG5jb3VyYWdlb3VzL1lQXFxuY291cmFnZW91c25lc3MvTVxcbmNvdXJnZXR0ZS9TXFxuY291cmllci9NRFNHXFxuY291cnNlL0VER01TXFxuY291cnNlYm9vay9TXFxuY291cnNlci9NU1xcbmNvdXJzZXdvcmtcXG5jb3VydC9TTURZR1xcbmNvdXJ0ZW91cy9FWVxcbmNvdXJ0ZW91c25lc3MvTVxcbmNvdXJ0ZXNhbi9TTVxcbmNvdXJ0ZXN5L0VTTVxcbmNvdXJ0aG91c2UvTVNcXG5jb3VydGllci9TTVxcbmNvdXJ0bGluZXNzL01cXG5jb3VydGx5L1BSVFxcbmNvdXJ0cm9vbS9NU1xcbmNvdXJ0c2hpcC9NU1xcbmNvdXJ0eWFyZC9NU1xcbmNvdXNjb3VzL01cXG5jb3VzaW4vU01cXG5jb3V0dXJlL01cXG5jb3V0dXJpZXIvTVNcXG5jb3ZhbGVudFxcbmNvdmFyaWFuY2VcXG5jb3ZhcmlhbnRcXG5jb3ZlL01TXFxuY292ZW4vU01cXG5jb3ZlbmFudC9NRFNHXFxuY292ZXInc1xcbmNvdmVyL0FFVUdEU1xcbmNvdmVyYWdlL01cXG5jb3ZlcmFsbC9NU1xcbmNvdmVyaW5nJ3NcXG5jb3ZlcmluZ3NcXG5jb3ZlcmxldC9NU1xcbmNvdmVydC9TUE1ZXFxuY292ZXJ0bmVzcy9NXFxuY292ZXQvU0RHXFxuY292ZXRvdXMvWVBcXG5jb3ZldG91c25lc3MvTVxcbmNvdmV5L1NNXFxuY293L1pHU01EUlxcbmNvd2FyZC9TTVlcXG5jb3dhcmRpY2UvTVxcbmNvd2FyZGxpbmVzcy9NXFxuY293YmVsbC9NU1xcbmNvd2JpcmQvTVNcXG5jb3dib3kvU01cXG5jb3djYXRjaGVyL01TXFxuY293ZXIvREdcXG5jb3dnaXJsL01TXFxuY293aGFuZC9NU1xcbmNvd2hlcmQvTVNcXG5jb3doaWRlL01TXFxuY293bC9NR1NKXFxuY293bGljay9NU1xcbmNvd2xpbmcvTVxcbmNvd21hbi9NXFxuY293bWVuXFxuY293b3JrZXIvTVNcXG5jb3dwYXQvU1xcbmNvd3Bva2UvTVNcXG5jb3dwb3gvTVxcbmNvd3B1bmNoZXIvU01cXG5jb3dyaWUvU01cXG5jb3dzaGVkL1NcXG5jb3dzbGlwL1NNXFxuY294L0dEU1xcbmNveGNvbWIvTVNcXG5jb3hzd2Fpbi9NU1xcbmNveS9UUFJZXFxuY295bmVzcy9NXFxuY295b3RlL1NNXFxuY295cHUvU01cXG5jb3plbi9TREdcXG5jb3plbmFnZS9NXFxuY296aWx5XFxuY296aW5lc3MvTVxcbmNvenkvUlNNVFBcXG5jcGRcXG5jcGxcXG5jcHNcXG5jcmFiL01TXFxuY3JhYmJlZFxcbmNyYWJiZXIvU01cXG5jcmFiYmlseVxcbmNyYWJiaW5lc3MvTVxcbmNyYWJiaW5nXFxuY3JhYmJ5L1BSVFxcbmNyYWJncmFzcy9NXFxuY3JhYmxpa2VcXG5jcmFid2lzZVxcbmNyYWNrL1NNRFJZWkdKXFxuY3JhY2tkb3duL01TXFxuY3JhY2tlci9NXFxuY3JhY2tlcmphY2svTVNcXG5jcmFja2hlYWQvTVNcXG5jcmFja2xlL0RTSk1HXFxuY3JhY2tsaW5nL01cXG5jcmFja3BvdC9NU1xcbmNyYWNrdXAvU01cXG5jcmFkbGUvRFNNR1xcbmNyYWZ0L1NNREdcXG5jcmFmdGlseVxcbmNyYWZ0aW5lc3MvTVxcbmNyYWZ0c21hbi9NXFxuY3JhZnRzbWFuc2hpcC9NXFxuY3JhZnRzbWVuXFxuY3JhZnRzcGVvcGxlXFxuY3JhZnRzd29tYW4vTVxcbmNyYWZ0c3dvbWVuXFxuY3JhZnR5L1JUUFxcbmNyYWcvTVNcXG5jcmFnZ2luZXNzL01cXG5jcmFnZ3kvUlBUXFxuY3JhbS9TXFxuY3JhbW1lZFxcbmNyYW1tZXIvU1xcbmNyYW1taW5nXFxuY3JhbXAvU01ER1xcbmNyYW1waW5nL01cXG5jcmFtcG9uL1NNXFxuY3JhbmJlcnJ5L1NNXFxuY3JhbmUvRFNNR1xcbmNyYW5pYWxcXG5jcmFuaXVtL1NNXFxuY3JhbmsvU01ER1xcbmNyYW5rY2FzZS9TTVxcbmNyYW5raWx5XFxuY3JhbmtpbmVzcy9NXFxuY3JhbmtzaGFmdC9NU1xcbmNyYW5reS9QUlRcXG5jcmFubnkvRFNNXFxuY3JhcC9NU1xcbmNyYXBlL1NNXFxuY3JhcHBlZFxcbmNyYXBwZXIvU1xcbmNyYXBwaWUvUlNNVFxcbmNyYXBwaW5nXFxuY3JhcHB5XFxuY3JhcHMvTVxcbmNyYXBzaG9vdGVyL01TXFxuY3Jhc2gvTURTR1xcbmNyYXNzL1JZVFBcXG5jcmFzc25lc3MvTVxcbmNyYXRlL0RSU01aR1xcbmNyYXRlci9NREdcXG5jcmF2YXQvU01cXG5jcmF2ZS9EU0dKXFxuY3JhdmVuL1NNWVBcXG5jcmF2ZW5uZXNzL01cXG5jcmF2aW5nL01cXG5jcmF3L01TXFxuY3Jhd2RhZC9TTVxcbmNyYXdsL1NNRFJaR1xcbmNyYXdsZXIvTVxcbmNyYXdsc3BhY2UvU01cXG5jcmF3bHkvVFJTTVxcbmNyYXkvU1xcbmNyYXlmaXNoL01TXFxuY3JheW9sYS9TXFxuY3JheW9uL0dTTURcXG5jcmF6ZS9EU01HXFxuY3JhemlseVxcbmNyYXppbmVzcy9NXFxuY3JhenkvUFJTTVRcXG5jcmVhay9TTURHXFxuY3JlYWtpbHlcXG5jcmVha2luZXNzL01cXG5jcmVha3kvUlBUXFxuY3JlYW0vU01EUlpHXFxuY3JlYW1lci9NXFxuY3JlYW1lcnkvU01cXG5jcmVhbWlseVxcbmNyZWFtaW5lc3MvTVxcbmNyZWFteS9SUFRcXG5jcmVhc2UvSUNHTVNEXFxuY3JlYXRlL0tBRFNHTlZcXG5jcmVhdGlvbidzL0tcXG5jcmVhdGlvbi9BU01cXG5jcmVhdGlvbmlzbS9TTVxcbmNyZWF0aW9uaXN0L1NNXFxuY3JlYXRpdmUvU01ZUFxcbmNyZWF0aXZlbmVzcy9NXFxuY3JlYXRpdml0eS9NXFxuY3JlYXRvci9NU1xcbmNyZWF0dXJlL1NNXFxuY3JlY2hlL1NNXFxuY3JlZFxcbmNyZWRlbmNlL01cXG5jcmVkZW50aWFsL1NHTURcXG5jcmVkZW56YS9TTVxcbmNyZWRpYmlsaXR5L0lNXFxuY3JlZGlibGUvSVxcbmNyZWRpYmx5L0lcXG5jcmVkaXQvRUdTQk1EXFxuY3JlZGl0YWJseS9FXFxuY3JlZGl0b3IvU01cXG5jcmVkaXR3b3J0aHkvUFxcbmNyZWRvL1NNXFxuY3JlZHVsaXR5L0lNXFxuY3JlZHVsb3VzL0lZXFxuY3JlZHVsb3VzbmVzcy9NXFxuY3JlZWQvU01cXG5jcmVlay9TTVxcbmNyZWVsL1NNXFxuY3JlZXAvU01SWkdcXG5jcmVlcGVyL01cXG5jcmVlcGlseVxcbmNyZWVwaW5lc3MvTVxcbmNyZWVweS9UUFJcXG5jcmVtYWlucy9NXFxuY3JlbWF0ZS9HTkRTWFxcbmNyZW1hdGlvbi9NXFxuY3JlbWF0b3JpYVxcbmNyZW1hdG9yaXVtL01TXFxuY3JlbWF0b3J5L1NNXFxuY3JlbWUvU01cXG5jcmVuZWxhdGUvWEdORFNcXG5jcmVuZWxhdGlvbi9NXFxuY3Jlb2xlL1NNXFxuY3Jlb3NvdGUvTUdEU1xcbmNyZXBlL1NNXFxuY3JlcHRcXG5jcmVwdXNjdWxhclxcbmNyZXNjZW5kby9DU01cXG5jcmVzY2VudC9NU1xcbmNyZXNzL01cXG5jcmVzdC9TTURHXFxuY3Jlc3RmYWxsZW5cXG5jcmVzdGxlc3NcXG5jcmV0YWNlb3VzXFxuY3JldGluL1NNXFxuY3JldGluaXNtL01cXG5jcmV0aW5vdXNcXG5jcmV0b25uZS9NXFxuY3JldmFzc2UvU01cXG5jcmV2aWNlL01TXFxuY3Jldy9NREdTXFxuY3Jld2VsL01cXG5jcmV3ZWx3b3JrL01cXG5jcmV3bWFuL01cXG5jcmV3bWVuXFxuY3JpYi9NU1xcbmNyaWJiYWdlL01cXG5jcmliYmVkXFxuY3JpYmJlci9NU1xcbmNyaWJiaW5nXFxuY3JpY2svU01ER1xcbmNyaWNrZXQvTVJTWkdcXG5jcmlja2V0ZXIvTVxcbmNyaWVyL01cXG5jcmlrZXlcXG5jcmltZS9TTVxcbmNyaW1pbmFsL01ZU1xcbmNyaW1pbmFsaXR5L01cXG5jcmltaW5hbGl6ZS9DR0RTXFxuY3JpbWlub2xvZ2lzdC9NU1xcbmNyaW1pbm9sb2d5L01cXG5jcmltcC9TTURHXFxuY3JpbXNvbi9TTURHXFxuY3JpbmdlL0RTTUdcXG5jcmlua2xlL0RTTUdcXG5jcmlua2x5L1JUXFxuY3Jpbm9saW5lL1NNXFxuY3JpcGVzXFxuY3JpcHBsZS9EUlNNWkdcXG5jcmlwcGxlci9NXFxuY3JpcHBsZXdhcmVcXG5jcmlwcGxpbmcvWVxcbmNyaXNlc1xcbmNyaXNpcy9NXFxuY3Jpc3AvU01EUllUR1BcXG5jcmlzcGJyZWFkL1NcXG5jcmlzcGluZXNzL01cXG5jcmlzcG5lc3MvTVxcbmNyaXNweS9QUlRcXG5jcmlzc2Nyb3NzL0dNRFNcXG5jcml0ZXJpYVxcbmNyaXRlcmlvbi9NXFxuY3JpdGljL1NNXFxuY3JpdGljYWwvVVlcXG5jcml0aWNhbGl0eVxcbmNyaXRpY2lzbS9NU1xcbmNyaXRpY2l6ZS9aR0RSU1xcbmNyaXRpY2l6ZXIvTVxcbmNyaXRpcXVlL01HRFNcXG5jcml0dGVyL1NNXFxuY3JvYWsvU01ER1xcbmNyb2FreS9SVFxcbmNyb2NoZXQvU01EUlpHXFxuY3JvY2hldGVyL01cXG5jcm9jaGV0aW5nL01cXG5jcm9jay9TTURcXG5jcm9ja2VyeS9NXFxuY3JvY29kaWxlL1NNXFxuY3JvY3VzL01TXFxuY3JvZnQvU1JaR1xcbmNyb2lzc2FudC9NU1xcbmNyb25lL1NNXFxuY3JvbnkvU01cXG5jcm9ueWlzbS9NXFxuY3Jvb2svU01ER1xcbmNyb29rZWQvUFRSWVxcbmNyb29rZWRuZXNzL01cXG5jcm9va25lY2svU01cXG5jcm9vbi9TTURSWkdcXG5jcm9vbmVyL01cXG5jcm9wL01TXFxuY3JvcGxhbmQvU01cXG5jcm9wcGVkXFxuY3JvcHBlci9NU1xcbmNyb3BwaW5nXFxuY3JvcXVldC9NXFxuY3JvcXVldHRlL1NNXFxuY3Jvc2llci9NU1xcbmNyb3NzJ3NcXG5jcm9zcy9BVUdUU0RcXG5jcm9zc2Jhci9TTVxcbmNyb3NzYmVhbS9NU1xcbmNyb3NzYm9uZXMvTVxcbmNyb3NzYm93L1NNXFxuY3Jvc3Nib3dtYW4vTVxcbmNyb3NzYm93bWVuXFxuY3Jvc3NicmVkXFxuY3Jvc3NicmVlZC9TR01cXG5jcm9zc2NoZWNrL1NNREdcXG5jcm9zc2N1cnJlbnQvTVNcXG5jcm9zc2N1dC9TTVxcbmNyb3NzY3V0dGluZ1xcbmNyb3NzZXJcXG5jcm9zc2ZpcmUvTVNcXG5jcm9zc2hhdGNoL0dEU1xcbmNyb3NzaW5nL1NNXFxuY3Jvc3NseVxcbmNyb3NzbmVzcy9NXFxuY3Jvc3NvdmVyL01TXFxuY3Jvc3NwYXRjaC9NU1xcbmNyb3NzcGllY2UvU01cXG5jcm9zc3JvYWQvTVNcXG5jcm9zc3JvYWRzL01cXG5jcm9zc3Rvd25cXG5jcm9zc3dhbGsvTVNcXG5jcm9zc3dpbmQvTVNcXG5jcm9zc3dpc2VcXG5jcm9zc3dvcmQvTVNcXG5jcm90Y2gvTVNcXG5jcm90Y2hldC9TTVxcbmNyb3RjaGV0eVxcbmNyb3VjaC9HTURTXFxuY3JvdXAvTVxcbmNyb3VwaWVyL01cXG5jcm91cHkvWlRSXFxuY3JvdXRvbi9NU1xcbmNyb3cvTURHU1xcbmNyb3diYXIvTVNcXG5jcm93ZC9TTURHXFxuY3Jvd2RlZC9VXFxuY3Jvd2RmdW5kL1NER1xcbmNyb3dmZWV0XFxuY3Jvd2Zvb3QvU01cXG5jcm93bi9TTURHXFxuY3Jvd25lZC9VXFxuY3J1Y2lhbC9ZXFxuY3J1Y2libGUvU01cXG5jcnVjaWZpeC9NU1xcbmNydWNpZml4aW9uL1NNXFxuY3J1Y2lmb3JtL1NNXFxuY3J1Y2lmeS9EU0dcXG5jcnVkL01cXG5jcnVkZHkvVFJcXG5jcnVkZS9STVlUUFxcbmNydWRlbmVzcy9NXFxuY3J1ZGl0ZXMvTVxcbmNydWRpdHkvU01cXG5jcnVlbC9SWVBUXFxuY3J1ZWxuZXNzL01cXG5jcnVlbHR5L1NNXFxuY3J1ZXQvU01cXG5jcnVmdC9TRFxcbmNydWZ0eVxcbmNydWlzZS9EUlNNWkdcXG5jcnVpc2VyL01cXG5jcnVsbGVyL01TXFxuY3J1bWIvU01EWUdcXG5jcnVtYmxlL01HRFNcXG5jcnVtYmxpbmVzcy9NXFxuY3J1bWJseS9UUFJcXG5jcnVtYnkvVFJcXG5jcnVtbWluZXNzL01cXG5jcnVtbXkvUFRSXFxuY3J1bXBldC9NU1xcbmNydW1wbGUvTUdEU1xcbmNydW5jaC9HTURSU1xcbmNydW5jaGluZXNzL01cXG5jcnVuY2h5L1RSUFxcbmNydXBwZXIvTVNcXG5jcnVzYWRlL01aR0RSU1xcbmNydXNhZGVyL01cXG5jcnVzZS9TTVxcbmNydXNoL01EUlNaR1xcbmNydXNoZXIvTVxcbmNydXNoaW5nL1lcXG5jcnVzdC9TTURHXFxuY3J1c3RhY2Vhbi9TTVxcbmNydXN0YWxcXG5jcnVzdGlseVxcbmNydXN0aW5lc3MvTVxcbmNydXN0eS9UUlBcXG5jcnV0Y2gvTVNcXG5jcnV4L01TXFxuY3J5L1pHSkRSU01cXG5jcnliYWJ5L1NNXFxuY3J5b2dlbmljL1NcXG5jcnlvZ2VuaWNzL01cXG5jcnlvbmljc1xcbmNyeW9zdXJnZXJ5L01cXG5jcnlwdC9TTVxcbmNyeXB0YW5hbHlzaXNcXG5jcnlwdGljXFxuY3J5cHRpY2FsbHlcXG5jcnlwdG9jdXJyZW5jeS9TTVxcbmNyeXB0b2dyYW0vU01cXG5jcnlwdG9ncmFwaGVyL1NNXFxuY3J5cHRvZ3JhcGh5L01cXG5jcnlzdGFsL1NNXFxuY3J5c3RhbGxpbmVcXG5jcnlzdGFsbGl6YXRpb24vTVxcbmNyeXN0YWxsaXplL0FEU0dcXG5jcnlzdGFsbG9ncmFwaGljXFxuY3J5c3RhbGxvZ3JhcGh5XFxuY3RcXG5jdG5cXG5jdHJcXG5jdVxcbmN1Yi9aR1NNRFJcXG5jdWJieWhvbGUvTVNcXG5jdWJlL01TXFxuY3ViZXIvTVxcbmN1YmljXFxuY3ViaWNhbFxcbmN1YmljbGUvTVNcXG5jdWJpc20vTVxcbmN1YmlzdC9TTVxcbmN1Yml0L1NNXFxuY3Vib2lkL1NcXG5jdWNrb2xkL01EU0dcXG5jdWNrb2xkcnkvTVxcbmN1Y2tvby9TTVxcbmN1Y3VtYmVyL1NNXFxuY3VkL1NNXFxuY3VkZGxlL0RTTUdcXG5jdWRkbHkvVFJcXG5jdWRnZWwvU0dNREpcXG5jdWUvRFNNR1xcbmN1ZmYvTURHU1xcbmN1aXNpbmUvU01cXG5jdWxpbmFyeVxcbmN1bGwvTURHU1xcbmN1bG1pbmF0ZS9YRFNHTlxcbmN1bG1pbmF0aW9uL01cXG5jdWxvdHRlL1NNXFxuY3VscGFiaWxpdHkvTVxcbmN1bHBhYmxlL0lcXG5jdWxwYWJseVxcbmN1bHByaXQvU01cXG5jdWx0L01TXFxuY3VsdGlzbS9NXFxuY3VsdGlzdC9NU1xcbmN1bHRpdmFibGVcXG5jdWx0aXZhci9TTVxcbmN1bHRpdmF0ZS9CRFNHTlxcbmN1bHRpdmF0ZWQvVVxcbmN1bHRpdmF0aW9uL01cXG5jdWx0aXZhdG9yL01TXFxuY3VsdHVyYWwvWVxcbmN1bHR1cmUvTUdEU1xcbmN1bHR1cmVkL1VcXG5jdWx2ZXJ0L01TXFxuY3VtL1NNXFxuY3VtYmVyL1NER1xcbmN1bWJlcnNvbWUvUFxcbmN1bWJlcnNvbWVuZXNzL01cXG5jdW1icm91c1xcbmN1bWluL01cXG5jdW1tZXJidW5kL01TXFxuY3VtbWluZ1xcbmN1bXVsYXRpdmUvWVxcbmN1bXVsaVxcbmN1bXVsb25pbWJpXFxuY3VtdWxvbmltYnVzL01cXG5jdW11bHVzL01cXG5jdW5laWZvcm0vTVxcbmN1bm5pbGluZ3VzL01cXG5jdW5uaW5nL01SWVRcXG5jdW50L01TIVxcbmN1cC9TTVxcbmN1cGJvYXJkL1NNXFxuY3VwY2FrZS9NU1xcbmN1cGZ1bC9TTVxcbmN1cGlkL1NNXFxuY3VwaWRpdHkvTVxcbmN1cG9sYS9TTURcXG5jdXBwYS9TXFxuY3VwcGVkXFxuY3VwcGluZ1xcbmN1cHJpY1xcbmN1ci9TTVlcXG5jdXJhYmlsaXR5L01cXG5jdXJhY2FvXFxuY3VyYWN5L1NNXFxuY3VyYXJlL01cXG5jdXJhdGUvRFNNR1ZcXG5jdXJhdGl2ZS9NU1xcbmN1cmF0b3IvS01TXFxuY3VyYXRvcmlhbFxcbmN1cmIvTURHU1xcbmN1cmJpbmcvTVxcbmN1cmJzaWRlXFxuY3VyYnN0b25lL1NNXFxuY3VyZC9NU1xcbmN1cmRsZS9EU0dcXG5jdXJlJ3NcXG5jdXJlL0taR0JEUlNcXG5jdXJlZC9VXFxuY3VyZXIvS01cXG5jdXJldHRhZ2UvTVxcbmN1cmZldy9TTVxcbmN1cmlhL01cXG5jdXJpYWVcXG5jdXJpZS9TTVxcbmN1cmlvL1NNXFxuY3VyaW9zaXR5L1NNXFxuY3VyaW91cy9ZUFxcbmN1cmlvdXNuZXNzL01cXG5jdXJpdW0vTVxcbmN1cmwnc1xcbmN1cmwvVURHU1xcbmN1cmxlci9TTVxcbmN1cmxldy9TTVxcbmN1cmxpY3VlL0RTTUdcXG5jdXJsaW5lc3MvTVxcbmN1cmxpbmcvTVxcbmN1cmx5L1JQVFxcbmN1cm11ZGdlb24vTVlTXFxuY3VycmFudC9NU1xcbmN1cnJlbmN5L1NNXFxuY3VycmVudCdzXFxuY3VycmVudC9GQVlcXG5jdXJyZW50c1xcbmN1cnJpY3VsYVxcbmN1cnJpY3VsYXJcXG5jdXJyaWN1bHVtL01cXG5jdXJyeS9EU01HXFxuY3Vycnljb21iL1NHTURcXG5jdXJzZS9EU01HVlxcbmN1cnNlZC9ZXFxuY3Vyc2l2ZSdzXFxuY3Vyc2l2ZS9FQVlcXG5jdXJzb3IvU01cXG5jdXJzb3JpbHlcXG5jdXJzb3JpbmVzcy9NXFxuY3Vyc29yeS9QXFxuY3VydC9SWVRQXFxuY3VydGFpbC9HRFNMXFxuY3VydGFpbG1lbnQvU01cXG5jdXJ0YWluL0dNRFNcXG5jdXJ0bmVzcy9NXFxuY3VydHN5L0dEU01cXG5jdXJ2YWNlb3VzL1BcXG5jdXJ2YWNlb3VzbmVzcy9NXFxuY3VydmF0dXJlL1NNXFxuY3VydmUvRFNNR1xcbmN1cnZ5L1JUXFxuY3VzaGlvbi9NRFNHXFxuY3VzaHkvUlRcXG5jdXNwL01TXFxuY3VzcGlkL1NNXFxuY3VzcGlkb3IvU01cXG5jdXNzJ3NcXG5jdXNzL0ZFR1NEXFxuY3Vzc2VkL1BZXFxuY3VzdGFyZC9NU1xcbmN1c3RvZGlhbFxcbmN1c3RvZGlhbi9NU1xcbmN1c3RvZGlhbnNoaXAvTVxcbmN1c3RvZHkvTVxcbmN1c3RvbS9TWk1SXFxuY3VzdG9tYXJpbHlcXG5jdXN0b21hcnkvVVxcbmN1c3RvbWVyL01cXG5jdXN0b21ob3VzZS9TTVxcbmN1c3RvbWl6YXRpb24vTVxcbmN1c3RvbWl6ZS9EU0dcXG5jdXQvVFNNUlxcbmN1dGFuZW91c1xcbmN1dGF3YXkvTVNcXG5jdXRiYWNrL01TXFxuY3V0ZS9ZUFxcbmN1dGVuZXNzL01cXG5jdXRlc3kvVFJcXG5jdXRleS9TXFxuY3V0aWNsZS9NU1xcbmN1dGllL1NNXFxuY3V0bGFzcy9NU1xcbmN1dGxlci9TTVxcbmN1dGxlcnkvTVxcbmN1dGxldC9TTVxcbmN1dG9mZi9TTVxcbmN1dG91dC9TTVxcbmN1dHRlci9TTVxcbmN1dHRocm9hdC9TTVxcbmN1dHRpbmcvTVlTXFxuY3V0dGxlZmlzaC9NU1xcbmN1dHVwL1NNXFxuY3V0d29ybS9NU1xcbmN3XFxuY3d0XFxuY3lhbi9NXFxuY3lhbmlkZS9NXFxuY3lhbm9iYWN0ZXJpYVxcbmN5YmVyYnVsbHkvU01cXG5jeWJlcmNhZmUvU1xcbmN5YmVybmV0aWMvU1xcbmN5YmVybmV0aWNzL01cXG5jeWJlcnB1bmsvU01cXG5jeWJlcnNleFxcbmN5YmVyc3BhY2UvTVNcXG5jeWJvcmcvU01cXG5jeWNsYW1lbi9NU1xcbmN5Y2xlL0FEU01HXFxuY3ljbGljXFxuY3ljbGljYWwvWVxcbmN5Y2xpc3QvTVNcXG5jeWNsb21ldGVyL01TXFxuY3ljbG9uZS9NU1xcbmN5Y2xvbmljXFxuY3ljbG9wZWRpYS9NU1xcbmN5Y2xvcGVzXFxuY3ljbG9wcy9NXFxuY3ljbG90cm9uL01TXFxuY3lnbmV0L01TXFxuY3lsaW5kZXIvTVNcXG5jeWxpbmRyaWNhbFxcbmN5bWJhbC9NU1xcbmN5bWJhbGlzdC9NU1xcbmN5bmljL1NNXFxuY3luaWNhbC9ZXFxuY3luaWNpc20vTVxcbmN5bm9zdXJlL01TXFxuY3lwcmVzcy9NU1xcbmN5c3QvTVNcXG5jeXN0aWNcXG5jeXN0aXRpc1xcbmN5dG9raW5lc1xcbmN5dG9sb2dpc3QvU01cXG5jeXRvbG9neS9NXFxuY3l0b3BsYXNtL01cXG5jeXRvcGxhc21pY1xcbmN5dG9zaW5lL01cXG5jemFyL01TXFxuY3phcmluYS9TTVxcbmN6YXJpc21cXG5jemFyaXN0L1NNXFxuZCdBcmV6em8vTVxcbmQnRXN0YWluZy9NXFxuZC9OWEdKXFxuZEJcXG5kYWIvU01cXG5kYWJiZWRcXG5kYWJiZXIvTVNcXG5kYWJiaW5nXFxuZGFiYmxlL1pHRFJTXFxuZGFiYmxlci9NXFxuZGFjZS9TTVxcbmRhY2hhL01TXFxuZGFjaHNodW5kL01TXFxuZGFjdHlsL01TXFxuZGFjdHlsaWMvTVNcXG5kYWQvU01cXG5kYWRhaXNtL01cXG5kYWRhaXN0L01TXFxuZGFkZHkvU01cXG5kYWRvL01cXG5kYWRvZXNcXG5kYWVtb24vTVNcXG5kYWVtb25pY1xcbmRhZmZpbmVzcy9NXFxuZGFmZm9kaWwvU01cXG5kYWZmeS9QVFJcXG5kYWZ0L1BUUllcXG5kYWZ0bmVzcy9NXFxuZGFnL1NcXG5kYWdnZXIvTVNcXG5kYWdvL1NcXG5kYWdvZXNcXG5kYWd1ZXJyZW90eXBlL0RTTUdcXG5kYWhsaWEvTVNcXG5kYWlsaW5lc3MvTVxcbmRhaWx5L1BTTVxcbmRhaW50aWx5XFxuZGFpbnRpbmVzcy9NXFxuZGFpbnR5L1JTTVRQXFxuZGFpcXVpcmkvTVNcXG5kYWlyeS9HU01cXG5kYWlyeWluZy9NXFxuZGFpcnltYWlkL01TXFxuZGFpcnltYW4vTVxcbmRhaXJ5bWVuXFxuZGFpcnl3b21hbi9NXFxuZGFpcnl3b21lblxcbmRhaXMvTVNcXG5kYWlzeS9TTVxcbmRhbGUvU01cXG5kYWxsaWFuY2UvTVNcXG5kYWxsaWVyL01cXG5kYWxseS9aR0RSU1xcbmRhbG1hdGlhbi9NU1xcbmRhbS9TTVxcbmRhbWFnZS9NR0RTXFxuZGFtYWdlYWJsZVxcbmRhbWFnZWQvVVxcbmRhbWFnZXMvTVxcbmRhbWFzay9NREdTXFxuZGFtZS9TTVxcbmRhbW1lZFxcbmRhbW1pbmdcXG5kYW1taXRcXG5kYW1uL1NCR01EXFxuZGFtbmFibHlcXG5kYW1uYXRpb24vTVxcbmRhbW5lZC9UXFxuZGFtcC9TUFhaVEdNRE5SWVxcbmRhbXBlbi9aR0RSXFxuZGFtcGVuZXIvTVxcbmRhbXBlci9NXFxuZGFtcG5lc3MvTVxcbmRhbXNlbC9NU1xcbmRhbXNlbGZseS9TTVxcbmRhbXNvbi9NU1xcbmRhbmNlL01aR0RSU1xcbmRhbmNlci9NXFxuZGFuY2luZy9NXFxuZGFuZGVsaW9uL1NNXFxuZGFuZGVyL01cXG5kYW5kaWZ5L0dEU1xcbmRhbmRsZS9HRFNcXG5kYW5kcnVmZi9NXFxuZGFuZHkvVFJTTVxcbmRhbmcvU1pHRFJcXG5kYW5nZXIvTVxcbmRhbmdlcm91cy9ZXFxuZGFuZ2xlL1pHRFJTXFxuZGFuZ2xlci9NXFxuZGFuaXNoL01TXFxuZGFuay9QVFJZXFxuZGFua25lc3MvTVxcbmRhbnNldXNlL01TXFxuZGFwcGVyL1RSXFxuZGFwcGxlL01HRFNcXG5kYXJlL0RSU01aR1xcbmRhcmVkZXZpbC9NU1xcbmRhcmVkZXZpbHJ5L01cXG5kYXJlci9NXFxuZGFyZXNheVxcbmRhcmluZy9NWVxcbmRhcmsvUFhUTU5SWVxcbmRhcmtlbi9aR0RSXFxuZGFya2VuZXIvTVxcbmRhcmtpZS9TXFxuZGFya25lc3MvTVxcbmRhcmtyb29tL01TXFxuZGFybGluZy9NU1xcbmRhcm4vU1pHTURSXFxuZGFybmVkL1RSXFxuZGFybmVyL01cXG5kYXJ0L1NaR01EUlxcbmRhcnRib2FyZC9NU1xcbmRhcnRlci9NXFxuZGFzaC9aR01EUlNcXG5kYXNoYm9hcmQvU01cXG5kYXNoZXIvTVxcbmRhc2hpa2kvTVNcXG5kYXNoaW5nL1lcXG5kYXN0YXJkL01ZU1xcbmRhc3RhcmRsaW5lc3MvTVxcbmRhdGFcXG5kYXRhYmFzZS9TTVxcbmRhdGFzZXQvTVNcXG5kYXRhdHlwZVxcbmRhdGUvRFJTTVpHVlxcbmRhdGVib29rL1NcXG5kYXRlZC9VXFxuZGF0ZWxlc3NcXG5kYXRlbGluZS9NR0RTXFxuZGF0ZXIvTVxcbmRhdGVzZXRcXG5kYXRpdmUvTVNcXG5kYXR1bS9NXFxuZGF1Yi9TWkdNRFJcXG5kYXViZXIvTVxcbmRhdWdodGVyL1NNWVxcbmRhdW50L0dEU1xcbmRhdW50aW5nL1lcXG5kYXVudGxlc3MvWVBcXG5kYXVudGxlc3NuZXNzL01cXG5kYXVwaGluL01TXFxuZGF2ZW5wb3J0L01TXFxuZGF2aXQvTVNcXG5kYXdkbGUvWkdEUlNcXG5kYXdkbGVyL01cXG5kYXduL1NHTURcXG5kYXkvU01cXG5kYXliZWQvTVNcXG5kYXlicmVhay9NXFxuZGF5Y2FyZS9NXFxuZGF5ZHJlYW0vTURSWkdTXFxuZGF5ZHJlYW1lci9NXFxuZGF5bGlnaHQvTVNcXG5kYXlsaWdodHMvTVxcbmRheWxvbmdcXG5kYXl0aW1lL01cXG5kYXplL0RTTUdcXG5kYXplZC9ZXFxuZGF6emxlL01aR0RSU1xcbmRhenpsZXIvTVxcbmRhenpsaW5nL1lcXG5kYlxcbmRibFxcbmRjXFxuZGQvU0RHXFxuZGRlZC9LXFxuZGRpbmcvS1xcbmRlYWNvbi9NU1xcbmRlYWNvbmVzcy9NU1xcbmRlYWQvWFRNTlJZXFxuZGVhZGJlYXQvTVNcXG5kZWFkYm9sdC9TTVxcbmRlYWRlbi9HRFxcbmRlYWRoZWFkL1NER1xcbmRlYWRsaW5lL1NNXFxuZGVhZGxpbmVzcy9NXFxuZGVhZGxvY2svR1NNRFxcbmRlYWRseS9UUFJcXG5kZWFkcGFuL01TXFxuZGVhZHBhbm5lZFxcbmRlYWRwYW5uaW5nXFxuZGVhZHdvb2QvTVxcbmRlYWYvUFhUTlJcXG5kZWFmZW4vR0RcXG5kZWFmZW5pbmcvWVxcbmRlYWZuZXNzL01cXG5kZWFsL1NKWkdNUlxcbmRlYWxlci9NXFxuZGVhbGVyc2hpcC9TTVxcbmRlYWxpbmcvTVxcbmRlYWx0XFxuZGVhbi9NXFxuZGVhbmVyeS9TTVxcbmRlYW5zaGlwL01cXG5kZWFyL1NQVE1SWUhcXG5kZWFyZXN0L1NcXG5kZWFybmVzcy9NXFxuZGVhcnRoL01cXG5kZWFydGhzXFxuZGVhcnkvU01cXG5kZWF0aC9NWVxcbmRlYXRoYmVkL1NNXFxuZGVhdGhibG93L01TXFxuZGVhdGhsZXNzL1lcXG5kZWF0aGxpa2VcXG5kZWF0aHNcXG5kZWF0aHRyYXAvTVNcXG5kZWF0aHdhdGNoL01TXFxuZGVhdmVzXFxuZGViL1NNXFxuZGViYWNsZS9NU1xcbmRlYmFya2F0aW9uL01cXG5kZWJhcm1lbnQvTVxcbmRlYmF0ZS9CTVpSXFxuZGViYXRlci9NXFxuZGViYXRpbmcvTVxcbmRlYmF1Y2gvTURTR1xcbmRlYmF1Y2hlZS9NU1xcbmRlYmF1Y2hlcnkvU01cXG5kZWJlbnR1cmUvTVNcXG5kZWJpbGl0YXRlL0RTR05cXG5kZWJpbGl0YXRpb24vTVxcbmRlYmlsaXR5L1NNXFxuZGViaXQvRFxcbmRlYm9uYWlyL1BZXFxuZGVib25haXJuZXNzL01cXG5kZWJvdWNoL0dEU1xcbmRlYnJpZGVtZW50XFxuZGVicmlzL01cXG5kZWJ0L1NNXFxuZGVidG9yL01TXFxuZGVidWdnZXIvU1xcbmRlYnV0L0dNRFxcbmRlYnV0YW50ZS9TTVxcbmRlY2FkZS9NU1xcbmRlY2FkZW5jZS9NXFxuZGVjYWRlbmN5L01cXG5kZWNhZGVudC9NWVNcXG5kZWNhZi9NU1xcbmRlY2FmZmVpbmF0ZS9EU0dcXG5kZWNhZ29uL01TXFxuZGVjYWwvTVNcXG5kZWNhbXBtZW50L01cXG5kZWNhcGl0YXRlL1hHTkRTXFxuZGVjYXBpdGF0b3IvTVNcXG5kZWNhdGhsZXRlL1NcXG5kZWNhdGhsb24vU01cXG5kZWNheS9HRFxcbmRlY2Vhc2VkL01cXG5kZWNlZGVudC9NU1xcbmRlY2VpdC9NU1xcbmRlY2VpdGZ1bC9ZUFxcbmRlY2VpdGZ1bG5lc3MvTVxcbmRlY2VpdmUvVUdEU1xcbmRlY2VpdmVyL01TXFxuZGVjZWl2aW5nL1lcXG5kZWNlbGVyYXRlL0dORFNcXG5kZWNlbGVyYXRpb24vTVxcbmRlY2VsZXJhdG9yL1NNXFxuZGVjZW5jeS9JU01cXG5kZWNlbm5pYWwvU01cXG5kZWNlbnQvSVlcXG5kZWNlcHRpb24vTVNcXG5kZWNlcHRpdmUvWVBcXG5kZWNlcHRpdmVuZXNzL01cXG5kZWNpYmVsL01TXFxuZGVjaWRhYmxlL1VcXG5kZWNpZGUvQlpHRFJTXFxuZGVjaWRlZC9ZXFxuZGVjaWR1b3VzXFxuZGVjaWxpdGVyL01TXFxuZGVjaW1hbC9TTVxcbmRlY2ltYWxpemF0aW9uXFxuZGVjaW1hdGUvRFNHTlxcbmRlY2ltYXRpb24vTVxcbmRlY2ltZXRlci9NU1xcbmRlY2lwaGVyYWJsZS9VSVxcbmRlY2lzaW9uL0lNXFxuZGVjaXNpb25zXFxuZGVjaXNpdmUvSVBZXFxuZGVjaXNpdmVuZXNzL0lNXFxuZGVjay9TR01EXFxuZGVja2NoYWlyL1NcXG5kZWNraGFuZC9TTVxcbmRlY2tsZS9TXFxuZGVjbGFtYXRpb24vTVNcXG5kZWNsYW1hdG9yeVxcbmRlY2xhcmF0aW9uL01TXFxuZGVjbGFyYXRpdmVcXG5kZWNsYXJhdG9yeVxcbmRlY2xhcmUvRFJTWkdCXFxuZGVjbGFyZWQvVVxcbmRlY2xhcmVyL01cXG5kZWNsZW5zaW9uL1NNXFxuZGVjbGluYXRpb24vTVxcbmRlY2xpbmUvRFJTTVpHXFxuZGVjbGluZXIvTVxcbmRlY2xpdml0eS9TTVxcbmRlY29oZXJlbmNlXFxuZGVjb2xsZXRhZ2UvU01cXG5kZWNvbGxldGVcXG5kZWNvbmdlc3RhbnQvTVNcXG5kZWNvbnN0cnVjdGlvbmlzbVxcbmRlY29yL01TXFxuZGVjb3JhdGUvQUdOVkRTXFxuZGVjb3JhdGluZy9NXFxuZGVjb3JhdGlvbi9BTVxcbmRlY29yYXRpb25zXFxuZGVjb3JhdGl2ZS9ZXFxuZGVjb3JhdG9yL01TXFxuZGVjb3JvdXMvSVlcXG5kZWNvcm91c25lc3MvTVxcbmRlY29ydW0vTVxcbmRlY291cGFnZS9EU01HXFxuZGVjb3kvR01EU1xcbmRlY3JlYXNpbmcvWVxcbmRlY3JlZS9NRFNcXG5kZWNyZWVpbmdcXG5kZWNyZW1lbnQvR0RTXFxuZGVjcmVwaXRcXG5kZWNyZXBpdHVkZS9NXFxuZGVjcmltaW5hbGl6YXRpb24vTVxcbmRlY3J5L0dEU1xcbmRlY3J5cHRpb25cXG5kZWRpY2F0ZS9BR0RTXFxuZGVkaWNhdGlvbi9TTVxcbmRlZGljYXRvci9TTVxcbmRlZGljYXRvcnlcXG5kZWR1Y2UvR0RTXFxuZGVkdWNpYmxlXFxuZGVkdWN0L0dWRFxcbmRlZHVjdGlibGUvU01cXG5kZWR1Y3Rpb24vU01cXG5kZWR1Y3RpdmUvWVxcbmRlZWQvR0RcXG5kZWVqYXkvTVNcXG5kZWVtL0FTR0RcXG5kZWVwL1NQWFRNTlJZXFxuZGVlcGVuL0dEXFxuZGVlcGZha2UvU01cXG5kZWVwbmVzcy9NXFxuZGVlci9NXFxuZGVlcnNraW4vTVxcbmRlZXJzdGFsa2VyL1NcXG5kZWYvWlxcbmRlZmFjZW1lbnQvTVxcbmRlZmFjZXIvU01cXG5kZWZhbGNhdGUvRFNYR05cXG5kZWZhbGNhdGlvbi9NXFxuZGVmYW1hdGlvbi9NXFxuZGVmYW1hdG9yeVxcbmRlZmFtZS9aR0RSU1xcbmRlZmFtZXIvTVxcbmRlZmF1bHRlci9TTVxcbmRlZmVhdC9NRFJaR1NcXG5kZWZlYXRlZC9VXFxuZGVmZWF0ZXIvTVxcbmRlZmVhdGlzbS9NXFxuZGVmZWF0aXN0L01TXFxuZGVmZWNhdGUvR05EU1xcbmRlZmVjYXRpb24vTVxcbmRlZmVjdC9NREdWU1xcbmRlZmVjdGlvbi9NU1xcbmRlZmVjdGl2ZS9NUFlTXFxuZGVmZWN0aXZlbmVzcy9NXFxuZGVmZWN0b3IvTVNcXG5kZWZlbmRhbnQvU01cXG5kZWZlbmRlZC9VXFxuZGVmZW5lc3RyYXRpb24vU1xcbmRlZmVuc2UvRFNNR1ZcXG5kZWZlbnNlbGVzcy9ZUFxcbmRlZmVuc2VsZXNzbmVzcy9NXFxuZGVmZW5zaWJsZS9JXFxuZGVmZW5zaWJseS9JXFxuZGVmZW5zaXZlL01ZUFxcbmRlZmVuc2l2ZW5lc3MvTVxcbmRlZmVyZW5jZS9NXFxuZGVmZXJlbnRpYWwvWVxcbmRlZmVycmFsL01TXFxuZGVmZXJyZWRcXG5kZWZlcnJpbmdcXG5kZWZmZXJcXG5kZWZmZXN0XFxuZGVmaWFudC9ZXFxuZGVmaWJyaWxsYXRpb25cXG5kZWZpYnJpbGxhdG9yL1NcXG5kZWZpY2llbmN5L1NNXFxuZGVmaWNpZW50XFxuZGVmaWNpdC9TTVxcbmRlZmlsZW1lbnQvTVxcbmRlZmluYWJsZS9JVVxcbmRlZmluZS9BR0RTXFxuZGVmaW5lZC9VXFxuZGVmaW5lci9NU1xcbmRlZmluaXRlL0lZVlBcXG5kZWZpbml0ZW5lc3MvSU1cXG5kZWZpbml0aW9uL0FNXFxuZGVmaW5pdGlvbnNcXG5kZWZpbml0aXZlL1lcXG5kZWZsYXRlL0dORFNcXG5kZWZsYXRpb24vTVxcbmRlZmxhdGlvbmFyeVxcbmRlZmxlY3QvREdWU1xcbmRlZmxlY3Rpb24vTVNcXG5kZWZsZWN0b3IvU01cXG5kZWZvZ2dlci9TTVxcbmRlZm9saWFudC9TTVxcbmRlZm9saWF0ZS9EU0dOXFxuZGVmb2xpYXRpb24vTVxcbmRlZm9saWF0b3IvTVNcXG5kZWZvcm1pdHkvU01cXG5kZWZyYXVkL0RSWkdTXFxuZGVmcmF1ZGVyL01cXG5kZWZyYXlhbC9NXFxuZGVmcm9jay9ER1xcbmRlZnJvc3Rlci9NU1xcbmRlZnQvUFRSWVxcbmRlZnRuZXNzL01cXG5kZWZ1bmN0XFxuZGVmeS9HRFNcXG5kZWdcXG5kZWdlbmVyYWN5L01cXG5kZWdlbmVyYXRlL01WXFxuZGVncmFkZS9CXFxuZGVncmVlL01TXFxuZGVoeWRyYXRvci9TTVxcbmRlaHlkcm9nZW5hc2VcXG5kZWljZXIvTVNcXG5kZWlmaWNhdGlvbi9NXFxuZGVpZnkvTkdEU1xcbmRlaWduL0dEU1xcbmRlaXN0L01TXFxuZGVpc3RpY1xcbmRlaXR5L1NNXFxuZGVqZWN0L0dEU1xcbmRlamVjdGVkL1lcXG5kZWplY3Rpb24vTVxcbmRlbGF5L1pEUlxcbmRlbGVjdGFibGVcXG5kZWxlY3RhYmx5XFxuZGVsZWN0YXRpb24vTVxcbmRlbGVnYXRlL0dEXFxuZGVsZXRlL1hHTkRTXFxuZGVsZXRlcmlvdXNcXG5kZWxldGlvbi9NXFxuZGVsZnQvTVxcbmRlbGZ0d2FyZS9NXFxuZGVsaS9TTVxcbmRlbGliZXJhdGUvWFlWUFxcbmRlbGliZXJhdGVuZXNzL01cXG5kZWxpY2FjeS9JU01cXG5kZWxpY2F0ZS9JWVxcbmRlbGljYXRlbmVzcy9NXFxuZGVsaWNhdGVzc2VuL1NNXFxuZGVsaWNpb3VzL1BZXFxuZGVsaWNpb3VzbmVzcy9NXFxuZGVsaWdodGVkL1lcXG5kZWxpZ2h0ZnVsL1lcXG5kZWxpbWluYXRvclxcbmRlbGluZWF0ZS9HTlhEU1xcbmRlbGluZWF0aW9uL01cXG5kZWxpbnF1ZW5jeS9TTVxcbmRlbGlucXVlbnQvU01ZXFxuZGVsaXF1ZXNjZS9EU0dcXG5kZWxpcXVlc2NlbnRcXG5kZWxpcmlvdXMvWVBcXG5kZWxpcmlvdXNuZXNzL01cXG5kZWxpcml1bS9TTVxcbmRlbGl2ZXIvQURHU1xcbmRlbGl2ZXJhYmxlL1NcXG5kZWxpdmVyYW5jZS9NXFxuZGVsaXZlcmVkL1VcXG5kZWxpdmVyZXIvU01cXG5kZWxsL1NNXFxuZGVscGhpbml1bS9NU1xcbmRlbHRhL01TXFxuZGVsdWRlL0dEU1xcbmRlbHVnZS9NR0RTXFxuZGVsdXNpb24vTVNcXG5kZWx1c2lvbmFsXFxuZGVsdXNpdmUvWVxcbmRlbHV4ZVxcbmRlbHZlL1pHRFJTXFxuZGVsdmVyL01cXG5kZW1hZ29naWNcXG5kZW1hZ29naWNhbGx5XFxuZGVtYWdvZ3VlL1NNXFxuZGVtYWdvZ3VlcnkvTVxcbmRlbWFnb2d5L01cXG5kZW1hbmQvR01EU1xcbmRlbWFuZGluZy9VXFxuZGVtYXJjYXRlL0RTR05YXFxuZGVtYXJjYXRpb24vTVxcbmRlbWVhbi9HRFNcXG5kZW1lYW5vci9NXFxuZGVtZW50ZWQvWVxcbmRlbWVudGlhL01cXG5kZW1lc25lL01TXFxuZGVtaWdvZC9NU1xcbmRlbWlnb2RkZXNzL01TXFxuZGVtaWpvaG4vU01cXG5kZW1pbW9uZGFpbmUvU01cXG5kZW1pbW9uZGUvTVxcbmRlbWlzZS9NR0RTXFxuZGVtaXRhc3NlL01TXFxuZGVtby9HTURcXG5kZW1vY3JhY3kvU01cXG5kZW1vY3JhdC9NU1xcbmRlbW9jcmF0aWMvVVxcbmRlbW9jcmF0aWNhbGx5XFxuZGVtb2NyYXRpemF0aW9uL01cXG5kZW1vY3JhdGl6ZS9HRFNcXG5kZW1vZGVcXG5kZW1vZ3JhcGhlci9TTVxcbmRlbW9ncmFwaGljL1NNXFxuZGVtb2dyYXBoaWNhbGx5XFxuZGVtb2dyYXBoaWNzL01cXG5kZW1vZ3JhcGh5L01cXG5kZW1vbGlzaC9EU0dcXG5kZW1vbGl0aW9uL01TXFxuZGVtb24vTVNcXG5kZW1vbmV0aXphdGlvbi9NXFxuZGVtb25pYWNcXG5kZW1vbmlhY2FsL1lcXG5kZW1vbmljXFxuZGVtb25pY2FsbHlcXG5kZW1vbml6ZS9HRFNcXG5kZW1vbm9sb2d5L1NNXFxuZGVtb25zdHJhYmlsaXR5XFxuZGVtb25zdHJhYmxlL0lcXG5kZW1vbnN0cmFibHlcXG5kZW1vbnN0cmF0ZS9YR05WRFNcXG5kZW1vbnN0cmF0aW9uL01cXG5kZW1vbnN0cmF0aXZlL01ZU1BcXG5kZW1vbnN0cmF0aXZlbmVzcy9NXFxuZGVtb25zdHJhdG9yL01TXFxuZGVtb3RlL0dEXFxuZGVtb3RpY1xcbmRlbW91bnRcXG5kZW11bGNlbnQvU01cXG5kZW11ci9UTVJTXFxuZGVtdXJlL1BZXFxuZGVtdXJlbmVzcy9NXFxuZGVtdXJyYWwvU01cXG5kZW11cnJlZFxcbmRlbXVycmVyL1NNXFxuZGVtdXJyaW5nXFxuZGVuL01cXG5kZW5hdGlvbmFsaXphdGlvblxcbmRlbmF0dXJhdGlvblxcbmRlbmF0dXJlL0RHXFxuZGVuZHJpdGUvU01cXG5kZW5ndWUvTVxcbmRlbmlhYmlsaXR5XFxuZGVuaWFibGUvVVxcbmRlbmlhbC9NU1xcbmRlbmllci9NXFxuZGVuaWdyYXRlL0RTR05cXG5kZW5pZ3JhdGlvbi9NXFxuZGVuaW0vTVNcXG5kZW5pdHJpZmljYXRpb25cXG5kZW5pemVuL01TXFxuZGVub21pbmF0aW9uYWxcXG5kZW5vdGF0aXZlXFxuZGVub3VlbWVudC9NU1xcbmRlbm91bmNlL0xEU0dcXG5kZW5vdW5jZW1lbnQvU01cXG5kZW5zZS9QWVRSXFxuZGVuc2VuZXNzL01cXG5kZW5zaXR5L1NNXFxuZGVudC9JU0dNRFxcbmRlbnRhbC9ZXFxuZGVudGlmcmljZS9TTVxcbmRlbnRpbi9NXFxuZGVudGlzdC9NU1xcbmRlbnRpc3RyeS9NXFxuZGVudGl0aW9uL01cXG5kZW50dXJlL0lNU1xcbmRlbnVjbGVhcml6ZS9HRFNcXG5kZW51ZGF0aW9uL01cXG5kZW51ZGUvR0RTXFxuZGVudW5jaWF0aW9uL1NNXFxuZGVueS9aR0RSU1xcbmRlb2RvcmFudC9TTVxcbmRlb2Rvcml6YXRpb24vTVxcbmRlb2Rvcml6ZS9EUlNaR1xcbmRlb2Rvcml6ZXIvTVxcbmRlcGFydGVkL01cXG5kZXBhcnRtZW50L01TXFxuZGVwYXJ0bWVudGFsL1lcXG5kZXBhcnRtZW50YWxpemF0aW9uL01cXG5kZXBhcnRtZW50YWxpemUvR0RTXFxuZGVwYXJ0dXJlL1NNXFxuZGVwZW5kYWJpbGl0eS9NXFxuZGVwZW5kYWJsZS9VXFxuZGVwZW5kYWJseVxcbmRlcGVuZGVuY2UvSU1cXG5kZXBlbmRlbmN5L1NNXFxuZGVwZW5kZW50L0lNWVNcXG5kZXBpY3QvR0RTXFxuZGVwaWN0aW9uL01TXFxuZGVwaWxhdG9yeS9TTVxcbmRlcGxldGUvR05EU1xcbmRlcGxldGlvbi9NXFxuZGVwbG9yYWJseVxcbmRlcGxvcmUvQkdEU1xcbmRlcGxveS9BTEdEU1xcbmRlcGxveW1lbnQvQU1cXG5kZXBsb3ltZW50c1xcbmRlcG9uZW50L01TXFxuZGVwb3J0YXRpb24vTVNcXG5kZXBvcnRlZS9NU1xcbmRlcG9ydG1lbnQvTVxcbmRlcG9zaXQvQUdNRFNcXG5kZXBvc2l0b3IvTVNcXG5kZXBvc2l0b3J5L1NNXFxuZGVwcmF2ZS9HRFNcXG5kZXByYXZpdHkvU01cXG5kZXByZWNhdGUvR05EU1xcbmRlcHJlY2F0aW5nL1lcXG5kZXByZWNhdGlvbi9NXFxuZGVwcmVjYXRvcnlcXG5kZXByZWNpYXRlL0RTR05cXG5kZXByZWNpYXRpb24vTVxcbmRlcHJlZGF0aW9uL1NNXFxuZGVwcmVzc2FudC9TTVxcbmRlcHJlc3NpbmcvWVxcbmRlcHJlc3Npb24vU01cXG5kZXByZXNzaXZlL1NNXFxuZGVwcmVzc29yL01TXFxuZGVwcmVzc3VyaXphdGlvblxcbmRlcHJpdmUvR0RTXFxuZGVwcm9ncmFtbWluZ1xcbmRlcHRoL01cXG5kZXB0aHNcXG5kZXB1dGF0aW9uL01TXFxuZGVwdXRlL0RTR1xcbmRlcHV0aXplL0RTR1xcbmRlcHV0eS9TTVxcbmRlcmFpbGxldXIvU01cXG5kZXJhaWxtZW50L1NNXFxuZGVyYW5nZW1lbnQvTVxcbmRlcmJ5L1NNXFxuZGVyZWxpY3QvTVNcXG5kZXJlbGljdGlvbi9NXFxuZGVyaWRlL0dEU1xcbmRlcmlzaW9uL01cXG5kZXJpc2l2ZS9QWVxcbmRlcmlzaXZlbmVzcy9NXFxuZGVyaXNvcnlcXG5kZXJpdmF0aW9uL01TXFxuZGVyaXZhdGl2ZS9NU1xcbmRlcml2ZS9CXFxuZGVybWFsXFxuZGVybWF0aXRpcy9NXFxuZGVybWF0b2xvZ2ljYWxcXG5kZXJtYXRvbG9naXN0L1NNXFxuZGVybWF0b2xvZ3kvTVxcbmRlcm1pcy9NXFxuZGVyb2dhdGUvRFNHTlxcbmRlcm9nYXRpb24vTVxcbmRlcm9nYXRvcmlseVxcbmRlcm9nYXRvcnlcXG5kZXJyaWNrL1NNXFxuZGVycmllcmUvU01cXG5kZXJyaW5nZXIvU01cXG5kZXJ2XFxuZGVydmlzaC9NU1xcbmRlc2FsaW5hdGUvR05EU1xcbmRlc2FsaW5hdGlvbi9NXFxuZGVzYWxpbml6YXRpb24vTVxcbmRlc2FsaW5pemUvR0RTXFxuZGVzY2FudC9NXFxuZGVzY2VuZC9GR0RTXFxuZGVzY2VuZGFudC9NU1xcbmRlc2NlbmRlclxcbmRlc2NyaWJhYmxlL0lcXG5kZXNjcmliZS9CWkdEUlxcbmRlc2NyaWJlci9NXFxuZGVzY3JpcHRpb24vU01cXG5kZXNjcmlwdGl2ZS9QWVxcbmRlc2NyaXB0aXZlbmVzcy9NXFxuZGVzY3JpcHRvci9TXFxuZGVzY3J5L0dEU1xcbmRlc2VjcmF0ZS9EU0dOXFxuZGVzZWNyYXRpb24vTVxcbmRlc2VsZWN0aW9uXFxuZGVzZXJ0L1NEUlpHTVxcbmRlc2VydGVyL01cXG5kZXNlcnRpZmljYXRpb25cXG5kZXNlcnRpb24vU01cXG5kZXNlcnZlZC9VWVxcbmRlc2VydmluZy9VXFxuZGVzaWNjYW50L1NNXFxuZGVzaWNjYXRlL0RTR05cXG5kZXNpY2NhdGlvbi9NXFxuZGVzaWNjYXRvci9TTVxcbmRlc2lkZXJhdGFcXG5kZXNpZGVyYXR1bS9NXFxuZGVzaWduL0FTREdcXG5kZXNpZ25hdGUvRFNHTlhcXG5kZXNpZ25hdGlvbi9NXFxuZGVzaXJhYmlsaXR5L1VNXFxuZGVzaXJhYmxlbmVzcy9NXFxuZGVzaXJhYmx5L1VcXG5kZXNpcmUvQlxcbmRlc2lyZWQvVVxcbmRlc2lyb3VzXFxuZGVzaXN0L1NER1xcbmRlc2svU01cXG5kZXNraWxsL0dcXG5kZXNrdG9wL1NNXFxuZGVzb2xhdGUvUERTWUdOXFxuZGVzb2xhdGVuZXNzL01cXG5kZXNvbGF0aW9uL01cXG5kZXNwYWlyL1NNREdcXG5kZXNwYWlyaW5nL1lcXG5kZXNwZXJhZG8vTVxcbmRlc3BlcmFkb2VzXFxuZGVzcGVyYXRlL1lOUFxcbmRlc3BlcmF0ZW5lc3MvTVxcbmRlc3BlcmF0aW9uL01cXG5kZXNwaWNhYmxlXFxuZGVzcGljYWJseVxcbmRlc3Bpc2UvRFNHXFxuZGVzcGl0ZVxcbmRlc3BvaWxtZW50L01cXG5kZXNwb25kZW5jZS9NXFxuZGVzcG9uZGVuY3kvTVxcbmRlc3BvbmRlbnQvWVxcbmRlc3BvdGljXFxuZGVzcG90aWNhbGx5XFxuZGVzcG90aXNtL01cXG5kZXNzZXJ0L1NNXFxuZGVzc2VydHNwb29uL1NcXG5kZXNzZXJ0c3Bvb25mdWwvU1xcbmRlc3RpbmF0aW9uL1NNXFxuZGVzdGluZS9EU0dcXG5kZXN0aW55L1NNXFxuZGVzdGl0dXRlL05cXG5kZXN0aXR1dGlvbi9NXFxuZGVzdHJveS9TWkdEUlxcbmRlc3Ryb3llci9NXFxuZGVzdHJ1Y3QvR1ZNRFNcXG5kZXN0cnVjdGliaWxpdHkvSU1cXG5kZXN0cnVjdGlibGUvSVxcbmRlc3RydWN0aW9uL01cXG5kZXN0cnVjdGl2ZS9QWVxcbmRlc3RydWN0aXZlbmVzcy9NXFxuZGVzdWV0dWRlL01cXG5kZXN1bHRvcmlseVxcbmRlc3VsdG9yeVxcbmRldGFjaC9CTEdEU1xcbmRldGFjaG1lbnQvTVNcXG5kZXRhaW4vTEdEU1xcbmRldGFpbmVlL01TXFxuZGV0YWlubWVudC9NXFxuZGV0ZWN0L1NER1ZCXFxuZGV0ZWN0YWJsZS9VXFxuZGV0ZWN0ZWQvVVxcbmRldGVjdGlvbi9NXFxuZGV0ZWN0aXZlL1NNXFxuZGV0ZWN0b3IvU01cXG5kZXRlbnRlL1NNTlhcXG5kZXRlbnRpb24vTVxcbmRldGVyL1NMXFxuZGV0ZXJnZW50L1NNXFxuZGV0ZXJpb3JhdGUvRFNHTlxcbmRldGVyaW9yYXRpb24vTVxcbmRldGVybWVudC9NXFxuZGV0ZXJtaW5hYmxlL0lcXG5kZXRlcm1pbmFudC9TTVxcbmRldGVybWluYXRlXFxuZGV0ZXJtaW5lL0FHRFNcXG5kZXRlcm1pbmVkL1VcXG5kZXRlcm1pbmVkbHlcXG5kZXRlcm1pbmVyL1NNXFxuZGV0ZXJtaW5pc20vTVxcbmRldGVybWluaXN0aWNcXG5kZXRlcm1pbmlzdGljYWxseVxcbmRldGVycmVkL1VcXG5kZXRlcnJlbmNlL01cXG5kZXRlcnJlbnQvTVNcXG5kZXRlcnJpbmdcXG5kZXRlc3RhYmx5XFxuZGV0ZXN0YXRpb24vTVxcbmRldGhyb25lL0RTTEdcXG5kZXRocm9uZW1lbnQvTVxcbmRldG9uYXRlL0dORFNYXFxuZGV0b25hdGlvbi9NXFxuZGV0b25hdG9yL1NNXFxuZGV0b3gvTURTR1xcbmRldG94aWZpY2F0aW9uL01cXG5kZXRveGlmeS9EU0dOXFxuZGV0cmFjdC9HRFxcbmRldHJpbWVudC9TTVxcbmRldHJpbWVudGFsL1lcXG5kZXRyaXR1cy9NXFxuZGV1Y2UvU01cXG5kZXV0ZXJpdW0vTVxcbmRldmFzdGF0ZS9HTkRTXFxuZGV2YXN0YXRpbmcvWVxcbmRldmFzdGF0aW9uL01cXG5kZXZhc3RhdG9yL01TXFxuZGV2ZWxvcC9BU0dETFxcbmRldmVsb3BlZC9VXFxuZGV2ZWxvcGVyL1NNXFxuZGV2ZWxvcG1lbnQvQVNNXFxuZGV2ZWxvcG1lbnRhbC9ZXFxuZGV2aWFuY2UvTVxcbmRldmlhbmN5L01cXG5kZXZpYW50L1NNXFxuZGV2aWF0ZS9EU01HTlhcXG5kZXZpYXRpbmcvVVxcbmRldmlhdGlvbi9NXFxuZGV2aWwvU01ER0xcXG5kZXZpbGlzaC9ZUFxcbmRldmlsaXNobmVzcy9NXFxuZGV2aWxtZW50L01cXG5kZXZpbHJ5L1NNXFxuZGV2aWx0cnkvU01cXG5kZXZpb3VzL1lQXFxuZGV2aW91c25lc3MvTVxcbmRldm9pZFxcbmRldm9sdXRpb24vTVxcbmRldm9sdmUvRFNHXFxuZGV2b3RlZC9ZXFxuZGV2b3RlZS9TTVxcbmRldm90aW9uL01TXFxuZGV2b3Rpb25hbC9TTVxcbmRldm91ci9TREdcXG5kZXZvdXQvUFJZVFxcbmRldm91dG5lc3MvTVxcbmRldy9NXFxuZGV3YmVycnkvU01cXG5kZXdjbGF3L1NNXFxuZGV3ZHJvcC9TTVxcbmRld2luZXNzL01cXG5kZXdsYXAvU01cXG5kZXd5L1JUUFxcbmRleHRlcml0eS9NXFxuZGV4dGVyb3VzL1lQXFxuZGV4dGVyb3VzbmVzcy9NXFxuZGV4dHJvc2UvTVxcbmRoYXJtYVxcbmRob3RpL1NNXFxuZGhvdy9NU1xcbmRpYWJldGVzL01cXG5kaWFiZXRpYy9TTVxcbmRpYWJvbGljXFxuZGlhYm9saWNhbC9ZXFxuZGlhY3JpdGljL01TXFxuZGlhY3JpdGljYWxcXG5kaWFkZW0vU01cXG5kaWFlcmVzZXNcXG5kaWFlcmVzaXMvTVxcbmRpYWdub3NlL0RTR1xcbmRpYWdub3Npcy9NXFxuZGlhZ25vc3RpYy9TXFxuZGlhZ25vc3RpY2FsbHlcXG5kaWFnbm9zdGljaWFuL1NNXFxuZGlhZ25vc3RpY3MvTVxcbmRpYWdvbmFsL1NNWVxcbmRpYWdyYW0vU01cXG5kaWFncmFtbWF0aWNcXG5kaWFncmFtbWF0aWNhbGx5XFxuZGlhZ3JhbW1lZFxcbmRpYWdyYW1taW5nXFxuZGlhbC9BTURHU1xcbmRpYWxlY3QvU01cXG5kaWFsZWN0YWxcXG5kaWFsZWN0aWMvU01cXG5kaWFsZWN0aWNhbFxcbmRpYWxlY3RpY3MvTVxcbmRpYWxpbmcvU1xcbmRpYWxvZ1xcbmRpYWxvZ3VlL1NNXFxuZGlhbHlzZXNcXG5kaWFseXNpcy9NXFxuZGlhbHl6ZXNcXG5kaWFtXFxuZGlhbWFnbmV0aWNcXG5kaWFtYWduZXRpc21cXG5kaWFtYW50ZVxcbmRpYW1ldGVyL1NNXFxuZGlhbWV0cmljXFxuZGlhbWV0cmljYWwvWVxcbmRpYW1vbmQvU01cXG5kaWFtb25kYmFjay9NU1xcbmRpYXBhc29uL1NNXFxuZGlhcGVyL1NNREdcXG5kaWFwaGFub3VzXFxuZGlhcGhyYWdtL1NNXFxuZGlhcGhyYWdtYXRpY1xcbmRpYXJpc3QvU01cXG5kaWFycmhlYS9NXFxuZGlhcnkvU01cXG5kaWFzcG9yYS9TTVxcbmRpYXN0YXNlL01cXG5kaWFzdG9sZS9NXFxuZGlhc3RvbGljXFxuZGlhdGhlcm15L01cXG5kaWF0b20vU01cXG5kaWF0b21pY1xcbmRpYXRvbmljXFxuZGlhdHJpYmUvU01cXG5kaWF6ZXBhbVxcbmRpYmJsZS9EU01HXFxuZGlicy9NXFxuZGljZS9HRFNcXG5kaWNlcy9JXFxuZGljZXlcXG5kaWNob3RvbW91c1xcbmRpY2hvdG9teS9TTVxcbmRpY2llclxcbmRpY2llc3RcXG5kaWNrL01SWFpTXFxuZGlja2VyL0RHXFxuZGlja2V5L1NNXFxuZGlja2hlYWQvU1xcbmRpY2t5YmlyZC9TXFxuZGljb3R5bGVkb24vTVNcXG5kaWNvdHlsZWRvbm91c1xcbmRpY3RcXG5kaWN0YVxcbmRpY3RhdGUvRFNNR05YXFxuZGljdGF0aW9uL01cXG5kaWN0YXRvci9TTVxcbmRpY3RhdG9yaWFsL1lcXG5kaWN0YXRvcnNoaXAvU01cXG5kaWN0aW9uL01cXG5kaWN0aW9uYXJ5L1NNXFxuZGljdHVtL01cXG5kaWQvQVVcXG5kaWRhY3RpY1xcbmRpZGFjdGljYWxseVxcbmRpZGRsZS9EUlNaR1xcbmRpZGRsZXIvTVxcbmRpZGRseVxcbmRpZGRseXNxdWF0XFxuZGlkZHVtc1xcbmRpZGdlcmlkb28vU1xcbmRpZG4ndFxcbmRpZG8vTVxcbmRpZG9lc1xcbmRpZHN0XFxuZGllL0RTTVxcbmRpZWxlY3RyaWMvTVNcXG5kaWVyZXNlc1xcbmRpZXJlc2lzL01cXG5kaWVzZWwvU01ER1xcbmRpZXQvTURSWkdTXFxuZGlldGFyeS9TTVxcbmRpZXRlci9NXFxuZGlldGV0aWMvU1xcbmRpZXRldGljcy9NXFxuZGlldGl0aWFuL01TXFxuZGlmZi9EUlpHU1xcbmRpZmZlci9ER1xcbmRpZmZlcmVuY2UvSU1cXG5kaWZmZXJlbmNlc1xcbmRpZmZlcmVudC9JWVxcbmRpZmZlcmVudGlhYmxlXFxuZGlmZmVyZW50aWFsL1NNXFxuZGlmZmVyZW50aWF0ZS9EU0dOXFxuZGlmZmVyZW50aWF0ZWQvVVxcbmRpZmZlcmVudGlhdGlvbi9NXFxuZGlmZmljdWx0L1lcXG5kaWZmaWN1bHR5L1NNXFxuZGlmZmlkZW5jZS9NXFxuZGlmZmlkZW50L1lcXG5kaWZmcmFjdC9HU0RcXG5kaWZmcmFjdGlvbi9NXFxuZGlmZnVzZS9EU1lHTlZQXFxuZGlmZnVzZW5lc3MvTVxcbmRpZmZ1c2lvbi9NXFxuZGlmZnVzaXZpdHlcXG5kaWcvU01cXG5kaWdlcmF0aS9NXFxuZGlnZXN0L1NNREdWXFxuZGlnZXN0ZWQvVVxcbmRpZ2VzdGliaWxpdHkvTVxcbmRpZ2VzdGlibGUvSVxcbmRpZ2VzdGlvbi9JTVxcbmRpZ2VzdGlvbnNcXG5kaWdlc3RpdmUvU1xcbmRpZ2dlci9TTVxcbmRpZ2dpbmcvU1xcbmRpZ2dpbmdzL01cXG5kaWdpY2FtL1NcXG5kaWdpdC9TTVxcbmRpZ2l0YWwvWVxcbmRpZ2l0YWxpcy9NXFxuZGlnaXRpemF0aW9uXFxuZGlnaXRpemUvR0RTXFxuZGlnbmlmaWVkL1VcXG5kaWduaWZ5L0RTR1xcbmRpZ25pdGFyeS9TTVxcbmRpZ25pdHkvSVNNXFxuZGlncmFwaC9NXFxuZGlncmFwaHNcXG5kaWdyZXNzL0dWRFNcXG5kaWdyZXNzaW9uL01TXFxuZGlrZS9NR0RTXFxuZGlrdGF0L1NcXG5kaWxhcGlkYXRlZFxcbmRpbGFwaWRhdGlvbi9NXFxuZGlsYXRhdGlvbi9NXFxuZGlsYXRlL0RTR05cXG5kaWxhdGlvbi9NXFxuZGlsYXRvci9TTVxcbmRpbGF0b3J5XFxuZGlsZG8vU1xcbmRpbGVtbWEvTVNcXG5kaWxldHRhbnRlL1NNXFxuZGlsZXR0YW50aXNoXFxuZGlsZXR0YW50aXNtL01cXG5kaWxpZ2VuY2UvTVxcbmRpbGlnZW50L1lcXG5kaWxsL01TXFxuZGlsbHkvU01cXG5kaWxseWRhbGx5L0RTR1xcbmRpbHVlbnRcXG5kaWx1dGUvRFNHTlhcXG5kaWx1dGVkL1VcXG5kaWx1dGlvbi9NXFxuZGltL1BTUllcXG5kaW1lL01TXFxuZGltZW5zaW9uL1NNXFxuZGltZW5zaW9uYWxcXG5kaW1lbnNpb25sZXNzXFxuZGltaW5pc2gvR0RTXFxuZGltaW5pc2hlZC9VXFxuZGltaW51ZW5kby9TTVxcbmRpbWludXRpb24vU01cXG5kaW1pbnV0aXZlL1NNXFxuZGltaXR5L01cXG5kaW1tZWQvVVxcbmRpbW1lci9TTVxcbmRpbW1lc3RcXG5kaW1taW5nXFxuZGltbmVzcy9NXFxuZGltcGxlL0RTTUdcXG5kaW1wbHlcXG5kaW13aXQvU01cXG5kaW13aXR0ZWRcXG5kaW4vWkdTTURSXFxuZGluYXIvU01cXG5kaW5lL1NcXG5kaW5lci9NXFxuZGluZXR0ZS9NU1xcbmRpbmcvTURHXFxuZGluZ2JhdC9NU1xcbmRpbmdoeS9TTVxcbmRpbmdpbHlcXG5kaW5naW5lc3MvTVxcbmRpbmdsZS9TTVxcbmRpbmdvL01cXG5kaW5nb2VzXFxuZGluZ3VzL01TXFxuZGluZ3kvUlBUXFxuZGluay9SXFxuZGlua3kvUlNNVFxcbmRpbm5lZFxcbmRpbm5lci9TTURHXFxuZGlubmVydGltZS9NXFxuZGlubmVyd2FyZS9NXFxuZGlubmluZ1xcbmRpbm9zYXVyL1NNXFxuZGludC9NXFxuZGlvY2VzYW4vTVNcXG5kaW9jZXNlL01TXFxuZGlvZGUvU01cXG5kaW9yYW1hL1NNXFxuZGlveGlkZS9TTVxcbmRpb3hpbi9TTVxcbmRpcC9TTVxcbmRpcGh0aGVyaWEvTVxcbmRpcGh0aG9uZy9TTVxcbmRpcGxvaWQvU01cXG5kaXBsb21hL1NNXFxuZGlwbG9tYWN5L01cXG5kaXBsb21hdC9NU1xcbmRpcGxvbWF0YVxcbmRpcGxvbWF0aWMvVVxcbmRpcGxvbWF0aWNhbGx5XFxuZGlwbG9tYXRpc3QvTVNcXG5kaXBsb3BpYVxcbmRpcG9sZS9TTVxcbmRpcHBlZFxcbmRpcHBlci9TTVxcbmRpcHBpbmdcXG5kaXBweS9SVFxcbmRpcHNvL1NcXG5kaXBzb21hbmlhL01cXG5kaXBzb21hbmlhYy9NU1xcbmRpcHN0aWNrL1NNXFxuZGlwdGVyb3VzXFxuZGlwdHljaC9NXFxuZGlwdHljaHNcXG5kaXJlL1lUUlxcbmRpcmVjdC9BU0RHVlRcXG5kaXJlY3RlclxcbmRpcmVjdGlvbi9JTVxcbmRpcmVjdGlvbmFsXFxuZGlyZWN0aW9ubGVzc1xcbmRpcmVjdGlvbnNcXG5kaXJlY3RpdmUvU01cXG5kaXJlY3RseVxcbmRpcmVjdG5lc3MvSU1cXG5kaXJlY3Rvci9NU1xcbmRpcmVjdG9yYXRlL1NNXFxuZGlyZWN0b3JpYWxcXG5kaXJlY3RvcnNoaXAvU01cXG5kaXJlY3RvcnkvU01cXG5kaXJlZnVsXFxuZGlyZ2UvU01cXG5kaXJpZ2libGUvTVNcXG5kaXJrL01TXFxuZGlybmRsL1NNXFxuZGlydC9NXFxuZGlydGJhbGwvU1xcbmRpcnRpbHlcXG5kaXJ0aW5lc3MvTVxcbmRpcnR5L0RSU1RHUFxcbmRpcy9NXFxuZGlzYWJsZS9EU0dMXFxuZGlzYWJsZW1lbnQvTVxcbmRpc2FtYmlndWF0ZS9OXFxuZGlzYXBwb2ludGluZy9ZXFxuZGlzYXJtaW5nL1lcXG5kaXNhc3NlbWJseVxcbmRpc2FzdHJvdXMvWVxcbmRpc2JhbmRtZW50L01cXG5kaXNiYXJtZW50L01cXG5kaXNiZWxpZXZpbmcvWVxcbmRpc2J1cnNhbC9NXFxuZGlzYnVyc2UvRFNHTFxcbmRpc2J1cnNlbWVudC9NU1xcbmRpc2MvTVxcbmRpc2Nlcm4vTFNER1xcbmRpc2Nlcm5pYmxlL0lcXG5kaXNjZXJuaWJseVxcbmRpc2Nlcm5pbmcvWVxcbmRpc2Nlcm5tZW50L01cXG5kaXNjaGFyZ2VkL1VcXG5kaXNjaXBsZS9TTVxcbmRpc2NpcGxlc2hpcC9NXFxuZGlzY2lwbGluYXJpYW4vU01cXG5kaXNjaXBsaW5hcnlcXG5kaXNjaXBsaW5lL0RTTUdcXG5kaXNjaXBsaW5lZC9VXFxuZGlzY2xvc2UvRFNHXFxuZGlzY2xvc2VkL1VcXG5kaXNjby9NR1xcbmRpc2NvZ3JhcGh5L1NNXFxuZGlzY29sb3JhdGlvbi9TXFxuZGlzY29tYm9idWxhdGUvRFNHTlxcbmRpc2NvbWJvYnVsYXRpb24vTVxcbmRpc2NvbWZpdC9ER1xcbmRpc2NvbWZpdHVyZS9NXFxuZGlzY29tbW9kZS9ER1xcbmRpc2NvbmNlcnRpbmcvWVxcbmRpc2Nvbm5lY3RlZC9QWVxcbmRpc2Nvbm5lY3RlZG5lc3MvTVxcbmRpc2NvbnNvbGF0ZS9ZXFxuZGlzY29yZGFuY2UvTVxcbmRpc2NvcmRhbnQvWVxcbmRpc2NvdGhlcXVlL1NNXFxuZGlzY291cmFnZS9MR0RTXFxuZGlzY291cmFnZW1lbnQvU01cXG5kaXNjb3VyYWdpbmcvWVxcbmRpc2NvdmVyL0FTREdcXG5kaXNjb3ZlcmVkL1VcXG5kaXNjb3ZlcmVyL01TXFxuZGlzY292ZXJ5L0FTTVxcbmRpc2NyZWV0L1BSWVRcXG5kaXNjcmVldG5lc3MvTVxcbmRpc2NyZXBhbmN5L1NNXFxuZGlzY3JlcGFudFxcbmRpc2NyZXRlL1BZTlxcbmRpc2NyZXRlbmVzcy9NXFxuZGlzY3JldGlvbi9JTVxcbmRpc2NyZXRpb25hcnlcXG5kaXNjcmltaW5hbnRcXG5kaXNjcmltaW5hdGUvR05EU1xcbmRpc2NyaW1pbmF0aW5nL1VcXG5kaXNjcmltaW5hdGlvbi9NXFxuZGlzY3JpbWluYXRvci9NU1xcbmRpc2NyaW1pbmF0b3J5XFxuZGlzY3Vyc2l2ZW5lc3MvTVxcbmRpc2N1cy9NU1xcbmRpc2N1c3NhbnQvU01cXG5kaXNjdXNzaW9uL1NNXFxuZGlzZGFpbi9TTURHXFxuZGlzZGFpbmZ1bC9ZXFxuZGlzZW1ib3dlbC9TRExHXFxuZGlzZW1ib3dlbG1lbnQvTVxcbmRpc2ZpZ3VyZW1lbnQvU01cXG5kaXNmcmFuY2hpc2VtZW50L01cXG5kaXNnb3JnZW1lbnQvTVxcbmRpc2dydW50bGUvTEdEU1xcbmRpc2dydW50bGVtZW50L01cXG5kaXNndWlzZS9HRFxcbmRpc2d1aXNlZC9VXFxuZGlzZ3VzdGVkL1lcXG5kaXNndXN0aW5nL1lcXG5kaXNoL01EU0dcXG5kaXNoYWJpbGxlL01cXG5kaXNoYXJtb25pb3VzXFxuZGlzaGNsb3RoL01cXG5kaXNoY2xvdGhzXFxuZGlzaGVhcnRlbmluZy9ZXFxuZGlzaGV2ZWwvREdMU1xcbmRpc2hldmVsbWVudC9NXFxuZGlzaHBhbi9TTVxcbmRpc2hyYWcvU01cXG5kaXNodG93ZWwvTVNcXG5kaXNod2FyZS9NXFxuZGlzaHdhc2hlci9NU1xcbmRpc2h3YXRlci9NXFxuZGlzaHlcXG5kaXNpbGx1c2lvbi9HTERcXG5kaXNpbGx1c2lvbm1lbnQvTVxcbmRpc2luZmVjdGFudC9NU1xcbmRpc2luZmVjdGlvbi9NXFxuZGlzaW50ZXJlc3RlZC9QWVxcbmRpc2ludGVyZXN0ZWRuZXNzL01cXG5kaXNqb2ludGVkL1lQXFxuZGlzam9pbnRlZG5lc3MvTVxcbmRpc2p1bmN0aXZlXFxuZGlzanVuY3R1cmVcXG5kaXNrL01TXFxuZGlza2V0dGUvTVNcXG5kaXNsb2RnZS9HRFNcXG5kaXNtYWwvWVxcbmRpc21hbnRsZW1lbnQvTVxcbmRpc21heS9TTURHXFxuZGlzbWF5ZWQvVVxcbmRpc21lbWJlci9MR0RcXG5kaXNtZW1iZXJtZW50L01cXG5kaXNtaXNzaXZlL1lcXG5kaXNvcmRlci9ZXFxuZGlzb3JnYW5pemF0aW9uL01cXG5kaXNwYXJhZ2UvRFNHTFxcbmRpc3BhcmFnZW1lbnQvTVxcbmRpc3BhcmFnaW5nL1lcXG5kaXNwYXJhdGUvWVxcbmRpc3BhdGNoZXIvTVNcXG5kaXNwZWwvU1xcbmRpc3BlbGxlZFxcbmRpc3BlbGxpbmdcXG5kaXNwZW5zYXJ5L1NNXFxuZGlzcGVuc2F0aW9uL01TXFxuZGlzcGVuc2UvQlpHRFJTXFxuZGlzcGVuc2VyL01cXG5kaXNwZXJzYWwvTVxcbmRpc3BlcnNlL0dORFNcXG5kaXNwZXJzaW9uL01cXG5kaXNwaXJpdC9HRFNcXG5kaXNwbGVhc3VyZS9NXFxuZGlzcG9zYWJsZS9TTVxcbmRpc3Bvc2FsL1NNXFxuZGlzcG9zZWQvSVxcbmRpc3Bvc2l0aW9uL0lTTVxcbmRpc3Bvc3Nlc3Npb24vTVxcbmRpc3Byb29mL1NNXFxuZGlzcHJvcG9ydGlvbmFsXFxuZGlzcHJvdmUvQlxcbmRpc3B1dGFibGUvSVxcbmRpc3B1dGFibHkvSVxcbmRpc3B1dGFudC9NU1xcbmRpc3B1dGF0aW9uL1NNXFxuZGlzcHV0YXRpb3VzL1lcXG5kaXNwdXRlL0RSU01aR0JcXG5kaXNwdXRlZC9VXFxuZGlzcHV0ZXIvTVxcbmRpc3F1aWV0L0dTTURcXG5kaXNxdWlzaXRpb24vTVNcXG5kaXNyZWdhcmRmdWxcXG5kaXNyZXBhaXIvTVxcbmRpc3JlcHV0ZS9NQlxcbmRpc3J1cHQvR1ZTRFxcbmRpc3J1cHRpb24vU01cXG5kaXNydXB0aXZlL1lcXG5kaXNzZWN0L1NER1xcbmRpc3NlZFxcbmRpc3NlbWJsYW5jZS9NXFxuZGlzc2VtYmxlL1pHRFJTXFxuZGlzc2VtYmxlci9NXFxuZGlzc2VtaW5hdGUvR05EU1xcbmRpc3NlbWluYXRpb24vTVxcbmRpc3NlbnNpb24vU01cXG5kaXNzZW50L1NNRFJaR1xcbmRpc3NlbnRlci9NXFxuZGlzc2VydGF0aW9uL1NNXFxuZGlzc2VzXFxuZGlzc2lkZW5jZS9NXFxuZGlzc2lkZW50L01TXFxuZGlzc2ltaWxhclxcbmRpc3NpbWlsaXR1ZGUvU1xcbmRpc3NpbmdcXG5kaXNzaXBhdGUvR05EU1xcbmRpc3NpcGF0aW9uL01cXG5kaXNzb2NpYXRlL0dOVkRTXFxuZGlzc29jaWF0aW9uL01cXG5kaXNzb2x1YmxlL0lcXG5kaXNzb2x1dGUvWU5QXFxuZGlzc29sdXRlbmVzcy9NXFxuZGlzc29sdmUvQUdEU1xcbmRpc3NvbHZlZC9VXFxuZGlzc29uYW5jZS9TTVxcbmRpc3NvbmFudFxcbmRpc3N1YWRlL0dEU1xcbmRpc3N1YXNpdmVcXG5kaXN0XFxuZGlzdGFmZi9TTVxcbmRpc3RhbC9ZXFxuZGlzdGFuY2UvRFNNR1xcbmRpc3RhbnQvWVxcbmRpc3Rhc3RlL1NNXFxuZGlzdGVtcGVyL01cXG5kaXN0ZW50aW9uL1NNXFxuZGlzdGlsbGF0ZS9TTU5YXFxuZGlzdGlsbGF0aW9uL01cXG5kaXN0aWxsZXJ5L1NNXFxuZGlzdGluY3QvSVlUVlBcXG5kaXN0aW5jdGVyXFxuZGlzdGluY3Rpb24vU01cXG5kaXN0aW5jdGl2ZS9ZUFxcbmRpc3RpbmN0aXZlbmVzcy9NXFxuZGlzdGluY3RuZXNzL0lNXFxuZGlzdGluZ3Vpc2gvR0RTQlxcbmRpc3Rpbmd1aXNoYWJsZS9JXFxuZGlzdGluZ3Vpc2hlZC9VXFxuZGlzdG9ydC9HRFJcXG5kaXN0b3J0aW9uL01TXFxuZGlzdHJhY3QvREdcXG5kaXN0cmFjdGVkL1lcXG5kaXN0cmFjdGlvbi9TXFxuZGlzdHJhaXRcXG5kaXN0cmF1Z2h0XFxuZGlzdHJlc3MvREdcXG5kaXN0cmVzc2Z1bFxcbmRpc3RyZXNzaW5nL1lcXG5kaXN0cmlidXRlL0FHTlZEU1xcbmRpc3RyaWJ1dGVkL1VcXG5kaXN0cmlidXRpb24vQU1cXG5kaXN0cmlidXRpb25hbFxcbmRpc3RyaWJ1dGlvbnNcXG5kaXN0cmlidXRpdmUvWVxcbmRpc3RyaWJ1dG9yJ3NcXG5kaXN0cmlidXRvci9BU1xcbmRpc3RyaWJ1dG9yc2hpcC9TXFxuZGlzdHJpY3Qnc1xcbmRpc3RyaWN0L0FTXFxuZGlzdHVyYi9aR1NEUlxcbmRpc3R1cmJhbmNlL1NNXFxuZGlzdHVyYmVkL1VcXG5kaXN0dXJiZXIvTVxcbmRpc3R1cmJpbmcvWVxcbmRpc3VuaW9uL01cXG5kaXN5bGxhYmljXFxuZGl0Y2gvTURTR1xcbmRpdGhlci9TTURSWkdcXG5kaXRoZXJlci9NXFxuZGl0cmFuc2l0aXZlXFxuZGl0c3lcXG5kaXR0by9TTURHXFxuZGl0dHkvU01cXG5kaXR6L01TXFxuZGl1cmV0aWMvTVNcXG5kaXVybmFsL1lcXG5kaXZcXG5kaXZhL01TXFxuZGl2YWxlbnRcXG5kaXZhbi9TTVxcbmRpdmUvTVpUR0RSU1xcbmRpdmVyL01cXG5kaXZlcmdlL0RTR1xcbmRpdmVyZ2VuY2UvTVNcXG5kaXZlcmdlbnRcXG5kaXZlcnNlL1hZTlBcXG5kaXZlcnNlbmVzcy9NXFxuZGl2ZXJzaWZpY2F0aW9uL01cXG5kaXZlcnNpZnkvR05EU1xcbmRpdmVyc2lvbi9NXFxuZGl2ZXJzaW9uYXJ5XFxuZGl2ZXJzaXR5L1NNXFxuZGl2ZXJ0L1NER1xcbmRpdmVydGljdWxpdGlzL01cXG5kaXZlc3QvU0xER1xcbmRpdmVzdGl0dXJlL01TXFxuZGl2ZXN0bWVudC9NXFxuZGl2aWRlL0RSU01aR0JcXG5kaXZpZGVkL1VcXG5kaXZpZGVuZC9NU1xcbmRpdmlkZXIvTVxcbmRpdmluYXRpb24vTVxcbmRpdmluZS9EUlNNWVpUR1xcbmRpdmluZXIvTVxcbmRpdmluZy9NXFxuZGl2aW5pdHkvU01cXG5kaXZpc2liaWxpdHkvSU1cXG5kaXZpc2libGUvSVxcbmRpdmlzaW9uL01TXFxuZGl2aXNpb25hbFxcbmRpdmlzaXZlL1BZXFxuZGl2aXNpdmVuZXNzL01cXG5kaXZpc29yL1NNXFxuZGl2b3JjZS9EU0xNR1xcbmRpdm9yY2VlL01TXFxuZGl2b3JjZW1lbnQvTVNcXG5kaXZvdC9TTVxcbmRpdnVsZ2UvR0RTXFxuZGl2dnkvRFNNR1xcbmRpeGllbGFuZC9NXFxuZGl6emlseVxcbmRpenppbmVzcy9NXFxuZGl6enkvRFJTUFRHXFxuZGplbGxhYmEvTVNcXG5kby9TSk1SSFpHXFxuZG9hYmxlXFxuZG9iL1NcXG5kb2JiZWRcXG5kb2JiaW4vU01cXG5kb2JiaW5nXFxuZG9iZXJtYW4vTVNcXG5kb2Jyb1xcbmRvYy9TTVxcbmRvY2VudC9TTVxcbmRvY2lsZS9ZXFxuZG9jaWxpdHkvTVxcbmRvY2svTURSWkdTXFxuZG9ja2V0L1NNREdcXG5kb2NrbGFuZC9TXFxuZG9ja3NpZGVcXG5kb2Nrd29ya2VyL01TXFxuZG9ja3lhcmQvTVNcXG5kb2N0b3IvU01ER1xcbmRvY3RvcmFsXFxuZG9jdG9yYXRlL01TXFxuZG9jdHJpbmFpcmUvTVNcXG5kb2N0cmluYWxcXG5kb2N0cmluZS9NU1xcbmRvY3VkcmFtYS9TTVxcbmRvY3VtZW50L0dNRFNcXG5kb2N1bWVudGFyeS9TTVxcbmRvY3VtZW50YXRpb24vU01cXG5kb2N1bWVudGVkL1VcXG5kb2RkZXIvU01ER1xcbmRvZGRlcnlcXG5kb2RkbGVcXG5kb2RnZS9EUlNNWkdcXG5kb2RnZW0vU1xcbmRvZGdlci9NXFxuZG9kZ3kvUlRcXG5kb2RvL01TXFxuZG9lL1NNXFxuZG9lci9NXFxuZG9lcy9BVVxcbmRvZXNraW4vTVNcXG5kb2Vzbid0XFxuZG9mZi9ER1NcXG5kb2cvU01cXG5kb2djYXJ0L1NNXFxuZG9nY2F0Y2hlci9TTVxcbmRvZ2UvTVNcXG5kb2dlYXJlZFxcbmRvZ2ZpZ2h0L1NNXFxuZG9nZmlzaC9NU1xcbmRvZ2dlZC9QWVxcbmRvZ2dlZG5lc3MvTVxcbmRvZ2dlcmVsL01cXG5kb2dnaW5nXFxuZG9nZ29uZS9UR1JTXFxuZG9nZ3kvUlNNVFxcbmRvZ2hvdXNlL1NNXFxuZG9naWUvU01cXG5kb2dsZWcvU01cXG5kb2dsZWdnZWRcXG5kb2dsZWdnaW5nXFxuZG9nbGlrZVxcbmRvZ21hL1NNXFxuZG9nbWF0aWNcXG5kb2dtYXRpY2FsbHlcXG5kb2dtYXRpc20vTVxcbmRvZ21hdGlzdC9TTVxcbmRvZ25hcHBlclxcbmRvZ3Nib2R5L1NcXG5kb2dzbGVkL1NcXG5kb2d0cm90L01TXFxuZG9ndHJvdHRlZFxcbmRvZ3Ryb3R0aW5nXFxuZG9nd29vZC9NU1xcbmRvaWx5L1NNXFxuZG9pbmcvVVNNXFxuZG9sZHJ1bXMvTVxcbmRvbGUnc1xcbmRvbGUvRkdEU1xcbmRvbGVmdWwvWVBcXG5kb2xlZnVsbmVzcy9NXFxuZG9sbC9NREdTXFxuZG9sbGFyL1NNXFxuZG9sbGhvdXNlL1NNXFxuZG9sbG9wL1NHTURcXG5kb2xseS9TTVxcbmRvbG1lbi9TTVxcbmRvbG9taXRlL01cXG5kb2xvci9NXFxuZG9sb3JvdXMvWVxcbmRvbHBoaW4vTVNcXG5kb2x0L01TXFxuZG9sdGlzaC9ZUFxcbmRvbHRpc2huZXNzL01cXG5kb21haW4vU01cXG5kb21lL01HRFNcXG5kb21lc3RpYy9TTVxcbmRvbWVzdGljYWxseVxcbmRvbWVzdGljYXRlL0RTR05cXG5kb21lc3RpY2F0ZWQvVVxcbmRvbWVzdGljYXRpb24vTVxcbmRvbWVzdGljaXR5L01cXG5kb21pY2lsZS9EU01HXFxuZG9taWNpbGlhcnlcXG5kb21pbmFuY2UvTVxcbmRvbWluYW50L1NNWVxcbmRvbWluYXRlL0RTR05cXG5kb21pbmF0aW9uL01cXG5kb21pbmF0cmljZXNcXG5kb21pbmF0cml4L01cXG5kb21pbmVlci9TR0RcXG5kb21pbmVlcmluZy9ZXFxuZG9taW5pb24vU01cXG5kb21pbm8vTVxcbmRvbWlub2VzXFxuZG9uJ3RcXG5kb24vU01cXG5kb25hL01TXFxuZG9uYXRlL0RTWEdOXFxuZG9uYXRpb24vTVxcbmRvbmUvRkFVXFxuZG9uZy9NREdTXFxuZG9uZ2xlL1NNXFxuZG9ua2V5L1NNXFxuZG9ubmVkXFxuZG9ubmluZ1xcbmRvbm5pc2hcXG5kb25ueWJyb29rL01TXFxuZG9ub3IvU01cXG5kb251dHNcXG5kb29kYWQvU01cXG5kb29kYWhcXG5kb29kYWhzXFxuZG9vZGxlL0RSU01aR1xcbmRvb2RsZWJ1Zy9TTVxcbmRvb2RsZXIvTVxcbmRvb2hpY2tleS9TTVxcbmRvb2xhbGx5XFxuZG9vbS9NREdTXFxuZG9vbXNheWVyL01TXFxuZG9vbXNkYXkvTVxcbmRvb21zdGVyL1NcXG5kb29yJ3NcXG5kb29yL0lTXFxuZG9vcmJlbGwvTVNcXG5kb29yamFtYi9TXFxuZG9vcmtlZXBlci9NU1xcbmRvb3Jrbm9iL01TXFxuZG9vcmtub2NrZXIvU1xcbmRvb3JtYW4vTVxcbmRvb3JtYXQvU01cXG5kb29ybWVuXFxuZG9vcnBsYXRlL1NNXFxuZG9vcnBvc3QvU1xcbmRvb3JzdGVwL01TXFxuZG9vcnN0ZXBwZWRcXG5kb29yc3RlcHBpbmdcXG5kb29yc3RvcC9NU1xcbmRvb3J3YXkvU01cXG5kb29yeWFyZC9NU1xcbmRvcGEvTVxcbmRvcGFtaW5lXFxuZG9wZS9NWkdEUlNcXG5kb3Blci9NXFxuZG9wZXlcXG5kb3BpZXJcXG5kb3BpZXN0XFxuZG9waW5lc3MvTVxcbmRvcGluZy9NXFxuZG9wcGVsZ2FuZ2VyL1NcXG5kb3JrL01TXFxuZG9ya3kvUlRcXG5kb3JtL01SWlNcXG5kb3JtYW5jeS9NXFxuZG9ybWFudFxcbmRvcm1lci9NXFxuZG9ybWljZVxcbmRvcm1pdG9yeS9TTVxcbmRvcm1vdXNlL01cXG5kb3JzYWwvWVxcbmRvcnkvU01cXG5kb3NhZ2UvU01cXG5kb3NlL01HRFNcXG5kb3NoXFxuZG9zaW1ldGVyL1NNXFxuZG9zcy9EUlNaR1xcbmRvc3Nob3VzZS9TXFxuZG9zc2llci9NU1xcbmRvc3RcXG5kb3QvWkdTTURSXFxuZG90YWdlL01cXG5kb3RhcmQvU01cXG5kb3Rjb20vU01cXG5kb3RlL1NcXG5kb3Rlci9NXFxuZG90aW5nL1lcXG5kb3R0ZWRcXG5kb3R0aW5nXFxuZG90dHkvUlRcXG5kb3VibGUnc1xcbmRvdWJsZS9BRFNHXFxuZG91YmxlaGVhZGVyL01TXFxuZG91Ymxlc3BlYWsvTVxcbmRvdWJsZXQvTVNcXG5kb3VibG9vbi9TTVxcbmRvdWJseVxcbmRvdWJ0L1NNRFJaR1xcbmRvdWJ0ZXIvTVxcbmRvdWJ0ZnVsL1BZXFxuZG91YnRmdWxuZXNzL01cXG5kb3VidGluZy9ZXFxuZG91YnRsZXNzL1lcXG5kb3VjaGUvRFNNR1xcbmRvdWdoL01cXG5kb3VnaG51dC9TTVxcbmRvdWdodHkvUlRcXG5kb3VnaHkvVFJcXG5kb3VyL1JZVFBcXG5kb3VybmVzcy9NXFxuZG91c2UvRFNHXFxuZG92ZS9NU1xcbmRvdmVjb3QvU1xcbmRvdmVjb3RlL1NNXFxuZG92ZXRhaWwvTURTR1xcbmRvdmlzaFxcbmRvd2FnZXIvTVNcXG5kb3dkaWx5XFxuZG93ZGluZXNzL01cXG5kb3dkeS9SU1BUXFxuZG93ZWwvU01ER1xcbmRvd2VyL1NNREdcXG5kb3duL01EUlpHU1xcbmRvd25iZWF0L1NNXFxuZG93bmNhc3RcXG5kb3duZHJhZnQvTVNcXG5kb3duZXIvTVxcbmRvd25mYWxsL1NNTlxcbmRvd25maWVsZFxcbmRvd25ncmFkZS9EU01HXFxuZG93bmhlYXJ0ZWQvUFlcXG5kb3duaGVhcnRlZG5lc3MvTVxcbmRvd25oaWxsL01TXFxuZG93bmxvYWQvTURCU0dcXG5kb3dubWFya2V0XFxuZG93bnBsYXkvRFNHXFxuZG93bnBvdXIvTVNcXG5kb3ducmFuZ2VcXG5kb3ducmlnaHRcXG5kb3ducml2ZXJcXG5kb3duc2NhbGVcXG5kb3duc2hpZnQvU0dEXFxuZG93bnNpZGUvTVNcXG5kb3duc2l6ZS9HRFNcXG5kb3duc2l6aW5nL01cXG5kb3duc3BvdXQvTVNcXG5kb3duc3RhZ2VcXG5kb3duc3RhaXJzL01cXG5kb3duc3RhdGUvTVxcbmRvd25zdHJlYW1cXG5kb3duc3dpbmcvTVNcXG5kb3dudGVtcG9cXG5kb3dudGltZS9NXFxuZG93bnRvd24vTVxcbmRvd250cmVuZC9NU1xcbmRvd250cm9kZGVuXFxuZG93bnR1cm4vTVNcXG5kb3dud2FyZC9TXFxuZG93bndpbmRcXG5kb3dueS9SVFxcbmRvd3J5L1NNXFxuZG93c2UvRFJTWkdcXG5kb3dzZXIvTVxcbmRveG9sb2d5L1NNXFxuZG95ZW4vU01cXG5kb3llbm5lL01TXFxuZG96L1hHRE5TXFxuZG96ZS9NXFxuZG96ZW4vTUhcXG5kb3ppbHlcXG5kb3p5L1JUUFxcbmRwaVxcbmRwdFxcbmRyYWIvTVlTUFxcbmRyYWJiZXJcXG5kcmFiYmVzdFxcbmRyYWJuZXNzL01cXG5kcmFjaG1hL01TXFxuZHJhY29uaWFuXFxuZHJhZnQnc1xcbmRyYWZ0L0FTREdcXG5kcmFmdGVlL1NNXFxuZHJhZnRlci9TTVxcbmRyYWZ0aWx5XFxuZHJhZnRpbmVzcy9NXFxuZHJhZnRpbmcvTVxcbmRyYWZ0c21hbi9NXFxuZHJhZnRzbWFuc2hpcC9NXFxuZHJhZnRzbWVuXFxuZHJhZnRzd29tYW4vTVxcbmRyYWZ0c3dvbWVuXFxuZHJhZnR5L1JUUFxcbmRyYWcvTVNcXG5kcmFnZ2VkXFxuZHJhZ2dpbmdcXG5kcmFnZ3kvVFJcXG5kcmFnbmV0L1NNXFxuZHJhZ29uL1NNXFxuZHJhZ29uZmx5L1NNXFxuZHJhZ29vbi9TTURHXFxuZHJhZ3N0ZXIvU1xcbmRyYWluL1NNRFJaR1xcbmRyYWluYWdlL01cXG5kcmFpbmJvYXJkL1NNXFxuZHJhaW5lci9NXFxuZHJhaW5waXBlL01TXFxuZHJha2UvU01cXG5kcmFtL01TXFxuZHJhbWEvU01cXG5kcmFtYXRpYy9TXFxuZHJhbWF0aWNhbGx5XFxuZHJhbWF0aWNzL01cXG5kcmFtYXRpc3QvU01cXG5kcmFtYXRpemF0aW9uL1NNXFxuZHJhbWF0aXplL0RTR1xcbmRyYW5rXFxuZHJhcGUvRFJTTVpHXFxuZHJhcGVyL01cXG5kcmFwZXJ5L1NNXFxuZHJhc3RpY1xcbmRyYXN0aWNhbGx5XFxuZHJhdFxcbmRyYXR0ZWRcXG5kcmF1Z2h0Ym9hcmQvU1xcbmRyYXcvTVJaR1NKXFxuZHJhd2JhY2svTVNcXG5kcmF3YnJpZGdlL01TXFxuZHJhd2VyL01cXG5kcmF3aW5nL01cXG5kcmF3bC9TTURHXFxuZHJhd24vQVxcbmRyYXdzdHJpbmcvTVNcXG5kcmF5L01TXFxuZHJlYWQvU01ER1xcbmRyZWFkZnVsL1BZXFxuZHJlYWRmdWxuZXNzL01cXG5kcmVhZGxvY2tzL01cXG5kcmVhZG5vdWdodC9NU1xcbmRyZWFtL1NNRFJaR1xcbmRyZWFtYm9hdC9NU1xcbmRyZWFtZWQvVVxcbmRyZWFtZXIvTVxcbmRyZWFtaWx5XFxuZHJlYW1pbmVzcy9NXFxuZHJlYW1sYW5kL01cXG5kcmVhbWxlc3NcXG5kcmVhbWxpa2VcXG5kcmVhbXdvcmxkL1NNXFxuZHJlYW15L1JQVFxcbmRyZWFyXFxuZHJlYXJpbHlcXG5kcmVhcmluZXNzL01cXG5kcmVhcnkvUlBUXFxuZHJlZGdlL0RSU01aR1xcbmRyZWRnZXIvTVxcbmRyZWdzL01cXG5kcmVuY2gvR0RTXFxuZHJlc3MvQVVHU0RNXFxuZHJlc3NhZ2UvTVxcbmRyZXNzZXIvTVNcXG5kcmVzc2luZXNzL01cXG5kcmVzc2luZy9TTVxcbmRyZXNzbWFrZXIvU01cXG5kcmVzc21ha2luZy9NXFxuZHJlc3N5L1RQUlxcbmRyZXcvQVxcbmRyaWJibGUvTVpHRFJTXFxuZHJpYmJsZXIvTVxcbmRyaWJsZXQvTVNcXG5kcmllci9NXFxuZHJpZnQvU01EUlpHXFxuZHJpZnRlci9NXFxuZHJpZnRuZXQvU1xcbmRyaWZ0d29vZC9NXFxuZHJpbGwvU01EUlpHXFxuZHJpbGxlci9NXFxuZHJpbGxtYXN0ZXIvU01cXG5kcmluay9TTVJCSlpHXFxuZHJpbmthYmxlL1VcXG5kcmlua2VyL01cXG5kcmlwL01TXFxuZHJpcHBlZFxcbmRyaXBwaW5nL1NNXFxuZHJpcHB5L1RSXFxuZHJpdmUvUlNNWkdKXFxuZHJpdmVsL1NaR01EUlxcbmRyaXZlbGVyL01cXG5kcml2ZW5cXG5kcml2ZXIvTVxcbmRyaXZlc2hhZnQvU01cXG5kcml2ZXdheS9NU1xcbmRyaXp6bGUvTUdEU1xcbmRyaXp6bHlcXG5kcm9ndWUvU01cXG5kcm9pZC9TXFxuZHJvbGwvUlBUXFxuZHJvbGxlcnkvU01cXG5kcm9sbG5lc3MvTVxcbmRyb2xseVxcbmRyb21lZGFyeS9TTVxcbmRyb25lL0RTTUdcXG5kcm9vbC9TTURHXFxuZHJvb3AvR1NNRFxcbmRyb29waW5lc3MvTVxcbmRyb29weS9UUFJcXG5kcm9wL01TXFxuZHJvcGtpY2svTVNcXG5kcm9wbGV0L1NNXFxuZHJvcG91dC9TTVxcbmRyb3BwZWRcXG5kcm9wcGVyL1NNXFxuZHJvcHBpbmcvU1xcbmRyb3BwaW5ncy9NXFxuZHJvcHNpY2FsXFxuZHJvcHN5L01cXG5kcm9zcy9NXFxuZHJvdWdodC9TTVxcbmRyb3ZlL1JTTVpcXG5kcm92ZXIvTVxcbmRyb3duL0dTSkRcXG5kcm93bmluZy9NXFxuZHJvd3NlL01HRFNcXG5kcm93c2lseVxcbmRyb3dzaW5lc3MvTVxcbmRyb3dzeS9SVFBcXG5kcnViL1NcXG5kcnViYmVkXFxuZHJ1YmJlci9TTVxcbmRydWJiaW5nL01TXFxuZHJ1ZGdlL01HRFNcXG5kcnVkZ2VyeS9NXFxuZHJ1Zy9NU1xcbmRydWdnZWRcXG5kcnVnZ2llL1NNXFxuZHJ1Z2dpbmdcXG5kcnVnZ2lzdC9TTVxcbmRydWdneVxcbmRydWdzdG9yZS9NU1xcbmRydWlkL1NNXFxuZHJ1aWRpc20vTVxcbmRydW0vTVNcXG5kcnVtYmVhdC9TTVxcbmRydW1saW4vU01cXG5kcnVtbWVkXFxuZHJ1bW1lci9TTVxcbmRydW1taW5nXFxuZHJ1bXN0aWNrL1NNXFxuZHJ1bmsvU1RNTlJcXG5kcnVua2FyZC9NU1xcbmRydW5rZW4vUFlcXG5kcnVua2VubmVzcy9NXFxuZHJ1cGUvU01cXG5kcnV0aGVycy9NXFxuZHJ5L1pUR0RSU01ZXFxuZHJ5YWQvU01cXG5kcnllci9TTVxcbmRyeW5lc3MvTVxcbmRyeXNcXG5kcnl3YWxsL01cXG5kdWFsXFxuZHVhbGlzbS9NXFxuZHVhbGl0eS9NXFxuZHViL1NNXFxuZHViYmVkXFxuZHViYmVyL1NNXFxuZHViYmluL01cXG5kdWJiaW5nXFxuZHViaWV0eS9NXFxuZHViaW91cy9ZUFxcbmR1YmlvdXNuZXNzL01cXG5kdWNhbFxcbmR1Y2F0L1NNXFxuZHVjaGVzcy9NU1xcbmR1Y2h5L1NNXFxuZHVjay9NREdTXFxuZHVja2JpbGwvU01cXG5kdWNrYm9hcmRzXFxuZHVja2xpbmcvU01cXG5kdWNrcGlucy9NXFxuZHVja3dlZWQvTVxcbmR1Y2t5L1RSU01cXG5kdWN0J3MvS1xcbmR1Y3QvQ0tJRlNcXG5kdWN0aWxlXFxuZHVjdGlsaXR5L01cXG5kdWN0aW5nXFxuZHVjdGxlc3NcXG5kdWQvR1NNRFxcbmR1ZGUvTVNcXG5kdWRnZW9uL01cXG5kdWUvU01cXG5kdWVsL01EUkpaR1NcXG5kdWVsZXIvTVxcbmR1ZWxpc3QvU01cXG5kdWVubmEvTVNcXG5kdWV0L01TXFxuZHVmZi9NRFJaR1NcXG5kdWZmZXIvTVxcbmR1Z1xcbmR1Z291dC9NU1xcbmR1aFxcbmR1a2UvTVNcXG5kdWtlZG9tL1NNXFxuZHVsY2V0XFxuZHVsY2ltZXIvTVNcXG5kdWxsL0RSUFRHU1xcbmR1bGxhcmQvU01cXG5kdWxsbmVzcy9NXFxuZHVsbHlcXG5kdWx5L1VcXG5kdW1iL1JZUFRcXG5kdW1iYmVsbC9TTVxcbmR1bWJmb3VuZC9TREdcXG5kdW1ibmVzcy9NXFxuZHVtYm8vU1xcbmR1bWJzdHJ1Y2tcXG5kdW1id2FpdGVyL1NNXFxuZHVtZHVtL01TXFxuZHVtbXkvU01cXG5kdW1wL01EUlpHU1xcbmR1bXBpbmVzcy9NXFxuZHVtcGxpbmcvU01cXG5kdW1wc2l0ZS9TXFxuZHVtcHN0ZXIvU01cXG5kdW1weS9QVFJcXG5kdW4vU01cXG5kdW5jZS9TTVxcbmR1bmRlcmhlYWQvTVNcXG5kdW5lL01TXFxuZHVuZy9NREdTXFxuZHVuZ2FyZWUvTVNcXG5kdW5nZW9uL1NNXFxuZHVuZ2hpbGwvTVNcXG5kdW5rL01ER1NcXG5kdW5uZWRcXG5kdW5uZXJcXG5kdW5uZXN0XFxuZHVubmluZ1xcbmR1bm5vXFxuZHVvL1NNXFxuZHVvZGVjaW1hbFxcbmR1b2RlbmFcXG5kdW9kZW5hbFxcbmR1b2RlbnVtL01cXG5kdW9wb2x5L1NcXG5kdXBlL01aR0RSU1xcbmR1cGVyL01cXG5kdXBsZVxcbmR1cGxleC9NU1xcbmR1cGxpY2F0ZSdzXFxuZHVwbGljYXRlL0FHTkRTXFxuZHVwbGljYXRpb24vQU1cXG5kdXBsaWNhdG9yL01TXFxuZHVwbGljaXRvdXNcXG5kdXBsaWNpdHkvTVxcbmR1cmFiaWxpdHkvTVxcbmR1cmFibGVcXG5kdXJhYmx5XFxuZHVyYW5jZS9NXFxuZHVyYXRpb24vTVxcbmR1cmVzcy9NXFxuZHVyaW5nXFxuZHVyc3RcXG5kdXJ1bS9NXFxuZHVzay9NXFxuZHVza2luZXNzL01cXG5kdXNreS9SVFBcXG5kdXN0L01EUlpHU1xcbmR1c3RiaW4vU01cXG5kdXN0Y2FydC9TXFxuZHVzdGVyL01cXG5kdXN0aW5lc3MvTVxcbmR1c3RsZXNzXFxuZHVzdG1hblxcbmR1c3RtZW5cXG5kdXN0cGFuL1NNXFxuZHVzdHNoZWV0L1NcXG5kdXN0eS9SVFBcXG5kdXRjaFxcbmR1dGVvdXMvWVxcbmR1dGlhYmxlXFxuZHV0aWZ1bC9ZUFxcbmR1dGlmdWxuZXNzL01cXG5kdXR5L1NNXFxuZHV2ZXQvU01cXG5kd2FyZi9TR01EXFxuZHdhcmZpc2hcXG5kd2FyZmlzbS9NXFxuZHdlZWIvU01cXG5kd2VsbC9TSlpHUlxcbmR3ZWxsZXIvTVxcbmR3ZWxsaW5nL01cXG5kd2VsdC9JXFxuZHdpbmRsZS9EU0dcXG5keWFkaWNcXG5keWJidWsvU01cXG5keWJidWtpbVxcbmR5ZS9EUlNNWkdcXG5keWVpbmcvQVxcbmR5ZXIvTVxcbmR5ZXN0dWZmL01cXG5keWluZy9NXFxuZHlrZS9NU1xcbmR5bmFtaWMvTVNcXG5keW5hbWljYWwvWVxcbmR5bmFtaWNzL01cXG5keW5hbWlzbS9NXFxuZHluYW1pdGUvTVpHRFJTXFxuZHluYW1pdGVyL01cXG5keW5hbW8vU01cXG5keW5hc3RpY1xcbmR5bmFzdHkvU01cXG5keXNlbnRlcnkvTVxcbmR5c2Z1bmN0aW9uL01TXFxuZHlzZnVuY3Rpb25hbFxcbmR5c2xlY3RpYy9TTVxcbmR5c2xleGlhL01cXG5keXNsZXhpYy9TTVxcbmR5c3BlcHNpYS9NXFxuZHlzcGVwdGljL01TXFxuZHlzcGhhZ2lhXFxuZHlzcGhvcmlhXFxuZHlzcGhvcmljXFxuZHlzcHJvc2l1bS9NXFxuZHlzdG9uaWFcXG5keXN0b3BpXFxuZHlzdG9waWFcXG5keXN0b3BpYW5cXG5kelxcbmUnZW5cXG5lJ2VyXFxuZS9GRFNUXFxuZUJheS9NXFxuZU11c2ljL01cXG5lYVxcbmVhY2hcXG5lYWdlci9QVFJZXFxuZWFnZXJuZXNzL01cXG5lYWdsZS9NU1xcbmVhZ2xldC9NU1xcbmVhci9TTURZXFxuZWFyYWNoZS9TTVxcbmVhcmJ1ZC9TTVxcbmVhcmRydW0vU01cXG5lYXJmdWwvU01cXG5lYXJsL01TXFxuZWFybGRvbS9TTVxcbmVhcmxpbmVzcy9NXFxuZWFybG9iZS9TTVxcbmVhcmx5L1JUUFxcbmVhcm1hcmsvU01ER1xcbmVhcm11ZmYvU01cXG5lYXJuL0RSWlRHSlNcXG5lYXJuZWQvVVxcbmVhcm5lci9NXFxuZWFybmVzdC9TTVlQXFxuZWFybmVzdG5lc3MvTVxcbmVhcm5pbmdzL01cXG5lYXJwaG9uZS9NU1xcbmVhcnBpZWNlL1NcXG5lYXJwbHVnL1NNXFxuZWFycmluZy9TTVxcbmVhcnNob3QvTVxcbmVhcnNwbGl0dGluZ1xcbmVhcnRoJ3NcXG5lYXJ0aC9VRFlHXFxuZWFydGhib3VuZFxcbmVhcnRoZW5cXG5lYXJ0aGVud2FyZS9NXFxuZWFydGhpbmVzcy9NXFxuZWFydGhsaW5nL01TXFxuZWFydGhseS9SVFxcbmVhcnRocXVha2UvU01cXG5lYXJ0aHMvVVxcbmVhcnRoc2hha2luZ1xcbmVhcnRod2FyZC9TXFxuZWFydGh3b3JrL01TXFxuZWFydGh3b3JtL01TXFxuZWFydGh5L1JUUFxcbmVhcndheC9NXFxuZWFyd2lnL1NNXFxuZWFzZS9FRFNNXFxuZWFzZWwvU01cXG5lYXNlbWVudC9TTVxcbmVhc2lseS9VXFxuZWFzaW5lc3MvVU1cXG5lYXNpbmdcXG5lYXN0L01cXG5lYXN0Ym91bmRcXG5lYXN0ZXJseS9TTVxcbmVhc3Rlcm4vWlJcXG5lYXN0ZXJuZXIvTVxcbmVhc3Rlcm5tb3N0XFxuZWFzdHdhcmQvU1xcbmVhc3kvVVJUUFxcbmVhc3lnb2luZ1xcbmVhdC9aR0JTTlJcXG5lYXRhYmxlL1NNXFxuZWF0ZW4vVVxcbmVhdGVyL01cXG5lYXRlcnkvU01cXG5lYXZlL01TXFxuZWF2ZXNkcm9wL1NcXG5lYXZlc2Ryb3BwZWRcXG5lYXZlc2Ryb3BwZXIvU01cXG5lYXZlc2Ryb3BwaW5nXFxuZWJiL1NNREdcXG5lYm9ueS9TTVxcbmVidWxsaWVuY2UvTVxcbmVidWxsaWVudC9ZXFxuZWJ1bGxpdGlvbi9NXFxuZWNjZW50cmljL1NNXFxuZWNjZW50cmljYWxseVxcbmVjY2VudHJpY2l0eS9TTVxcbmVjY2xcXG5lY2NsZXNpYWxcXG5lY2NsZXNpYXN0aWMvU01cXG5lY2NsZXNpYXN0aWNhbC9ZXFxuZWNoZWxvbi9TTVxcbmVjaGlkbmFcXG5lY2hpbm9kZXJtL1NNXFxuZWNobydzXFxuZWNoby9BREdcXG5lY2hvZXMvQVxcbmVjaG9pY1xcbmVjaG9sb2NhdGlvbi9NXFxuZWNob3NcXG5lY2xhaXIvU01cXG5lY2xhdC9NXFxuZWNsZWN0aWMvU01cXG5lY2xlY3RpY2FsbHlcXG5lY2xlY3RpY2lzbS9NXFxuZWNsaXBzZS9EU01HXFxuZWNsaXB0aWMvTVxcbmVjbG9ndWUvU01cXG5lY29jaWRlL01cXG5lY29sXFxuZWNvbG9naWNcXG5lY29sb2dpY2FsL1lcXG5lY29sb2dpc3QvTVNcXG5lY29sb2d5L01cXG5lY29uXFxuZWNvbm9tZXRyaWMvU1xcbmVjb25vbWljL1NcXG5lY29ub21pY2FsL1VZXFxuZWNvbm9taWNzL01cXG5lY29ub21pc3QvU01cXG5lY29ub21pemUvRFJTWkdcXG5lY29ub21pemVyL01cXG5lY29ub215L1NNXFxuZWNvc3lzdGVtL01TXFxuZWNvdG91cmlzbS9NXFxuZWNvdG91cmlzdC9NU1xcbmVjcnUvTVxcbmVjc3Rhc3kvU01cXG5lY3N0YXRpY1xcbmVjc3RhdGljYWxseVxcbmVjdS9TXFxuZWN1bWVuaWNhbC9ZXFxuZWN1bWVuaWNpc20vTVxcbmVjdW1lbmlzbS9NXFxuZWN6ZW1hL01cXG5lZC9BQ1NNXFxuZWRhbWFtZVxcbmVkZHkvRFNNR1xcbmVkZWx3ZWlzcy9NXFxuZWRlbWEvU01cXG5lZGdlL01aR0pEUlNcXG5lZGdlci9NXFxuZWRnZXdpc2VcXG5lZGdpbHlcXG5lZGdpbmVzcy9NXFxuZWRnaW5nL01cXG5lZGd5L1JUUFxcbmVkaWJpbGl0eS9NXFxuZWRpYmxlL1NNUFxcbmVkaWJsZW5lc3MvTVxcbmVkaWN0L1NNXFxuZWRpZmljYXRpb24vTVxcbmVkaWZpY2UvU01cXG5lZGlmaWVyL01cXG5lZGlmeS9EUlNaR05cXG5lZGlmeWluZy9VXFxuZWRpdCdzXFxuZWRpdC9BREdTXFxuZWRpdGFibGVcXG5lZGl0ZWQvVVxcbmVkaXRpb24vTVNcXG5lZGl0b3IvU01cXG5lZGl0b3JpYWwvU01ZXFxuZWRpdG9yaWFsaXplL0RTR1xcbmVkaXRvcnNoaXAvTVxcbmVkdWNcXG5lZHVjYWJpbGl0eS9NXFxuZWR1Y2FibGUvSVxcbmVkdWNhdGUvQURTR05WXFxuZWR1Y2F0ZWQvVVxcbmVkdWNhdGlvbi9BTVxcbmVkdWNhdGlvbmFsL1lcXG5lZHVjYXRpb25hbGlzdC9TXFxuZWR1Y2F0aW9uaXN0L1NcXG5lZHVjYXRpb25zXFxuZWR1Y2F0b3IvTVNcXG5lZHVjZS9EU0dCXFxuZWR1dGFpbm1lbnQvTVxcbmVla1xcbmVlbC9TTVxcbmVlcmllL1JUXFxuZWVyaWx5XFxuZWVyaW5lc3MvTVxcbmVmZi9HU0RcXG5lZmZhY2UvRFNMR1xcbmVmZmFjZW1lbnQvTVxcbmVmZmVjdC9TTURHVlxcbmVmZmVjdGl2ZS9JUFlcXG5lZmZlY3RpdmVuZXNzL0lNXFxuZWZmZWN0dWFsL0lZXFxuZWZmZWN0dWF0ZS9EU0dcXG5lZmZlbWluYWN5L01cXG5lZmZlbWluYXRlL1lcXG5lZmZlbmRpL1NNXFxuZWZmZXJlbnRcXG5lZmZlcnZlc2NlL0dEU1xcbmVmZmVydmVzY2VuY2UvTVxcbmVmZmVydmVzY2VudC9ZXFxuZWZmZXRlL1lQXFxuZWZmZXRlbmVzcy9NXFxuZWZmaWNhY2lvdXMvWVxcbmVmZmljYWN5L0lNXFxuZWZmaWNpZW5jeS9JU01cXG5lZmZpY2llbnQvSVlcXG5lZmZpZ3kvU01cXG5lZmZsb3Jlc2NlbmNlL01cXG5lZmZsb3Jlc2NlbnRcXG5lZmZsdWVuY2UvTVxcbmVmZmx1ZW50L01TXFxuZWZmbHV2aWFcXG5lZmZsdXZpdW0vTVxcbmVmZmx1eFxcbmVmZm9ydC9TTVxcbmVmZm9ydGZ1bFxcbmVmZm9ydGxlc3MvWVBcXG5lZmZvcnRsZXNzbmVzcy9NXFxuZWZmcm9udGVyeS9NXFxuZWZmdWxnZW5jZS9NXFxuZWZmdWxnZW50XFxuZWZmdXNlL0RTR05WWFxcbmVmZnVzaW9uL01cXG5lZmZ1c2l2ZS9ZUFxcbmVmZnVzaXZlbmVzcy9NXFxuZWdhZFxcbmVnYWxpdGFyaWFuL1NNXFxuZWdhbGl0YXJpYW5pc20vTVxcbmVnZy9HU01EXFxuZWdnYmVhdGVyL01TXFxuZWdnY3VwL1NNXFxuZWdnaGVhZC9TTVxcbmVnZ25vZy9NXFxuZWdncGxhbnQvTVNcXG5lZ2dzaGVsbC9TTVxcbmVnbGFudGluZS9TTVxcbmVnby9TTVxcbmVnb2NlbnRyaWMvTVNcXG5lZ29jZW50cmljYWxseVxcbmVnb2NlbnRyaWNpdHkvTVxcbmVnb2lzbS9NXFxuZWdvaXN0L1NNXFxuZWdvaXN0aWNcXG5lZ29pc3RpY2FsL1lcXG5lZ29tYW5pYS9NXFxuZWdvbWFuaWFjL01TXFxuZWdvdGlzbS9NXFxuZWdvdGlzdC9TTVxcbmVnb3Rpc3RpY1xcbmVnb3Rpc3RpY2FsL1lcXG5lZ3JlZ2lvdXMvUFlcXG5lZ3JlZ2lvdXNuZXNzL01cXG5lZ3Jlc3MvTVNcXG5lZ3JldC9TTVxcbmVoXFxuZWlkZXIvU01cXG5laWRlcmRvd24vTVNcXG5laWdlbnZhbHVlL1NcXG5laWdlbnZlY3Rvci9TXFxuZWlnaHQvU01cXG5laWdodGVlbi9NSFNcXG5laWdodGVlbnRoL01cXG5laWdodGVlbnRoc1xcbmVpZ2h0aC9NXFxuZWlnaHRoc1xcbmVpZ2h0aWV0aC9NXFxuZWlnaHRpZXRoc1xcbmVpZ2h0eS9TTUhcXG5laW5zdGVpbml1bS9NXFxuZWlzdGVkZGZvZC9TXFxuZWl0aGVyXFxuZWphY3VsYXRlL0dOWERTXFxuZWphY3VsYXRpb24vTVxcbmVqYWN1bGF0b3J5XFxuZWplY3QvU0RHXFxuZWplY3Rpb24vTVNcXG5lamVjdG9yL1NNXFxuZWtlL0RTR1xcbmVsYWJvcmF0ZS9ZR05EU1BYXFxuZWxhYm9yYXRlbmVzcy9NXFxuZWxhYm9yYXRpb24vTVxcbmVsYW4vTVxcbmVsYW5kL1NNXFxuZWxhcHNlL0RTR1xcbmVsYXN0aWMvTVNcXG5lbGFzdGljYWxseVxcbmVsYXN0aWNhdGVkXFxuZWxhc3RpY2l0eS9NXFxuZWxhc3RpY2l6ZS9EU0dcXG5lbGF0ZS9EU0dOXFxuZWxhdGVkL1lcXG5lbGF0aW9uL01cXG5lbGJvdy9TTURHXFxuZWxib3dyb29tL01cXG5lbGRlci9TTVlcXG5lbGRlcmJlcnJ5L1NNXFxuZWxkZXJjYXJlL01cXG5lbGRlc3RcXG5lbGRyaXRjaFxcbmVsZWN0J3NcXG5lbGVjdC9BU0RHVlxcbmVsZWN0YWJsZVxcbmVsZWN0aW9uL0FNU1xcbmVsZWN0aW9uZWVyL0RHU1xcbmVsZWN0aXZlL01TXFxuZWxlY3Rvci9NU1xcbmVsZWN0b3JhbC9ZXFxuZWxlY3RvcmF0ZS9NU1xcbmVsZWN0cmljL1NcXG5lbGVjdHJpY2FsL1lcXG5lbGVjdHJpY2lhbi9NU1xcbmVsZWN0cmljaXR5L01cXG5lbGVjdHJpZmljYXRpb24vTVxcbmVsZWN0cmlmaWVyL01cXG5lbGVjdHJpZnkvWkdORFJTXFxuZWxlY3Ryb2NhcmRpb2dyYW0vTVNcXG5lbGVjdHJvY2FyZGlvZ3JhcGgvTVxcbmVsZWN0cm9jYXJkaW9ncmFwaHNcXG5lbGVjdHJvY2FyZGlvZ3JhcGh5L01cXG5lbGVjdHJvY3V0ZS9EU1hHTlxcbmVsZWN0cm9jdXRpb24vTVxcbmVsZWN0cm9kZS9TTVxcbmVsZWN0cm9keW5hbWljc1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFtL01TXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoL01cXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGhpY1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFwaHNcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGh5L01cXG5lbGVjdHJvbG9naXN0L1NNXFxuZWxlY3Ryb2x5c2lzL01cXG5lbGVjdHJvbHl0ZS9NU1xcbmVsZWN0cm9seXRpY1xcbmVsZWN0cm9tYWduZXQvTVNcXG5lbGVjdHJvbWFnbmV0aWNcXG5lbGVjdHJvbWFnbmV0aWNhbGx5XFxuZWxlY3Ryb21hZ25ldGlzbS9NXFxuZWxlY3Ryb21vdGl2ZVxcbmVsZWN0cm9uL01TXFxuZWxlY3Ryb25pYy9TXFxuZWxlY3Ryb25pY2EvTVxcbmVsZWN0cm9uaWNhbGx5XFxuZWxlY3Ryb25pY3MvTVxcbmVsZWN0cm9wbGF0ZS9EU0dcXG5lbGVjdHJvc2NvcGUvU01cXG5lbGVjdHJvc2NvcGljXFxuZWxlY3Ryb3Nob2NrL01cXG5lbGVjdHJvc3RhdGljL1NcXG5lbGVjdHJvc3RhdGljcy9NXFxuZWxlY3Ryb3R5cGUvTVNcXG5lbGVjdHJvd2Vha1xcbmVsZWVtb3N5bmFyeVxcbmVsZWdhbmNlL0lNXFxuZWxlZ2FudC9JWVxcbmVsZWdpYWMvTVNcXG5lbGVnaWFjYWxcXG5lbGVneS9TTVxcbmVsZW1cXG5lbGVtZW50L01TXFxuZWxlbWVudGFsL1lcXG5lbGVtZW50YXJ5XFxuZWxlcGhhbnQvU01cXG5lbGVwaGFudGlhc2lzL01cXG5lbGVwaGFudGluZVxcbmVsZXZcXG5lbGV2YXRlL1hEU0dOXFxuZWxldmF0aW9uL01cXG5lbGV2YXRvci9NU1xcbmVsZXZlbi9TTUhcXG5lbGV2ZW5zL1NcXG5lbGV2ZW50aC9NXFxuZWxldmVudGhzXFxuZWxmL01cXG5lbGZpblxcbmVsZmlzaFxcbmVsaWNpdC9TREdcXG5lbGljaXRhdGlvbi9NXFxuZWxpZGUvRFNHXFxuZWxpZ2liaWxpdHkvSU1cXG5lbGlnaWJsZVxcbmVsaW1pbmF0ZS9YRFNHTlxcbmVsaW1pbmF0aW9uL01cXG5lbGltaW5hdG9yL1NcXG5lbGlzaW9uL01TXFxuZWxpdGUvU01cXG5lbGl0aXNtL01cXG5lbGl0aXN0L01TXFxuZWxpeGlyL1NNXFxuZWxrL1NNXFxuZWxsL1NNXFxuZWxsaXBzZS9NU1xcbmVsbGlwc2lzL01cXG5lbGxpcHNvaWQvU01cXG5lbGxpcHNvaWRhbFxcbmVsbGlwdGljXFxuZWxsaXB0aWNhbC9ZXFxuZWxtL1NNXFxuZWxvY3V0aW9uL01cXG5lbG9jdXRpb25hcnlcXG5lbG9jdXRpb25pc3QvU01cXG5lbG9kZWEvU01cXG5lbG9uZ2F0ZS9EU0dOWFxcbmVsb25nYXRpb24vTVxcbmVsb3BlL0RTR0xcXG5lbG9wZW1lbnQvTVNcXG5lbG9xdWVuY2UvTVxcbmVsb3F1ZW50L1lcXG5lbHNlXFxuZWxzZXdoZXJlXFxuZWx1Y2lkYXRlL0RTR05YXFxuZWx1Y2lkYXRpb24vTVxcbmVsdWRlL0RTR1xcbmVsdXNpdmUvWVBcXG5lbHVzaXZlbmVzcy9NXFxuZWx2ZXIvU01cXG5lbHZlc1xcbmVsdmlzaFxcbmVtJ3NcXG5lbS9TXFxuZW1hY2lhdGUvR05EU1xcbmVtYWNpYXRpb24vTVxcbmVtYWlsL1NNREdcXG5lbWFuYXRlL1hEU0dOXFxuZW1hbmF0aW9uL01cXG5lbWFuY2lwYXRlL0RTR05cXG5lbWFuY2lwYXRpb24vTVxcbmVtYW5jaXBhdG9yL01TXFxuZW1hc2N1bGF0ZS9HTkRTXFxuZW1hc2N1bGF0aW9uL01cXG5lbWJhbG0vU1pHRFJcXG5lbWJhbG1lci9NXFxuZW1iYW5rL1NMR0RcXG5lbWJhbmttZW50L1NNXFxuZW1iYXJnby9NREdcXG5lbWJhcmdvZXNcXG5lbWJhcmsvQUVHRFNcXG5lbWJhcmthdGlvbi9FTVxcbmVtYmFya2F0aW9uc1xcbmVtYmFycmFzcy9HTERTXFxuZW1iYXJyYXNzZWQvVVxcbmVtYmFycmFzc2luZy9ZXFxuZW1iYXJyYXNzbWVudC9TTVxcbmVtYmFzc3kvU01cXG5lbWJhdHRsZWRcXG5lbWJlZC9TXFxuZW1iZWRkZWRcXG5lbWJlZGRpbmdcXG5lbWJlbGxpc2gvTEdEU1xcbmVtYmVsbGlzaG1lbnQvU01cXG5lbWJlci9TTVxcbmVtYmV6emxlL1pHTERSU1xcbmVtYmV6emxlbWVudC9NXFxuZW1iZXp6bGVyL01cXG5lbWJpdHRlci9HTERTXFxuZW1iaXR0ZXJtZW50L01cXG5lbWJsYXpvbi9HRExTXFxuZW1ibGF6b25tZW50L01cXG5lbWJsZW0vU01cXG5lbWJsZW1hdGljXFxuZW1ibGVtYXRpY2FsbHlcXG5lbWJvZGltZW50L0VNXFxuZW1ib2R5L0FFR1NEXFxuZW1ib2xkZW4vREdTXFxuZW1ib2xpc20vTVNcXG5lbWJvbGl6YXRpb25cXG5lbWJvc3MvRFJTWkdcXG5lbWJvc3Nlci9NXFxuZW1ib3VjaHVyZS9NXFxuZW1ib3dlci9TR0RcXG5lbWJyYWNlL0RTTUdcXG5lbWJyYWNlYWJsZVxcbmVtYnJhc3VyZS9NU1xcbmVtYnJvY2F0aW9uL01TXFxuZW1icm9pZGVyL1NEUlpHXFxuZW1icm9pZGVyZXIvTVxcbmVtYnJvaWRlcnkvU01cXG5lbWJyb2lsL0RHTFNcXG5lbWJyb2lsbWVudC9NXFxuZW1icnlvL1NNXFxuZW1icnlvbG9naWNhbFxcbmVtYnJ5b2xvZ2lzdC9NU1xcbmVtYnJ5b2xvZ3kvTVxcbmVtYnJ5b25pY1xcbmVtY2VlL0RTTVxcbmVtY2VlaW5nXFxuZW1lbmQvU0RHXFxuZW1lbmRhdGlvbi9NU1xcbmVtZXJhbGQvTVNcXG5lbWVyZ2UvQURTR1xcbmVtZXJnZW5jZS9BTVxcbmVtZXJnZW5jeS9TTVxcbmVtZXJnZW50XFxuZW1lcml0YVxcbmVtZXJpdHVzXFxuZW1lcnkvTVxcbmVtZXRpYy9TTVxcbmVtZi9TXFxuZW1pZ3JhbnQvU01cXG5lbWlncmF0ZS9EU1hHTlxcbmVtaWdyYXRpb24vTVxcbmVtaWdyZS9TTVxcbmVtaW5lbmNlL01TXFxuZW1pbmVudC9ZXFxuZW1pci9NU1xcbmVtaXJhdGUvTVNcXG5lbWlzc2FyeS9TTVxcbmVtaXNzaW9uL1NNXFxuZW1pdC9TXFxuZW1pdHRlZFxcbmVtaXR0ZXIvTVNcXG5lbWl0dGluZ1xcbmVtby9TTVxcbmVtb2ppL1NNXFxuZW1vbGxpZW50L01TXFxuZW1vbHVtZW50L01TXFxuZW1vdGUvWERTR05WXFxuZW1vdGljb24vU01cXG5lbW90aW9uL01cXG5lbW90aW9uYWwvVVlcXG5lbW90aW9uYWxpc20vTVxcbmVtb3Rpb25hbGl6ZS9HRFNcXG5lbW90aW9ubGVzc1xcbmVtb3RpdmUvWVxcbmVtcGF0aGV0aWNcXG5lbXBhdGhpY2FsbHlcXG5lbXBhdGhpemUvRFNHXFxuZW1wYXRoeS9NXFxuZW1wZXJvci9NU1xcbmVtcGhhc2VzXFxuZW1waGFzaXMvTVxcbmVtcGhhc2l6ZS9BR0RTXFxuZW1waGF0aWMvVVxcbmVtcGhhdGljYWxseVxcbmVtcGh5c2VtYS9NXFxuZW1waXJlL1NNXFxuZW1waXJpY1xcbmVtcGlyaWNhbC9ZXFxuZW1waXJpY2lzbS9NXFxuZW1waXJpY2lzdC9TTVxcbmVtcGxhY2VtZW50L1NNXFxuZW1wbG95J3NcXG5lbXBsb3kvQURHTFNcXG5lbXBsb3lhYmxlL1VcXG5lbXBsb3llZS9TTVxcbmVtcGxveWVyL1NNXFxuZW1wbG95bWVudC9VQU1cXG5lbXBsb3ltZW50c1xcbmVtcG9yaXVtL1NNXFxuZW1wb3dlci9TREdMXFxuZW1wb3dlcm1lbnQvTVxcbmVtcHJlc3MvTVNcXG5lbXB0aWx5XFxuZW1wdGluZXNzL01cXG5lbXB0eS9UR1BEUlNNXFxuZW1weXJlYW4vTVxcbmVtdS9TTVxcbmVtdWxhdGUvRFNHTlZYXFxuZW11bGF0aW9uL01cXG5lbXVsYXRvci9TTVxcbmVtdWxzaWZpY2F0aW9uL01cXG5lbXVsc2lmaWVyL01cXG5lbXVsc2lmeS9ORFJTWkdcXG5lbXVsc2lvbi9NU1xcbmVuL1NNXFxuZW5hYmxlL0RSU1pHXFxuZW5hYmxlci9NXFxuZW5hY3QvQVNMREdcXG5lbmFjdG1lbnQvQVNNXFxuZW5hbWVsL0pTWkdNRFJcXG5lbmFtZWxlci9NXFxuZW5hbWVsd2FyZS9NXFxuZW5hbW9yL1NHRFxcbmVuY1xcbmVuY2FtcC9MU0dEXFxuZW5jYW1wbWVudC9NU1xcbmVuY2Fwc3VsYXRlL1hHTkRTXFxuZW5jYXBzdWxhdGlvbi9NXFxuZW5jYXNlL0xEU0dcXG5lbmNhc2VtZW50L01cXG5lbmNlcGhhbGl0aWNcXG5lbmNlcGhhbGl0aXMvTVxcbmVuY2hhaW4vREdTXFxuZW5jaGFudC9FTERHU1xcbmVuY2hhbnRlci9NU1xcbmVuY2hhbnRpbmcvWVxcbmVuY2hhbnRtZW50L0VNXFxuZW5jaGFudG1lbnRzXFxuZW5jaGFudHJlc3MvTVNcXG5lbmNoaWxhZGEvU01cXG5lbmNpcGhlci9TR0RcXG5lbmNpcmNsZS9EU0dMXFxuZW5jaXJjbGVtZW50L01cXG5lbmNsXFxuZW5jbGF2ZS9NU1xcbmVuY2xvc2UvR0RTXFxuZW5jbG9zZWQvVVxcbmVuY2xvc3VyZS9TTVxcbmVuY29kZS9EUlNaR1xcbmVuY29kZXIvTVxcbmVuY29taXVtL01TXFxuZW5jb21wYXNzL0dEU1xcbmVuY29yZS9EU01HXFxuZW5jb3VudGVyL0dTTURcXG5lbmNvdXJhZ2UvRFNMR1xcbmVuY291cmFnZW1lbnQvU01cXG5lbmNvdXJhZ2luZy9ZXFxuZW5jcm9hY2gvR0xEU1xcbmVuY3JvYWNobWVudC9TTVxcbmVuY3J1c3QvREdTXFxuZW5jcnVzdGF0aW9uL1NNXFxuZW5jcnlwdC9ER1NcXG5lbmNyeXB0aW9uXFxuZW5jdW1iZXIvRUdTRFxcbmVuY3VtYmVyZWQvVVxcbmVuY3VtYnJhbmNlL01TXFxuZW5jeVxcbmVuY3ljbGljYWwvU01cXG5lbmN5Y2xvcGVkaWEvTVNcXG5lbmN5Y2xvcGVkaWNcXG5lbmN5c3QvTFNHRFxcbmVuY3lzdG1lbnQvTVxcbmVuZC9HVlNKTURcXG5lbmRhbmdlci9TR0RMXFxuZW5kYW5nZXJtZW50L01cXG5lbmRlYXIvU0dMRFxcbmVuZGVhcmluZy9ZXFxuZW5kZWFybWVudC9TTVxcbmVuZGVhdm9yL0dTTURcXG5lbmRlbWljL01TXFxuZW5kZW1pY2FsbHlcXG5lbmRnYW1lL1NcXG5lbmRpbmcvTVxcbmVuZGl2ZS9TTVxcbmVuZGxlc3MvUFlcXG5lbmRsZXNzbmVzcy9NXFxuZW5kbW9zdFxcbmVuZG9jYXJkaXRpc1xcbmVuZG9jcmluZS9NU1xcbmVuZG9jcmlub2xvZ2lzdC9NU1xcbmVuZG9jcmlub2xvZ3kvTVxcbmVuZG9nZW5vdXMvWVxcbmVuZG9tZXRyaWFsXFxuZW5kb21ldHJpb3Npc1xcbmVuZG9tZXRyaXVtXFxuZW5kb3JwaGluL01TXFxuZW5kb3JzZS9MWkdEUlNcXG5lbmRvcnNlbWVudC9NU1xcbmVuZG9yc2VyL01cXG5lbmRvc2NvcGUvTVNcXG5lbmRvc2NvcGljXFxuZW5kb3Njb3B5L01cXG5lbmRvdGhlbGlhbFxcbmVuZG90aGVybWljXFxuZW5kb3RyYWNoZWFsXFxuZW5kb3cvU0RMR1xcbmVuZG93bWVudC9NU1xcbmVuZHBvaW50L1NNXFxuZW5kdWUvRFNHXFxuZW5kdXJhYmxlL1VcXG5lbmR1cmFuY2UvTVxcbmVuZHVyZS9EU0JHXFxuZW5kd2F5c1xcbmVuZW1hL1NNXFxuZW5lbXkvU01cXG5lbmVyZ2V0aWNcXG5lbmVyZ2V0aWNhbGx5XFxuZW5lcmdpemUvWkdEUlNcXG5lbmVyZ2l6ZXIvTVxcbmVuZXJneS9TTVxcbmVuZXJ2YXRlL0dORFNcXG5lbmVydmF0aW9uL01cXG5lbmZlZWJsZS9HRFNMXFxuZW5mZWVibGVtZW50L01cXG5lbmZpbGFkZS9EU01HXFxuZW5mb2xkL1NHRFxcbmVuZm9yY2UvTFpHRFJTXFxuZW5mb3JjZWFibGUvVVxcbmVuZm9yY2VkL1VcXG5lbmZvcmNlbWVudC9NXFxuZW5mb3JjZXIvTVxcbmVuZnJhbmNoaXNlL0VHRFNMXFxuZW5mcmFuY2hpc2VtZW50L0VNXFxuZW5nYWdlL0VBRFNHXFxuZW5nYWdlbWVudC9FTVNcXG5lbmdhZ2luZ2x5XFxuZW5nZW5kZXIvU0dEXFxuZW5naW5lL1NNXFxuZW5naW5lZXIvTURHU1xcbmVuZ2luZWVyaW5nL01cXG5lbmdvcmdlL0xHRFNcXG5lbmdvcmdlbWVudC9NXFxuZW5ncmFtL1NNXFxuZW5ncmF2ZS9aR0pEUlNcXG5lbmdyYXZlci9NXFxuZW5ncmF2aW5nL01cXG5lbmdyb3NzL0dMRFNcXG5lbmdyb3NzbWVudC9NXFxuZW5ndWxmL1NMR0RcXG5lbmd1bGZtZW50L01cXG5lbmhhbmNlL0xaR0RSU1xcbmVuaGFuY2VtZW50L1NNXFxuZW5pZ21hL1NNXFxuZW5pZ21hdGljXFxuZW5pZ21hdGljYWxseVxcbmVuamFtYm1lbnQvU01cXG5lbmpvaW4vU0dEXFxuZW5qb3kvR0JMU0RcXG5lbmpveWFibHlcXG5lbmpveW1lbnQvU01cXG5lbmxhcmdlL0xaR0RSU1xcbmVubGFyZ2VhYmxlXFxuZW5sYXJnZW1lbnQvTVNcXG5lbmxhcmdlci9NXFxuZW5saWdodGVuL1NHTERcXG5lbmxpZ2h0ZW5lZC9VXFxuZW5saWdodGVubWVudC9NXFxuZW5saXN0L0FER1NMXFxuZW5saXN0ZWUvU01cXG5lbmxpc3RtZW50L0FNXFxuZW5saXN0bWVudHNcXG5lbmxpdmVuL1NMREdcXG5lbmxpdmVubWVudC9NXFxuZW5tZXNoL0RTR0xcXG5lbm1lc2htZW50L01cXG5lbm1pdHkvU01cXG5lbm5vYmxlL0RTR0xcXG5lbm5vYmxlbWVudC9NXFxuZW5udWkvTVxcbmVub3JtaXR5L1NNXFxuZW5vcm1vdXMvUFlcXG5lbm9ybW91c25lc3MvTVxcbmVub3VnaC9NXFxuZW5wbGFuZS9EU0dcXG5lbnF1ZXVlL0RTXFxuZW5xdWlyZXIvU1xcbmVucXVpcmluZ2x5XFxuZW5yYWdlL0dEU1xcbmVucmFwdHVyZS9EU0dcXG5lbnJpY2gvRFNMR1xcbmVucmljaG1lbnQvTVxcbmVucm9sbC9ETFNHXFxuZW5yb2xsbWVudC9NU1xcbmVuc2NvbmNlL0RTR1xcbmVuc2VtYmxlL1NNXFxuZW5zaHJpbmUvR0xEU1xcbmVuc2hyaW5lbWVudC9NXFxuZW5zaHJvdWQvREdTXFxuZW5zaWduL01TXFxuZW5zaWxhZ2UvTVxcbmVuc2xhdmUvRFNHTFxcbmVuc2xhdmVtZW50L01cXG5lbnNuYXJlL0RTTEdcXG5lbnNuYXJlbWVudC9NXFxuZW5zdWUvRFNHXFxuZW5zdXJlL1pHRFJTXFxuZW5zdXJlci9NXFxuZW50YWlsL0RTR0xcXG5lbnRhaWxtZW50L01cXG5lbnRhbmdsZS9FRFNMR1xcbmVudGFuZ2xlbWVudC9FTVxcbmVudGFuZ2xlbWVudHNcXG5lbnRlbnRlL1NNXFxuZW50ZXIvQVNHRFxcbmVudGVyYWxcXG5lbnRlcmljXFxuZW50ZXJpdGlzL01cXG5lbnRlcnByaXNlL01HU1xcbmVudGVycHJpc2luZy9ZXFxuZW50ZXJ0YWluL1pHRFJTTFxcbmVudGVydGFpbmVyL01cXG5lbnRlcnRhaW5pbmcvTVlcXG5lbnRlcnRhaW5tZW50L01TXFxuZW50aHJhbGwvR0RTTFxcbmVudGhyYWxsbWVudC9NXFxuZW50aHJvbmUvR0RTTFxcbmVudGhyb25lbWVudC9TTVxcbmVudGh1c2UvRFNHXFxuZW50aHVzaWFzbS9NU1xcbmVudGh1c2lhc3QvTVNcXG5lbnRodXNpYXN0aWMvVVxcbmVudGh1c2lhc3RpY2FsbHlcXG5lbnRpY2UvR0RTTFxcbmVudGljZW1lbnQvTVNcXG5lbnRpY2luZy9ZXFxuZW50aXJlL1lcXG5lbnRpcmV0eS9NXFxuZW50aXRsZS9EU0dMXFxuZW50aXRsZW1lbnQvU01cXG5lbnRpdHkvU01cXG5lbnRvbWIvRFNHTFxcbmVudG9tYm1lbnQvTVxcbmVudG9tb2xvZ2ljYWxcXG5lbnRvbW9sb2dpc3QvTVNcXG5lbnRvbW9sb2d5L01cXG5lbnRvdXJhZ2UvU01cXG5lbnRyJ2FjdGVcXG5lbnRyYWlscy9NXFxuZW50cmFpbmVkXFxuZW50cmFuY2UvTERTTUdcXG5lbnRyYW5jZW1lbnQvTVxcbmVudHJhbmNpbmcvWVxcbmVudHJhbnQvU01cXG5lbnRyYXAvTFNcXG5lbnRyYXBtZW50L01cXG5lbnRyYXBwZWRcXG5lbnRyYXBwaW5nXFxuZW50cmVhdC9HU0RcXG5lbnRyZWF0aW5nL1lcXG5lbnRyZWF0eS9TTVxcbmVudHJlZS9NU1xcbmVudHJlbmNoL0RTR0xcXG5lbnRyZW5jaG1lbnQvTVNcXG5lbnRyZXByZW5ldXIvU01cXG5lbnRyZXByZW5ldXJpYWxcXG5lbnRyZXByZW5ldXJzaGlwXFxuZW50cm9weS9NXFxuZW50cnVzdC9TR0RcXG5lbnRyeS9BU01cXG5lbnRyeXBob25lL1NcXG5lbnRyeXdheS9NU1xcbmVudHdpbmUvRFNHXFxuZW51bWVyYWJsZVxcbmVudW1lcmF0ZS9EU0dOWFxcbmVudW1lcmF0aW9uL01cXG5lbnVtZXJhdG9yL1NNXFxuZW51bmNpYXRlL0RTR05cXG5lbnVuY2lhdGlvbi9NXFxuZW51cmVzaXMvTVxcbmVudmVsb3AvU0xEUlpHXFxuZW52ZWxvcGUvU01cXG5lbnZlbG9wZXIvTVxcbmVudmVsb3BtZW50L01cXG5lbnZlbm9tL1NER1xcbmVudmlhYmxlL1VcXG5lbnZpYWJseVxcbmVudmlvdXMvUFlcXG5lbnZpb3VzbmVzcy9NXFxuZW52aXJvbm1lbnQvTVNcXG5lbnZpcm9ubWVudGFsL1lcXG5lbnZpcm9ubWVudGFsaXNtL01cXG5lbnZpcm9ubWVudGFsaXN0L1NNXFxuZW52aXJvbnMvTVxcbmVudmlzYWdlL0dEU1xcbmVudmlzaW9uL0RHU1xcbmVudm95L1NNXFxuZW52eS9EU01HXFxuZW52eWluZy9ZXFxuZW56eW1hdGljXFxuZW56eW1lL1NNXFxuZW9saWFuXFxuZW9uL1NNXFxuZW9zaW5vcGhpbC9TXFxuZW9zaW5vcGhpbGljXFxuZXBhdWxldC9TTVxcbmVwZWUvTVNcXG5lcGhlZHJpbmUvTVxcbmVwaGVtZXJhL01cXG5lcGhlbWVyYWwvWVxcbmVwaWMvTVNcXG5lcGljZW50ZXIvTVNcXG5lcGljdXJlL1NNXFxuZXBpY3VyZWFuL01TXFxuZXBpZGVtaWMvU01cXG5lcGlkZW1pY2FsbHlcXG5lcGlkZW1pb2xvZ2ljYWxcXG5lcGlkZW1pb2xvZ2lzdC9TTVxcbmVwaWRlbWlvbG9neS9NXFxuZXBpZGVybWFsXFxuZXBpZGVybWljXFxuZXBpZGVybWlzL01TXFxuZXBpZHVyYWwvU1xcbmVwaWdsb3R0aXMvTVNcXG5lcGlncmFtL1NNXFxuZXBpZ3JhbW1hdGljXFxuZXBpZ3JhcGgvTVxcbmVwaWdyYXBoc1xcbmVwaWdyYXBoeS9NXFxuZXBpbGVwc3kvTVxcbmVwaWxlcHRpYy9TTVxcbmVwaWxvZ3VlL01TXFxuZXBpbmVwaHJpbmUvTVxcbmVwaXBoYW55L1NNXFxuZXBpc2NvcGFjeS9NXFxuZXBpc2NvcGFsXFxuZXBpc2NvcGF0ZS9NXFxuZXBpc29kZS9TTVxcbmVwaXNvZGljXFxuZXBpc29kaWNhbGx5XFxuZXBpc3RlbWljXFxuZXBpc3RlbW9sb2dpY2FsXFxuZXBpc3RlbW9sb2d5XFxuZXBpc3RsZS9TTVxcbmVwaXN0b2xhcnlcXG5lcGl0YXBoL01cXG5lcGl0YXBoc1xcbmVwaXRoZWxpYWxcXG5lcGl0aGVsaXVtL01cXG5lcGl0aGV0L1NNXFxuZXBpdG9tZS9TTVxcbmVwaXRvbWl6ZS9HRFNcXG5lcG9jaC9NXFxuZXBvY2hhbFxcbmVwb2Noc1xcbmVwb255bW91c1xcbmVwb3h5L0RTTUdcXG5lcHNpbG9uL1NNXFxuZXF1YWJpbGl0eS9NXFxuZXF1YWJsZVxcbmVxdWFibHlcXG5lcXVhbC9TTURZR1xcbmVxdWFsaXR5L0lNXFxuZXF1YWxpemF0aW9uL01cXG5lcXVhbGl6ZS9aR0RSU1xcbmVxdWFsaXplci9NXFxuZXF1YW5pbWl0eS9NXFxuZXF1YXRlL0RTR05CWFxcbmVxdWF0aW9uL01cXG5lcXVhdG9yL1NNXFxuZXF1YXRvcmlhbFxcbmVxdWVycnkvU01cXG5lcXVlc3RyaWFuL1NNXFxuZXF1ZXN0cmlhbmlzbS9NXFxuZXF1ZXN0cmllbm5lL1NNXFxuZXF1aWRpc3RhbnQvWVxcbmVxdWlsYXRlcmFsL1NNXFxuZXF1aWxpYnJpdW0vRU1cXG5lcXVpbmUvU01cXG5lcXVpbm9jdGlhbFxcbmVxdWlub3gvTVNcXG5lcXVpcC9BU1xcbmVxdWlwYWdlL01TXFxuZXF1aXBtZW50L01cXG5lcXVpcG9pc2UvTVxcbmVxdWlwcGVkL1VBXFxuZXF1aXBwaW5nL0FcXG5lcXVpdGFibGUvSVxcbmVxdWl0YWJseS9JXFxuZXF1aXRhdGlvbi9NXFxuZXF1aXR5L0lTTVxcbmVxdWl2XFxuZXF1aXZhbGVuY2UvTVNcXG5lcXVpdmFsZW5jeS9TTVxcbmVxdWl2YWxlbnQvTVlTXFxuZXF1aXZvY2FsL1VZXFxuZXF1aXZvY2FsbmVzcy9NXFxuZXF1aXZvY2F0ZS9HTlhEU1xcbmVxdWl2b2NhdGlvbi9NXFxuZXF1aXZvY2F0b3IvU01cXG5lci9DXFxuZXJhL1NNXFxuZXJhZGljYWJsZS9JXFxuZXJhZGljYXRlL0RTR05cXG5lcmFkaWNhdGlvbi9NXFxuZXJhZGljYXRvci9NU1xcbmVyYXNlL0RSU0JaR1xcbmVyYXNlci9NXFxuZXJhc3VyZS9TTVxcbmVyYml1bS9NXFxuZXJlXFxuZXJlY3QvUFNHRFlcXG5lcmVjdGlsZVxcbmVyZWN0aW9uL1NNXFxuZXJlY3RuZXNzL01cXG5lcmVjdG9yL01TXFxuZXJlbG9uZ1xcbmVyZW1pdGUvTVNcXG5lcmcvU01cXG5lcmdvXFxuZXJnb25vbWljL1NcXG5lcmdvbm9taWNhbGx5XFxuZXJnb25vbWljcy9NXFxuZXJnb3N0ZXJvbC9NXFxuZXJnb3QvTVxcbmVybWluZS9TTVxcbmVyb2RlL0RTR1xcbmVyb2RpYmxlXFxuZXJvZ2Vub3VzXFxuZXJvc2lvbi9NXFxuZXJvc2l2ZVxcbmVyb3RpYy9TXFxuZXJvdGljYS9NXFxuZXJvdGljYWxseVxcbmVyb3RpY2lzbS9NXFxuZXJyL0dTRFxcbmVycmFuZC9TTVxcbmVycmFudC9JXFxuZXJyYXRhL1NNXFxuZXJyYXRpY1xcbmVycmF0aWNhbGx5XFxuZXJyYXR1bS9NXFxuZXJyb25lb3VzL1lcXG5lcnJvci9TTVxcbmVyc2F0ei9NU1xcbmVyc3RcXG5lcnN0d2hpbGVcXG5lcnVjdC9TREdcXG5lcnVjdGF0aW9uL1NNXFxuZXJ1ZGl0ZS9ZTlxcbmVydWRpdGlvbi9NXFxuZXJ1cHQvU0RHVlxcbmVydXB0aW9uL01TXFxuZXJ5c2lwZWxhcy9NXFxuZXJ5dGhyb2N5dGUvU01cXG5lcnl0aHJvbXljaW5cXG5lc2NhbGF0ZS9DRFNHTlxcbmVzY2FsYXRpb24vQ01cXG5lc2NhbGF0aW9uc1xcbmVzY2FsYXRvci9NU1xcbmVzY2FsbG9wL1NHTURcXG5lc2NhbG9wZS9TXFxuZXNjYXBhZGUvTVNcXG5lc2NhcGUvTE1HRFNcXG5lc2NhcGVlL01TXFxuZXNjYXBlbWVudC9TTVxcbmVzY2FwaXNtL01cXG5lc2NhcGlzdC9NU1xcbmVzY2Fwb2xvZ2lzdC9TXFxuZXNjYXBvbG9neVxcbmVzY2FyZ290L01TXFxuZXNjYXJvbGUvTVNcXG5lc2NhcnBtZW50L01TXFxuZXNjaGF0b2xvZ2ljYWxcXG5lc2NoYXRvbG9neVxcbmVzY2hldy9TREdcXG5lc2NvcnQvU01ER1xcbmVzY3JpdG9pcmUvTVNcXG5lc2Nyb3cvU01cXG5lc2N1ZG8vU01cXG5lc2N1dGNoZW9uL1NNXFxuZXNvcGhhZ2VhbFxcbmVzb3BoYWdpXFxuZXNvcGhhZ3VzL01cXG5lc290ZXJpY1xcbmVzb3RlcmljYWxseVxcbmVzcFxcbmVzcGFkcmlsbGUvTVNcXG5lc3BhbGllci9NRFNHXFxuZXNwZWNpYWwvWVxcbmVzcGlvbmFnZS9NXFxuZXNwbGFuYWRlL01TXFxuZXNwb3VzYWwvTVxcbmVzcG91c2UvR0RTXFxuZXNwcmVzc28vTVNcXG5lc3ByaXQvTVxcbmVzcHkvRFNHXFxuZXNxdWlyZS9TTVxcbmVzc2F5L1NNRFJaR1xcbmVzc2F5ZXIvTVxcbmVzc2F5aXN0L1NNXFxuZXNzZW5jZS9TTVxcbmVzc2VudGlhbC9JTVNcXG5lc3NlbnRpYWxseVxcbmVzdGFibGlzaC9BRVNER0xcXG5lc3RhYmxpc2htZW50L0FFTVxcbmVzdGFibGlzaG1lbnRzXFxuZXN0YXRlL1NNXFxuZXN0ZWVtL0VTTURHXFxuZXN0ZXIvU01cXG5lc3RpbWFibGUvSVxcbmVzdGltYXRlL01HTkRTWFxcbmVzdGltYXRpb24vTVxcbmVzdGltYXRvci9TTVxcbmVzdG9wcGVsXFxuZXN0cmFkaW9sXFxuZXN0cmFuZ2UvTERTR1xcbmVzdHJhbmdlbWVudC9NU1xcbmVzdHJvZ2VuL01TXFxuZXN0cm91c1xcbmVzdHJ1cy9NU1xcbmVzdHVhcnkvU01cXG5ldGEvU01cXG5ldGNcXG5ldGNoL0RSU1pHSlxcbmV0Y2hlci9NXFxuZXRjaGluZy9NXFxuZXRlcm5hbC9ZUFxcbmV0ZXJuYWxuZXNzL01cXG5ldGVybml0eS9TTVxcbmV0aGFuZS9NXFxuZXRoYW5vbC9NXFxuZXRoZXIvTVxcbmV0aGVyZWFsL1lcXG5ldGhpYy9TTVxcbmV0aGljYWwvVVlcXG5ldGhpY3MvTVxcbmV0aG1vaWRcXG5ldGhuaWMvU01cXG5ldGhuaWNhbGx5XFxuZXRobmljaXR5L01cXG5ldGhub2NlbnRyaWNcXG5ldGhub2NlbnRyaXNtL01cXG5ldGhub2dyYXBoZXIvU1xcbmV0aG5vZ3JhcGhpY1xcbmV0aG5vZ3JhcGhpY2FsbHlcXG5ldGhub2dyYXBoeVxcbmV0aG5vbG9naWNhbC9ZXFxuZXRobm9sb2dpc3QvU01cXG5ldGhub2xvZ3kvTVxcbmV0aG9sb2dpY2FsXFxuZXRob2xvZ2lzdC9NU1xcbmV0aG9sb2d5L01cXG5ldGhvcy9NXFxuZXRoeWwvTVxcbmV0aHlsZW5lL01cXG5ldGlvbGF0ZWRcXG5ldGlvbG9naWNcXG5ldGlvbG9naWNhbFxcbmV0aW9sb2d5L1NNXFxuZXRpcXVldHRlL01cXG5ldHVkZS9TTVxcbmV0eW1vbG9naWNhbC9ZXFxuZXR5bW9sb2dpc3QvU01cXG5ldHltb2xvZ3kvU01cXG5ldWNhbHlwdGlcXG5ldWNhbHlwdHVzL01TXFxuZXVjaHJlL0RTTUdcXG5ldWNsaWRlYW5cXG5ldWdlbmljL1NcXG5ldWdlbmljYWxseVxcbmV1Z2VuaWNpc3QvTVNcXG5ldWdlbmljcy9NXFxuZXVrYXJ5b3RlL1NNXFxuZXVrYXJ5b3RpY1xcbmV1bG9naXN0L01TXFxuZXVsb2dpc3RpY1xcbmV1bG9naXplL1pHRFJTXFxuZXVsb2dpemVyL01cXG5ldWxvZ3kvU01cXG5ldW51Y2gvTVxcbmV1bnVjaHNcXG5ldXBoZW1pc20vU01cXG5ldXBoZW1pc3RpY1xcbmV1cGhlbWlzdGljYWxseVxcbmV1cGhvbmlvdXMvWVxcbmV1cGhvbnkvTVxcbmV1cGhvcmlhL01cXG5ldXBob3JpY1xcbmV1cGhvcmljYWxseVxcbmV1cmVrYVxcbmV1cm8vTVNcXG5ldXJvcGl1bS9NXFxuZXV0ZWN0aWNcXG5ldXRoYW5hc2lhL01cXG5ldXRoYW5pemUvRFNHXFxuZXV0aGVuaWNzL01cXG5ldXRyb3BoaWNhdGlvblxcbmV2YWN1YXRlL1hEU0dOXFxuZXZhY3VhdGlvbi9NXFxuZXZhY3VlZS9NU1xcbmV2YWRlL0RSU1pHXFxuZXZhZGVyL01cXG5ldmFsdWF0ZS9BR05WRFNYXFxuZXZhbHVhdGlvbi9BTVxcbmV2YWx1YXRvci9TXFxuZXZhbmVzY2VuY2UvTVxcbmV2YW5lc2NlbnRcXG5ldmFuZ2VsaWNcXG5ldmFuZ2VsaWNhbC9TTVlcXG5ldmFuZ2VsaWNhbGlzbS9NXFxuZXZhbmdlbGlzbS9NXFxuZXZhbmdlbGlzdC9NU1xcbmV2YW5nZWxpc3RpY1xcbmV2YW5nZWxpemUvR0RTXFxuZXZhcG9yYXRlL0dORFNcXG5ldmFwb3JhdGlvbi9NXFxuZXZhcG9yYXRvci9TTVxcbmV2YXNpb24vU01cXG5ldmFzaXZlL1lQXFxuZXZhc2l2ZW5lc3MvTVxcbmV2ZS9BU01cXG5ldmVuL01EUllUR1NKUFxcbmV2ZW5oYW5kZWQvWVxcbmV2ZW5pbmcvTVxcbmV2ZW5uZXNzL1VNXFxuZXZlbnNvbmcvTVxcbmV2ZW50L1NNXFxuZXZlbnRmdWwvVVlcXG5ldmVudGZ1bG5lc3MvTVxcbmV2ZW50aWRlL01cXG5ldmVudHVhbC9ZXFxuZXZlbnR1YWxpdHkvU01cXG5ldmVudHVhdGUvR0RTXFxuZXZlclxcbmV2ZXJnbGFkZS9TTVxcbmV2ZXJncmVlbi9TTVxcbmV2ZXJsYXN0aW5nL01ZU1xcbmV2ZXJtb3JlXFxuZXZlcnlcXG5ldmVyeWJvZHkvTVxcbmV2ZXJ5ZGF5XFxuZXZlcnlvbmUvTVxcbmV2ZXJ5cGxhY2VcXG5ldmVyeXRoaW5nL01cXG5ldmVyeXdoZXJlXFxuZXZpY3QvU0RHXFxuZXZpY3Rpb24vTVNcXG5ldmlkZW5jZS9NR0RTXFxuZXZpZGVudC9ZXFxuZXZpbC9NUllUU1BcXG5ldmlsZG9lci9TTVxcbmV2aWxkb2luZy9NXFxuZXZpbGxlclxcbmV2aWxsZXN0XFxuZXZpbG5lc3MvTVxcbmV2aW5jZS9EU0dcXG5ldmlzY2VyYXRlL0RTR05cXG5ldmlzY2VyYXRpb24vTVxcbmV2b2NhdGlvbi9NU1xcbmV2b2NhdGl2ZS9ZXFxuZXZva2UvRFNHXFxuZXZvbHV0aW9uL01cXG5ldm9sdXRpb25hcnlcXG5ldm9sdXRpb25pc3QvU01cXG5ldm9sdmUvRFNHXFxuZXdlL1JTTVpcXG5ld2VyL01cXG5leC9NU1xcbmV4YWJ5dGUvTVNcXG5leGFjZXJiYXRlL0dORFNcXG5leGFjZXJiYXRpb24vTVxcbmV4YWN0L1NQRFJZVEdcXG5leGFjdGluZy9ZXFxuZXhhY3Rpb24vTVxcbmV4YWN0aXR1ZGUvTVxcbmV4YWN0bmVzcy9JTVxcbmV4YWdnZXJhdGUvWERTR05cXG5leGFnZ2VyYXRlZC9ZXFxuZXhhZ2dlcmF0aW9uL01cXG5leGFnZ2VyYXRvci9NU1xcbmV4YWpvdWxlL1NcXG5leGFsdC9TREdcXG5leGFsdGF0aW9uL01cXG5leGFtL01TXFxuZXhhbWluYXRpb24vQU1TXFxuZXhhbWluZS9BR0RTXFxuZXhhbWluZXIvTVNcXG5leGFtcGxlL01HRFNcXG5leGFtcGxlZC9VXFxuZXhhc3BlcmF0ZS9EU0dOXFxuZXhhc3BlcmF0ZWQvWVxcbmV4YXNwZXJhdGluZy9ZXFxuZXhhc3BlcmF0aW9uL01cXG5leGNhdmF0ZS9HTkRTWFxcbmV4Y2F2YXRpb24vTVxcbmV4Y2F2YXRvci9TTVxcbmV4Y2VlZC9HU0RcXG5leGNlZWRpbmcvWVxcbmV4Y2VsL1NcXG5leGNlbGxlZFxcbmV4Y2VsbGVuY2UvTVxcbmV4Y2VsbGVuY3kvU01cXG5leGNlbGxlbnQvWVxcbmV4Y2VsbGluZ1xcbmV4Y2Vsc2lvci9NXFxuZXhjZXB0L0dTRFxcbmV4Y2VwdGlvbi9CU01cXG5leGNlcHRpb25hYmxlL1VcXG5leGNlcHRpb25hbC9VWVxcbmV4Y2VwdGlvbmFsaXNtXFxuZXhjZXJwdC9NREdTXFxuZXhjZXNzL1ZNU1xcbmV4Y2Vzc2l2ZS9ZXFxuZXhjaGFuZ2UvRFNNR1xcbmV4Y2hhbmdlYWJsZVxcbmV4Y2hlcXVlci9TTVxcbmV4Y2lzZS9YRFNNR05cXG5leGNpc2lvbi9NXFxuZXhjaXRhYmlsaXR5L01cXG5leGNpdGFibHlcXG5leGNpdGF0aW9uL01cXG5leGNpdGUvQkRSU0xaR1xcbmV4Y2l0ZWQvWVxcbmV4Y2l0ZW1lbnQvU01cXG5leGNpdGVyL01cXG5leGNpdGluZy9ZXFxuZXhjaXRvblxcbmV4Y2xcXG5leGNsYWltL0RHU1xcbmV4Y2xhbWF0aW9uL1NNXFxuZXhjbGFtYXRvcnlcXG5leGNsdWRlL0dEU1xcbmV4Y2x1c2lvbi9NU1xcbmV4Y2x1c2lvbmFyeVxcbmV4Y2x1c2l2ZS9QTVlTXFxuZXhjbHVzaXZlbmVzcy9NXFxuZXhjbHVzaXZpdHkvTVxcbmV4Y29tbXVuaWNhdGUvR05EU1hcXG5leGNvbW11bmljYXRpb24vTVxcbmV4Y29yaWF0ZS9EU0dOWFxcbmV4Y29yaWF0aW9uL01cXG5leGNyZW1lbnQvTVxcbmV4Y3JlbWVudGFsXFxuZXhjcmVzY2VuY2UvTVNcXG5leGNyZXNjZW50XFxuZXhjcmV0YS9NXFxuZXhjcmV0ZS9YR05EU1xcbmV4Y3JldGlvbi9NXFxuZXhjcmV0b3J5XFxuZXhjcnVjaWF0aW5nL1lcXG5leGN1bHBhdGUvRFNHTlxcbmV4Y3VscGF0aW9uL01cXG5leGN1bHBhdG9yeVxcbmV4Y3Vyc2lvbi9NU1xcbmV4Y3Vyc2lvbmlzdC9NU1xcbmV4Y3Vyc2l2ZS9ZUFxcbmV4Y3Vyc2l2ZW5lc3MvTVxcbmV4Y3VzYWJsZS9JXFxuZXhjdXNhYmx5L0lcXG5leGN1c2UvRFNCTUdcXG5leGN1c2VkL1VcXG5leGVjL01TXFxuZXhlY3JhYmxlXFxuZXhlY3JhYmx5XFxuZXhlY3JhdGUvRFNHTlxcbmV4ZWNyYXRpb24vTVxcbmV4ZWN1dGUvQlhHTlZEU1xcbmV4ZWN1dGlvbi9aTVJcXG5leGVjdXRpb25lci9NXFxuZXhlY3V0aXZlL1NNXFxuZXhlY3V0b3IvTVNcXG5leGVjdXRyaWNlc1xcbmV4ZWN1dHJpeC9NXFxuZXhlZ2VzZXNcXG5leGVnZXNpcy9NXFxuZXhlZ2V0aWNcXG5leGVnZXRpY2FsXFxuZXhlbXBsYXIvU01cXG5leGVtcGxhcnlcXG5leGVtcGxpZmljYXRpb24vTVxcbmV4ZW1wbGlmeS9HRFNYTlxcbmV4ZW1wdC9TR0RcXG5leGVtcHRpb24vU01cXG5leGVyY2lzZS9EUlNNWkdcXG5leGVyY2lzZXIvTVxcbmV4ZXJ0L1NER1xcbmV4ZXJ0aW9uL01TXFxuZXhldW50XFxuZXhmb2xpYXRlL0dORFNcXG5leGhhbGF0aW9uL01TXFxuZXhoYWxlL0RTR1xcbmV4aGF1c3QvR1ZNRFNcXG5leGhhdXN0aWJsZS9JXFxuZXhoYXVzdGlvbi9NXFxuZXhoYXVzdGl2ZS9ZUFxcbmV4aGF1c3RpdmVuZXNzL01cXG5leGhpYml0L0dNRFNcXG5leGhpYml0aW9uL01TXFxuZXhoaWJpdGlvbmlzbS9NXFxuZXhoaWJpdGlvbmlzdC9NU1xcbmV4aGliaXRvci9TTVxcbmV4aGlsYXJhdGUvRFNHTlxcbmV4aGlsYXJhdGlvbi9NXFxuZXhob3J0L1NER1xcbmV4aG9ydGF0aW9uL01TXFxuZXhodW1hdGlvbi9NU1xcbmV4aHVtZS9EU0dcXG5leGlnZW5jZS9NU1xcbmV4aWdlbmN5L1NNXFxuZXhpZ2VudFxcbmV4aWd1aXR5L01cXG5leGlndW91c1xcbmV4aWxlL0RTTUdcXG5leGlsaWNcXG5leGlzdC9TREdcXG5leGlzdGVuY2UvTVNcXG5leGlzdGVudFxcbmV4aXN0ZW50aWFsL1lcXG5leGlzdGVudGlhbGlzbS9NXFxuZXhpc3RlbnRpYWxpc3QvTVNcXG5leGl0L01ER1NcXG5leG9iaW9sb2d5L01cXG5leG9kdXMvTVNcXG5leG9nZW5vdXNcXG5leG9uL01TXFxuZXhvbmVyYXRlL0dORFNcXG5leG9uZXJhdGlvbi9NXFxuZXhvcGxhbmV0L01TXFxuZXhvcmJpdGFuY2UvTVxcbmV4b3JiaXRhbnQvWVxcbmV4b3JjaXNlL0RTR1xcbmV4b3JjaXNtL1NNXFxuZXhvcmNpc3QvU01cXG5leG9za2VsZXRvbi9TTVxcbmV4b3NwaGVyZS9TTVxcbmV4b3RoZXJtaWNcXG5leG90aWMvU01cXG5leG90aWNhXFxuZXhvdGljYWxseVxcbmV4b3RpY2lzbS9NXFxuZXhwXFxuZXhwYW5kL0JHU0RcXG5leHBhbnNlL1hNTlZTXFxuZXhwYW5zaWJsZVxcbmV4cGFuc2lvbi9NXFxuZXhwYW5zaW9uYXJ5XFxuZXhwYW5zaW9uaXNtL01cXG5leHBhbnNpb25pc3QvTVNcXG5leHBhbnNpdmUvWVBcXG5leHBhbnNpdmVuZXNzL01cXG5leHBhdC9TXFxuZXhwYXRpYXRlL0dORFNcXG5leHBhdGlhdGlvbi9NXFxuZXhwYXRyaWF0ZS9EU01HTlxcbmV4cGF0cmlhdGlvbi9NXFxuZXhwZWN0L0dTRFxcbmV4cGVjdGFuY3kvTVxcbmV4cGVjdGFudC9ZXFxuZXhwZWN0YXRpb24vU01cXG5leHBlY3RvcmFudC9TTVxcbmV4cGVjdG9yYXRlL0RTR05cXG5leHBlY3RvcmF0aW9uL01cXG5leHBlZGllbmNlL0lNXFxuZXhwZWRpZW5jZXNcXG5leHBlZGllbmNpZXNcXG5leHBlZGllbmN5L0lNXFxuZXhwZWRpZW50L1NNWVxcbmV4cGVkaXRlL0RSU1pHTlhcXG5leHBlZGl0ZXIvTVxcbmV4cGVkaXRpb24vTVxcbmV4cGVkaXRpb25hcnlcXG5leHBlZGl0aW91cy9QWVxcbmV4cGVkaXRpb3VzbmVzcy9NXFxuZXhwZWwvU1xcbmV4cGVsbGVkXFxuZXhwZWxsaW5nXFxuZXhwZW5kL0dTQkRcXG5leHBlbmRhYmxlL1NNXFxuZXhwZW5kaXR1cmUvU01cXG5leHBlbnNlL01TXFxuZXhwZW5zaXZlL0lZUFxcbmV4cGVuc2l2ZW5lc3MvSU1cXG5leHBlcmllbmNlL0lNRFxcbmV4cGVyaWVuY2VzXFxuZXhwZXJpZW5jaW5nXFxuZXhwZXJpZW50aWFsXFxuZXhwZXJpbWVudC9NRFJTWkdcXG5leHBlcmltZW50YWwvWVxcbmV4cGVyaW1lbnRhdGlvbi9NXFxuZXhwZXJpbWVudGVyL01cXG5leHBlcnQvU1BNWVxcbmV4cGVydGlzZS9NXFxuZXhwZXJ0bmVzcy9NXFxuZXhwaWF0ZS9HTkRTXFxuZXhwaWF0aW9uL01cXG5leHBpYXRvcnlcXG5leHBpcmF0aW9uL01cXG5leHBpcmUvRFNHXFxuZXhwaXJlZC9VXFxuZXhwaXJ5L01cXG5leHBsYWluL0FER1NcXG5leHBsYWluYWJsZVxcbmV4cGxhaW5lZC9VXFxuZXhwbGFuYXRpb24vTVNcXG5leHBsYW5hdG9yeVxcbmV4cGxldGl2ZS9NU1xcbmV4cGxpY2FibGUvSVxcbmV4cGxpY2F0ZS9YR05EU1xcbmV4cGxpY2F0aW9uL01cXG5leHBsaWNpdC9QWVxcbmV4cGxpY2l0bmVzcy9NXFxuZXhwbG9kZS9HRFNcXG5leHBsb2l0L1pHQk1EUlNcXG5leHBsb2l0YXRpb24vTVxcbmV4cGxvaXRhdGl2ZVxcbmV4cGxvaXRlZC9VXFxuZXhwbG9pdGVyL01cXG5leHBsb3JhdGlvbi9NU1xcbmV4cGxvcmF0b3J5XFxuZXhwbG9yZS9aR0RSU1xcbmV4cGxvcmVkL1VcXG5leHBsb3Jlci9NXFxuZXhwbG9zaW9uL1NNXFxuZXhwbG9zaXZlL1NQTVlcXG5leHBsb3NpdmVuZXNzL01cXG5leHBvL01TXFxuZXhwb25lbnQvTVNcXG5leHBvbmVudGlhbC9ZXFxuZXhwb25lbnRpYXRpb25cXG5leHBvcnQvQlNaR01EUlxcbmV4cG9ydGF0aW9uL01cXG5leHBvcnRlci9NXFxuZXhwb3NlL0RTTUdcXG5leHBvc2VkL1VcXG5leHBvc2l0aW9uL1NNXFxuZXhwb3NpdG9yL1NNXFxuZXhwb3NpdG9yeVxcbmV4cG9zdHVsYXRlL0dOWERTXFxuZXhwb3N0dWxhdGlvbi9NXFxuZXhwb3N1cmUvTVNcXG5leHBvdW5kL1pHRFJTXFxuZXhwb3VuZGVyL01cXG5leHByZXNzL0dWTURTWVxcbmV4cHJlc3NlZC9VXFxuZXhwcmVzc2libGUvSVxcbmV4cHJlc3Npb24vU01cXG5leHByZXNzaW9uaXNtL01cXG5leHByZXNzaW9uaXN0L1NNXFxuZXhwcmVzc2lvbmlzdGljXFxuZXhwcmVzc2lvbmxlc3MvWVxcbmV4cHJlc3NpdmUvUFlcXG5leHByZXNzaXZlbmVzcy9NXFxuZXhwcmVzc3dheS9TTVxcbmV4cHJvcHJpYXRlL0dOWERTXFxuZXhwcm9wcmlhdGlvbi9NXFxuZXhwcm9wcmlhdG9yL1NNXFxuZXhwdWxzaW9uL01TXFxuZXhwdW5nZS9HRFNcXG5leHB1cmdhdGUvRFNHTlhcXG5leHB1cmdhdGVkL1VcXG5leHB1cmdhdGlvbi9NXFxuZXhxdWlzaXRlL1lQXFxuZXhxdWlzaXRlbmVzcy9NXFxuZXh0XFxuZXh0YW50XFxuZXh0ZW1wb3JhbmVvdXMvUFlcXG5leHRlbXBvcmFuZW91c25lc3MvTVxcbmV4dGVtcG9yZVxcbmV4dGVtcG9yaXphdGlvbi9NXFxuZXh0ZW1wb3JpemUvR0RTXFxuZXh0ZW5kL1NaR0RSQlxcbmV4dGVuZGVyL01cXG5leHRlbnNpYmlsaXR5XFxuZXh0ZW5zaWJsZVxcbmV4dGVuc2lvbi9TTVxcbmV4dGVuc2lvbmFsXFxuZXh0ZW5zaXZlL1lQXFxuZXh0ZW5zaXZlbmVzcy9NXFxuZXh0ZW50L1NNXFxuZXh0ZW51YXRlL0RTR05cXG5leHRlbnVhdGlvbi9NXFxuZXh0ZXJpb3IvTVNcXG5leHRlcm1pbmF0ZS9EU1hHTlxcbmV4dGVybWluYXRpb24vTVxcbmV4dGVybWluYXRvci9NU1xcbmV4dGVybmFsL01ZU1xcbmV4dGVybmFsaXphdGlvbi9TTVxcbmV4dGVybmFsaXplL0RTR1xcbmV4dGluY3QvR0RTXFxuZXh0aW5jdGlvbi9NU1xcbmV4dGluZ3Vpc2gvWkdCRFJTXFxuZXh0aW5ndWlzaGFibGUvSVxcbmV4dGluZ3Vpc2hlci9NXFxuZXh0aXJwYXRlL0dORFNcXG5leHRpcnBhdGlvbi9NXFxuZXh0b2wvU1xcbmV4dG9sbGVkXFxuZXh0b2xsaW5nXFxuZXh0b3J0L1NHRFxcbmV4dG9ydGlvbi9NUlpcXG5leHRvcnRpb25hdGUvWVxcbmV4dG9ydGlvbmVyL01cXG5leHRvcnRpb25pc3QvTVNcXG5leHRyYS9TTVxcbmV4dHJhY2VsbHVsYXJcXG5leHRyYWN0L01ER1ZTXFxuZXh0cmFjdGlvbi9TTVxcbmV4dHJhY3Rvci9NU1xcbmV4dHJhY3VycmljdWxhclxcbmV4dHJhZGl0ZS9HTkJYRFNcXG5leHRyYWRpdGlvbi9NXFxuZXh0cmFqdWRpY2lhbFxcbmV4dHJhbGVnYWxcXG5leHRyYW1hcml0YWxcXG5leHRyYW11cmFsXFxuZXh0cmFuZW91cy9ZXFxuZXh0cmFvcmRpbmFpcmVcXG5leHRyYW9yZGluYXJpbHlcXG5leHRyYW9yZGluYXJ5XFxuZXh0cmFwb2xhdGUvWEdORFNcXG5leHRyYXBvbGF0aW9uL01cXG5leHRyYXNlbnNvcnlcXG5leHRyYXRlcnJlc3RyaWFsL01TXFxuZXh0cmF0ZXJyaXRvcmlhbFxcbmV4dHJhdGVycml0b3JpYWxpdHkvTVxcbmV4dHJhdmFnYW5jZS9NU1xcbmV4dHJhdmFnYW50L1lcXG5leHRyYXZhZ2FuemEvTVNcXG5leHRyYXZlaGljdWxhclxcbmV4dHJlbWUvUE1ZVFJTXFxuZXh0cmVtZW5lc3MvTVxcbmV4dHJlbWlzbS9NXFxuZXh0cmVtaXN0L01TXFxuZXh0cmVtaXR5L1NNXFxuZXh0cmljYWJsZS9JXFxuZXh0cmljYXRlL0dORFNcXG5leHRyaWNhdGlvbi9NXFxuZXh0cmluc2ljXFxuZXh0cmluc2ljYWxseVxcbmV4dHJvdmVyc2lvbi9NXFxuZXh0cm92ZXJ0L1NNRFxcbmV4dHJ1ZGUvR0RTXFxuZXh0cnVzaW9uL1NNXFxuZXh0cnVzaXZlXFxuZXh1YmVyYW5jZS9NXFxuZXh1YmVyYW50L1lcXG5leHVkYXRpb24vTVxcbmV4dWRlL0RTR1xcbmV4dWx0L1NER1xcbmV4dWx0YW50L1lcXG5leHVsdGF0aW9uL01cXG5leHVyYi9TTVxcbmV4dXJiYW5cXG5leHVyYmFuaXRlL1NNXFxuZXh1cmJpYS9NXFxuZXllL0RTTVxcbmV5ZWJhbGwvR01EU1xcbmV5ZWJyb3cvU01cXG5leWVkcm9wcGVyL1NNXFxuZXllZnVsL1NNXFxuZXllZ2xhc3MvTVNcXG5leWVpbmdcXG5leWVsYXNoL01TXFxuZXllbGVzc1xcbmV5ZWxldC9TTVxcbmV5ZWxpZC9TTVxcbmV5ZWxpbmVyL01TXFxuZXllb3BlbmVyL01TXFxuZXllb3BlbmluZ1xcbmV5ZXBpZWNlL01TXFxuZXllc2lnaHQvTVxcbmV5ZXNvcmUvTVNcXG5leWVzdHJhaW4vTVxcbmV5ZXRlZXRoXFxuZXlldG9vdGgvTVxcbmV5ZXdhc2gvTVxcbmV5ZXdpdG5lc3MvTVNcXG5mL0NJQVZUUlxcbmZNUklcXG5mYS9NXFxuZmFiXFxuZmFibGUvRFNNXFxuZmFicmljL1NNXFxuZmFicmljYXRlL0RTR05YXFxuZmFicmljYXRpb24vTVxcbmZhYnJpY2F0b3IvU01cXG5mYWJ1bG91cy9ZXFxuZmFjYWRlL1NNXFxuZmFjZSdzXFxuZmFjZS9BQ1NER1xcbmZhY2VjbG90aC9NXFxuZmFjZWNsb3Roc1xcbmZhY2VsZXNzXFxuZmFjZXBhbG0vU0RHXFxuZmFjZXQvU01ER1xcbmZhY2V0aW91cy9ZUFxcbmZhY2V0aW91c25lc3MvTVxcbmZhY2lhbC9TTVlcXG5mYWNpbGUvWVxcbmZhY2lsaXRhdGUvR05EU1xcbmZhY2lsaXRhdGlvbi9NXFxuZmFjaWxpdGF0b3IvTVNcXG5mYWNpbGl0eS9TTVxcbmZhY2luZy9TTVxcbmZhY3NpbWlsZS9EU01cXG5mYWNzaW1pbGVpbmdcXG5mYWN0L01TXFxuZmFjdGlvbi9TTVxcbmZhY3Rpb25hbFxcbmZhY3Rpb25hbGlzbS9NXFxuZmFjdGlvdXNcXG5mYWN0aXRpb3VzXFxuZmFjdG9pZC9TTVxcbmZhY3RvcidzXFxuZmFjdG9yL0FTREdcXG5mYWN0b3JpYWwvTVNcXG5mYWN0b3JpemF0aW9uXFxuZmFjdG9yaXplL0dEU1xcbmZhY3RvcnkvU01cXG5mYWN0b3R1bS9TTVxcbmZhY3R1YWwvWVxcbmZhY3VsdHkvU01cXG5mYWQvR1NNRFxcbmZhZGRpc2gvUFxcbmZhZGRpc3QvTVNcXG5mYWRkeS9QXFxuZmFkZS9NU1xcbmZhZGluZy9VXFxuZmFlcmllL1NNXFxuZmFmZi9ER1NcXG5mYWcvU01cXG5mYWdnZWRcXG5mYWdnaW5nXFxuZmFnZ290L1NNXFxuZmFnb3QvU01HXFxuZmFpZW5jZS9NXFxuZmFpbC9ER0pTXFxuZmFpbGluZy9NXFxuZmFpbGxlL01cXG5mYWlsdXJlL1NNXFxuZmFpbi9SVFxcbmZhaW50L1NNRFJZVEdQXFxuZmFpbnRoZWFydGVkXFxuZmFpbnRuZXNzL01cXG5mYWlyL01SWVRHSlBTXFxuZmFpcmdyb3VuZC9NU1xcbmZhaXJpbmcvTVxcbmZhaXJuZXNzL1VNXFxuZmFpcndheS9TTVxcbmZhaXJ5L1NNXFxuZmFpcnlsYW5kL1NNXFxuZmFpdGgvTVxcbmZhaXRoZnVsJ3NcXG5mYWl0aGZ1bC9VUFlcXG5mYWl0aGZ1bG5lc3MvVU1cXG5mYWl0aGZ1bHNcXG5mYWl0aGxlc3MvUFlcXG5mYWl0aGxlc3NuZXNzL01cXG5mYWl0aHNcXG5mYWppdGEvU01cXG5mYWppdGFzL01cXG5mYWtlL01aR0RSU1xcbmZha2VyL01cXG5mYWtpci9TTVxcbmZhbGNvbi9TTVJaXFxuZmFsY29uZXIvTVxcbmZhbGNvbnJ5L01cXG5mYWxsL01OR1NcXG5mYWxsYWNpb3VzL1lcXG5mYWxsYWN5L1NNXFxuZmFsbGJhY2tcXG5mYWxsaWJpbGl0eS9JTVxcbmZhbGxpYmxlL1BcXG5mYWxsaWJsZW5lc3MvTVxcbmZhbGxpYmx5L0lcXG5mYWxsb2ZmL1NNXFxuZmFsbG91dC9NXFxuZmFsbG93L1NNREdcXG5mYWxzZS9QUllUXFxuZmFsc2Vob29kL1NNXFxuZmFsc2VuZXNzL01cXG5mYWxzZXR0by9TTVxcbmZhbHNpZS9TTVxcbmZhbHNpZmlhYmxlXFxuZmFsc2lmaWNhdGlvbi9NXFxuZmFsc2lmaWVyL01cXG5mYWxzaWZ5L0RSU1pHTlhcXG5mYWxzaXR5L1NNXFxuZmFsdGVyL0dTSk1EXFxuZmFsdGVyaW5nL1lcXG5mYW1lJ3NcXG5mYW1lL0RcXG5mYW1pbGlhbFxcbmZhbWlsaWFyL01ZU1xcbmZhbWlsaWFyaXR5L1VNXFxuZmFtaWxpYXJpemF0aW9uL01cXG5mYW1pbGlhcml6ZS9HRFNcXG5mYW1pbHkvU01cXG5mYW1pbmUvU01cXG5mYW1pc2gvRFNHXFxuZmFtb3VzL0lZXFxuZmFuL1NNXFxuZmFuYXRpYy9TTVxcbmZhbmF0aWNhbC9ZXFxuZmFuYXRpY2lzbS9NXFxuZmFuYm95L1NNXFxuZmFuY2lhYmxlXFxuZmFuY2llci9NXFxuZmFuY2lmdWwvWVBcXG5mYW5jaWZ1bG5lc3MvTVxcbmZhbmNpbHlcXG5mYW5jaW5lc3MvTVxcbmZhbmN5L0RSU01aVEdQXFxuZmFuY3l3b3JrL01cXG5mYW5kYW5nby9NU1xcbmZhbmRvbVxcbmZhbmZhcmUvU01cXG5mYW5nL01EU1xcbmZhbmxpZ2h0L1NNXFxuZmFubmVkXFxuZmFubmluZ1xcbmZhbm55L1NNXFxuZmFudGFpbC9NU1xcbmZhbnRhc2lhL1NNXFxuZmFudGFzaXN0L1NcXG5mYW50YXNpemUvR0RTXFxuZmFudGFzdGljXFxuZmFudGFzdGljYWwvWVxcbmZhbnRhc3kvRFNNR1xcbmZhbnppbmUvTVNcXG5mYXJcXG5mYXJhZC9TTVxcbmZhcmFkaXplL0RHXFxuZmFyYXdheVxcbmZhcmNlL1NNXFxuZmFyY2ljYWwvWVxcbmZhcmUvTUdEU1xcbmZhcmV3ZWxsL1NNXFxuZmFyaW5hL01cXG5mYXJpbmFjZW91c1xcbmZhcm0vTURSWkdTSlxcbmZhcm1lci9NXFxuZmFybWhhbmQvU01cXG5mYXJtaG91c2UvU01cXG5mYXJtaW5nL01cXG5mYXJtbGFuZC9NU1xcbmZhcm1zdGVhZC9NU1xcbmZhcm15YXJkL01TXFxuZmFyby9NXFxuZmFycmFnby9NXFxuZmFycmFnb2VzXFxuZmFycmllci9NU1xcbmZhcnJvdy9TTURHXFxuZmFyc2VlaW5nXFxuZmFyc2lnaHRlZC9QXFxuZmFyc2lnaHRlZG5lc3MvTVxcbmZhcnQvTURHU1xcbmZhcnRoZXJcXG5mYXJ0aGVybW9zdFxcbmZhcnRoZXN0XFxuZmFydGhpbmcvU01cXG5mYXNjaWEvU01cXG5mYXNjaWNsZS9TTVxcbmZhc2NpbmF0ZS9HTkRTWFxcbmZhc2NpbmF0aW5nL1lcXG5mYXNjaW5hdGlvbi9NXFxuZmFzY2lzbS9NXFxuZmFzY2lzdC9NU1xcbmZhc2Npc3RpY1xcbmZhc2hpb24vWkdCTURSU1xcbmZhc2hpb25hYmxlL1VcXG5mYXNoaW9uYWJseS9VXFxuZmFzaGlvbmVyL01cXG5mYXNoaW9uaXN0YS9NU1xcbmZhc3QvTURSVEdTUFxcbmZhc3RiYWNrL1NNXFxuZmFzdGJhbGwvU01cXG5mYXN0ZW4vVUFHRFNcXG5mYXN0ZW5lci9TTVxcbmZhc3RlbmluZy9NU1xcbmZhc3RpZGlvdXMvUFlcXG5mYXN0aWRpb3VzbmVzcy9NXFxuZmFzdG5lc3MvTVNcXG5mYXQvR1NQTURcXG5mYXRhbC9ZXFxuZmF0YWxpc20vTVxcbmZhdGFsaXN0L1NNXFxuZmF0YWxpc3RpY1xcbmZhdGFsaXN0aWNhbGx5XFxuZmF0YWxpdHkvU01cXG5mYXRiYWNrL01cXG5mYXRlL01TXFxuZmF0ZWZ1bC9ZUFxcbmZhdGVmdWxuZXNzL01cXG5mYXRoZWFkL01EU1xcbmZhdGhlci9TR01EWVxcbmZhdGhlcmhvb2QvTVxcbmZhdGhlcmxhbmQvTVNcXG5mYXRoZXJsZXNzXFxuZmF0aG9tL1NNREdCXFxuZmF0aG9tYWJsZS9VXFxuZmF0aG9tbGVzc1xcbmZhdGlndWUvTURTR1xcbmZhdGlndWVzL01cXG5mYXRuZXNzL01cXG5mYXRzby9TXFxuZmF0dGVuL1NER1xcbmZhdHRlclxcbmZhdHRlc3RcXG5mYXR0aW5lc3MvTVxcbmZhdHR5L1JTTVRQXFxuZmF0dWl0eS9NXFxuZmF0dW91cy9ZUFxcbmZhdHVvdXNuZXNzL01cXG5mYXR3YS9TTVxcbmZhdWNldC9TTVxcbmZhdWx0L0NTTURHXFxuZmF1bHRmaW5kZXIvU01cXG5mYXVsdGZpbmRpbmcvTVxcbmZhdWx0aWx5XFxuZmF1bHRpbmVzcy9NXFxuZmF1bHRsZXNzL1BZXFxuZmF1bHRsZXNzbmVzcy9NXFxuZmF1bHR5L1BSVFxcbmZhdW4vTVNcXG5mYXVuYS9TTVxcbmZhdXZpc20vTVxcbmZhdXZpc3QvU01cXG5mYXV4XFxuZmF2ZS9TXFxuZmF2b3IvRVNNREdcXG5mYXZvcmFibGUvVVxcbmZhdm9yYWJseS9VXFxuZmF2b3JpdGUvU01cXG5mYXZvcml0aXNtL01cXG5mYXduL01EUlpHU1xcbmZhd25lci9NXFxuZmF4L0dNRFNcXG5mYXkvVFNNUlxcbmZhemUvR0RTXFxuZmF6ZWQvVVxcbmZlYWx0eS9NXFxuZmVhci9NREdTXFxuZmVhcmZ1bC9ZUFxcbmZlYXJmdWxuZXNzL01cXG5mZWFybGVzcy9QWVxcbmZlYXJsZXNzbmVzcy9NXFxuZmVhcnNvbWVcXG5mZWFzaWJpbGl0eS9NXFxuZmVhc2libGUvSVVcXG5mZWFzaWJseVxcbmZlYXN0L1NNRFJaR1xcbmZlYXN0ZXIvTVxcbmZlYXQvTVNcXG5mZWF0aGVyL1NHTURcXG5mZWF0aGVyYmVkZGluZy9NXFxuZmVhdGhlcmJyYWluZWRcXG5mZWF0aGVybGVzc1xcbmZlYXRoZXJ3ZWlnaHQvTVNcXG5mZWF0aGVyeS9UUlxcbmZlYXR1cmUvRFNNR1xcbmZlYXR1cmVsZXNzXFxuZmVicmlsZVxcbmZlY2FsXFxuZmVjZXMvTVxcbmZlY2tsZXNzL1BZXFxuZmVjdW5kXFxuZmVjdW5kYXRlL0dORFNcXG5mZWN1bmRhdGlvbi9NXFxuZmVjdW5kaXR5L01cXG5mZWQvU01cXG5mZWRlcmFsL1NNWVxcbmZlZGVyYWxpc20vTVxcbmZlZGVyYWxpc3QvTVNcXG5mZWRlcmFsaXphdGlvbi9NXFxuZmVkZXJhbGl6ZS9HRFNcXG5mZWRlcmF0ZS9GWERTR05cXG5mZWRlcmF0aW9uL0ZNXFxuZmVkb3JhL1NNXFxuZmVlL1NNXFxuZmVlYmxlL1JUUFxcbmZlZWJsZW5lc3MvTVxcbmZlZWJseVxcbmZlZWQvTVJaR1NKXFxuZmVlZGJhY2svTVxcbmZlZWRiYWcvU01cXG5mZWVkZXIvTVxcbmZlZWRpbmcvTVxcbmZlZWRsb3QvU01cXG5mZWVsL01SWkdTSlxcbmZlZWxlci9NXFxuZmVlbGdvb2RcXG5mZWVsaW5nL01ZXFxuZmVldFxcbmZlaWduL1NER1xcbmZlaWduZWQvVVxcbmZlaW50L1NNREdcXG5mZWlzdHkvVFJcXG5mZWxkc3Bhci9NXFxuZmVsaWNpdGF0ZS9HTlhEU1xcbmZlbGljaXRhdGlvbi9NXFxuZmVsaWNpdG91cy9ZXFxuZmVsaWNpdHkvSVNNXFxuZmVsaW5lL1NNXFxuZmVsbC9NRFJaVEdTXFxuZmVsbGEvU1xcbmZlbGxhdGlvL01cXG5mZWxsb3cvU01cXG5mZWxsb3dtYW4vTVxcbmZlbGxvd21lblxcbmZlbGxvd3NoaXAvTVNcXG5mZWxvbi9TTVxcbmZlbG9uaW91c1xcbmZlbG9ueS9TTVxcbmZlbHQvTURHU1xcbmZlbVxcbmZlbWFsZS9QU01cXG5mZW1hbGVuZXNzL01cXG5mZW1pbmluZS9TTVlcXG5mZW1pbmluaXR5L01cXG5mZW1pbmlzbS9NXFxuZmVtaW5pc3QvU01cXG5mZW1pbml6ZS9EU0dcXG5mZW1vcmFsXFxuZmVtdXIvU01cXG5mZW4vU01cXG5mZW5jZS9EUlNNWkdcXG5mZW5jZXIvTVxcbmZlbmNpbmcvTVxcbmZlbmQvQ0RSWkdTXFxuZmVuZGVyL0NNXFxuZmVuZXN0cmF0aW9uL01cXG5mZW5uZWwvTVxcbmZlbnRhbnlsL01cXG5mZXJhbFxcbmZlcm1lbnQvRkNNU1xcbmZlcm1lbnRhdGlvbi9NXFxuZmVybWVudGVkXFxuZmVybWVudGluZ1xcbmZlcm1pdW0vTVxcbmZlcm4vTVNcXG5mZXJueS9SVFxcbmZlcm9jaW91cy9QWVxcbmZlcm9jaW91c25lc3MvTVxcbmZlcm9jaXR5L01cXG5mZXJyZXQvR1NNRFxcbmZlcnJpY1xcbmZlcnJvbWFnbmV0aWNcXG5mZXJyb21hZ25ldGlzbVxcbmZlcnJvdXNcXG5mZXJydWxlL01TXFxuZmVycnkvRFNNR1xcbmZlcnJ5Ym9hdC9TTVxcbmZlcnJ5bWFuL01cXG5mZXJyeW1lblxcbmZlcnRpbGUvSVxcbmZlcnRpbGl0eS9JTVxcbmZlcnRpbGl6YXRpb24vTVxcbmZlcnRpbGl6ZS9EUlNaR1xcbmZlcnRpbGl6ZWQvVVxcbmZlcnRpbGl6ZXIvTVxcbmZlcnVsZS9TTVxcbmZlcnZlbmN5L01cXG5mZXJ2ZW50L1lcXG5mZXJ2aWQvWVxcbmZlcnZvci9NXFxuZmVzcy9GS0dTRFxcbmZlc3QvTVJaVlNcXG5mZXN0YWxcXG5mZXN0ZXIvR01EXFxuZmVzdGl2YWwvU01cXG5mZXN0aXZlL1lQXFxuZmVzdGl2ZW5lc3MvTVxcbmZlc3Rpdml0eS9TTVxcbmZlc3Rvb24vR01EU1xcbmZldGEvTVxcbmZldGFsXFxuZmV0Y2gvRFJTWkdcXG5mZXRjaGVyL01cXG5mZXRjaGluZy9ZXFxuZmV0ZS9NR0RTXFxuZmV0aWQvUFxcbmZldGlkbmVzcy9NXFxuZmV0aXNoL01TXFxuZmV0aXNoaXNtL01cXG5mZXRpc2hpc3QvU01cXG5mZXRpc2hpc3RpY1xcbmZldGxvY2svTVNcXG5mZXR0ZXInc1xcbmZldHRlci9VU0dEXFxuZmV0dGxlL01cXG5mZXR0dWNjaW5lL01cXG5mZXR1cy9NU1xcbmZldWQvTURHU1xcbmZldWRhbFxcbmZldWRhbGlzbS9NXFxuZmV1ZGFsaXN0aWNcXG5mZXZlci9TTURcXG5mZXZlcmlzaC9ZUFxcbmZldmVyaXNobmVzcy9NXFxuZmV3L1RQTVJcXG5mZXduZXNzL01cXG5mZXlcXG5mZXovTVxcbmZlenplc1xcbmZmXFxuZmlhbmNlL0NNXFxuZmlhbmNlZS9NU1xcbmZpYW5jZXNcXG5maWFzY28vTVxcbmZpYXNjb2VzXFxuZmlhdC9NU1xcbmZpYi9aU01SXFxuZmliYmVkXFxuZmliYmVyL1NNXFxuZmliYmluZ1xcbmZpYmVyL01cXG5maWJlcmJvYXJkL01cXG5maWJlcmZpbGwvTVxcbmZpYmVyZ2xhc3MvTVxcbmZpYnJpbC9TTVxcbmZpYnJpbGxhdGUvR05EU1xcbmZpYnJpbGxhdGlvbi9NXFxuZmlicmluL01cXG5maWJyb2lkXFxuZmlicm9zaXMvTVxcbmZpYnJvdXNcXG5maWJ1bGEvTVxcbmZpYnVsYWVcXG5maWJ1bGFyXFxuZmljaGUvU01cXG5maWNodS9TTVxcbmZpY2tsZS9SUFRcXG5maWNrbGVuZXNzL01cXG5maWN0aW9uL01TXFxuZmljdGlvbmFsL1lcXG5maWN0aW9uYWxpemF0aW9uL1NNXFxuZmljdGlvbmFsaXplL0RTR1xcbmZpY3RpdGlvdXMvWVxcbmZpY3RpdmVcXG5maWN1cy9NXFxuZmlkZGxlL0RSU01aR1xcbmZpZGRsZXIvTVxcbmZpZGRsZXN0aWNrc1xcbmZpZGRseS9UUlxcbmZpZGVsaXR5L0lNXFxuZmlkZ2V0L1NHTURcXG5maWRnZXR5XFxuZmlkdWNpYXJ5L1NNXFxuZmllXFxuZmllZi9NU1xcbmZpZWZkb20vTVNcXG5maWVsZC9JU01SWlxcbmZpZWxkZWRcXG5maWVsZGVyL0lNXFxuZmllbGRpbmdcXG5maWVsZHNtYW5cXG5maWVsZHNtZW5cXG5maWVsZHdvcmsvTVJaXFxuZmllbGR3b3JrZXIvTVxcbmZpZW5kL1NNXFxuZmllbmRpc2gvWVxcbmZpZXJjZS9QUllUXFxuZmllcmNlbmVzcy9NXFxuZmllcmluZXNzL01cXG5maWVyeS9SUFRcXG5maWVzdGEvU01cXG5maWZlL01aUlNcXG5maWZlci9NXFxuZmlmdGVlbi9NSFNcXG5maWZ0ZWVudGgvTVxcbmZpZnRlZW50aHNcXG5maWZ0aC9NWVxcbmZpZnRoc1xcbmZpZnRpZXRoL01cXG5maWZ0aWV0aHNcXG5maWZ0eS9TTUhcXG5maWcvU0xNXFxuZmlnaHQvU01SWkdcXG5maWdodGJhY2tcXG5maWdodGVyL0lNU1xcbmZpZ2h0aW5nL0lNXFxuZmlnbWVudC9NU1xcbmZpZ3VyYXRpb24vRk1cXG5maWd1cmF0aXZlL1lcXG5maWd1cmUnc1xcbmZpZ3VyZS9GRUdTRFxcbmZpZ3VyZWhlYWQvU01cXG5maWd1cmluZS9NU1xcbmZpbGFtZW50L01TXFxuZmlsYW1lbnRvdXNcXG5maWxiZXJ0L01TXFxuZmlsY2gvRFNHXFxuZmlsZSdzL0tDXFxuZmlsZS9DQUtHRFNcXG5maWxlbmFtZS9TXFxuZmlsZXIvQ1NNXFxuZmlsZXRcXG5maWxpYWxcXG5maWxpYnVzdGVyL01EUlNaR1xcbmZpbGlidXN0ZXJlci9NXFxuZmlsaWdyZWUvRFNNXFxuZmlsaWdyZWVpbmdcXG5maWxpbmcnc1xcbmZpbGluZ3NcXG5maWxsJ3NcXG5maWxsL0FJREdTXFxuZmlsbGVkL1VcXG5maWxsZXIvTVNcXG5maWxsZXQvTURHU1xcbmZpbGxpbmcvU01cXG5maWxsaXAvTURHU1xcbmZpbGx5L1NNXFxuZmlsbS9NREdTXFxuZmlsbWluZXNzL01cXG5maWxtbWFrZXIvU01cXG5maWxtc3RyaXAvTVNcXG5maWxteS9UUFJcXG5maWxvXFxuZmlsdGVyL01EUkJTWkdcXG5maWx0ZXJlZC9VXFxuZmlsdGVyZXIvTVxcbmZpbHRoL01cXG5maWx0aGlseVxcbmZpbHRoaW5lc3MvTVxcbmZpbHRoeS9SUFRcXG5maWx0cmF0ZSdzXFxuZmlsdHJhdGUvSUdORFNcXG5maWx0cmF0aW9uL0lNXFxuZmluL1NNUlxcbmZpbmFnbGUvRFJTWkdcXG5maW5hZ2xlci9NXFxuZmluYWwvU01ZXFxuZmluYWxlL01TXFxuZmluYWxpc3QvU01cXG5maW5hbGl0eS9NXFxuZmluYWxpemF0aW9uL01cXG5maW5hbGl6ZS9EU0dcXG5maW5hbmNlJ3NcXG5maW5hbmNlL0FEU0dcXG5maW5hbmNpYWwvWVxcbmZpbmFuY2llci9NU1xcbmZpbmFuY2luZy9NXFxuZmluY2gvTVNcXG5maW5kL0pNUlpHU1xcbmZpbmRlci9NXFxuZmluZGluZy9NXFxuZmluZGluZ3MvTVxcbmZpbmUncy9GXFxuZmluZS9DQUZUR0RTXFxuZmluZWx5XFxuZmluZW5lc3MvTVxcbmZpbmVyeS9BTVxcbmZpbmVzcHVuXFxuZmluZXNzZS9EU01HXFxuZmluZ2VyL01ER1NKXFxuZmluZ2VyYm9hcmQvU01cXG5maW5nZXJpbmcvTVxcbmZpbmdlcmxpbmcvU01cXG5maW5nZXJtYXJrL1NcXG5maW5nZXJuYWlsL1NNXFxuZmluZ2VycHJpbnQvU0dNRFxcbmZpbmdlcnRpcC9NU1xcbmZpbmlhbC9NU1xcbmZpbmljYWxcXG5maW5pY2tpbmVzcy9NXFxuZmluaWNreS9SUFRcXG5maW5pcy9NU1xcbmZpbmlzaCdzXFxuZmluaXNoL0FEU0dcXG5maW5pc2hlZC9VXFxuZmluaXNoZXIvTVNcXG5maW5pdGUvSVlcXG5maW5rL01ER1NcXG5maW5uZWRcXG5maW5ueVxcbmZpci9aR1NKTURSSFxcbmZpcmUvTVNcXG5maXJlYXJtL1NNXFxuZmlyZWJhbGwvTVNcXG5maXJlYm9tYi9NRFNKR1xcbmZpcmVib3gvTVNcXG5maXJlYnJhbmQvU01cXG5maXJlYnJlYWsvU01cXG5maXJlYnJpY2svU01cXG5maXJlYnVnL1NNXFxuZmlyZWNyYWNrZXIvU01cXG5maXJlZGFtcC9NXFxuZmlyZWZpZ2h0L01SU1pHXFxuZmlyZWZpZ2h0ZXIvTVxcbmZpcmVmaWdodGluZy9NXFxuZmlyZWZseS9TTVxcbmZpcmVndWFyZC9TXFxuZmlyZWhvdXNlL1NNXFxuZmlyZWxpZ2h0L1pNUlxcbmZpcmVtYW4vTVxcbmZpcmVtZW5cXG5maXJlcGxhY2UvU01cXG5maXJlcGx1Zy9NU1xcbmZpcmVwb3dlci9NXFxuZmlyZXByb29mL0RTR1xcbmZpcmVyL01cXG5maXJlc2NyZWVuL1NcXG5maXJlc2lkZS9NU1xcbmZpcmVzdG9ybS9NU1xcbmZpcmV0cmFwL01TXFxuZmlyZXRydWNrL01TXFxuZmlyZXdhbGwvTVNcXG5maXJld2F0ZXIvTVxcbmZpcmV3b29kL01cXG5maXJld29yay9TTVxcbmZpcm0vTURSWVBUR1NcXG5maXJtYW1lbnQvU01cXG5maXJtbmVzcy9NXFxuZmlybXdhcmUvTVxcbmZpcnN0L1NNWVxcbmZpcnN0Ym9ybi9TTVxcbmZpcnN0aGFuZFxcbmZpcnRoL01cXG5maXJ0aHNcXG5maXNjYWwvTVlTXFxuZmlzaC9NRFJTWkdcXG5maXNoYm93bC9TTVxcbmZpc2hjYWtlL1NNXFxuZmlzaGVyL01cXG5maXNoZXJtYW4vTVxcbmZpc2hlcm1lblxcbmZpc2hlcnkvU01cXG5maXNoaG9vay9TTVxcbmZpc2hpbHlcXG5maXNoaW5lc3MvTVxcbmZpc2hpbmcvTVxcbmZpc2htb25nZXIvTVNcXG5maXNobmV0L1NNXFxuZmlzaHBvbmQvTVNcXG5maXNodGFpbC9ER1NcXG5maXNod2lmZS9NXFxuZmlzaHdpdmVzXFxuZmlzaHkvVFJQXFxuZmlzc2lsZVxcbmZpc3Npb24vQk1cXG5maXNzdXJlL1NNXFxuZmlzdC9NU1xcbmZpc3RmaWdodC9NU1xcbmZpc3RmdWwvU01cXG5maXN0aWN1ZmZzL01cXG5maXN0dWxhL1NNXFxuZmlzdHVsb3VzL01cXG5maXQvS0FNU1xcbmZpdGZ1bC9ZUFxcbmZpdGZ1bG5lc3MvTVxcbmZpdGx5XFxuZml0bWVudC9TXFxuZml0bmVzcy9VTVxcbmZpdHRlZC9VQVxcbmZpdHRlci9NU1xcbmZpdHRlc3RcXG5maXR0aW5nL1NNWVxcbmZpdmUvTVpSU1xcbmZpeC9aR0JKTURSU1xcbmZpeGF0ZS9HTlZEU1hcXG5maXhhdGlvbi9NXFxuZml4YXRpdmUvTVNcXG5maXhlZC9ZXFxuZml4ZXIvTVxcbmZpeGluZ3MvTVxcbmZpeGl0eS9NXFxuZml4dHVyZS9NU1xcbmZpenovTURTR1xcbmZpenpsZS9EU01HXFxuZml6enkvUlRcXG5mam9yZC9TTVxcbmZsL0pER1xcbmZsYWIvTVxcbmZsYWJiZXJnYXN0L1NHRFxcbmZsYWJiaWx5XFxuZmxhYmJpbmVzcy9NXFxuZmxhYmJ5L1JQVFxcbmZsYWNjaWQvWVxcbmZsYWNjaWRpdHkvTVxcbmZsYWNrL1NNXFxuZmxhZy9NU1xcbmZsYWdlbGxhXFxuZmxhZ2VsbGFudC9TXFxuZmxhZ2VsbGF0ZS9HTkRTXFxuZmxhZ2VsbGF0aW9uL01cXG5mbGFnZWxsdW0vTVxcbmZsYWdnZWRcXG5mbGFnZ2luZy9VXFxuZmxhZ21hbi9NXFxuZmxhZ21lblxcbmZsYWdvbi9NU1xcbmZsYWdwb2xlL1NNXFxuZmxhZ3JhbmNlL01cXG5mbGFncmFuY3kvTVxcbmZsYWdyYW50L1lcXG5mbGFnc2hpcC9TTVxcbmZsYWdzdGFmZi9NU1xcbmZsYWdzdG9uZS9NU1xcbmZsYWlsL1NHTURcXG5mbGFpci9TTVxcbmZsYWsvTVxcbmZsYWtlL0RTTUdcXG5mbGFraW5lc3MvTVxcbmZsYWt5L1RSUFxcbmZsYW1hZ2VcXG5mbGFtYmUvTVNcXG5mbGFtYmVlZFxcbmZsYW1iZWluZ1xcbmZsYW1ib3lhbmNlL01cXG5mbGFtYm95YW5jeS9NXFxuZmxhbWJveWFudC9ZXFxuZmxhbWUvRFJTSk1aR1xcbmZsYW1lbmNvL01TXFxuZmxhbWVwcm9vZi9ER1NcXG5mbGFtZXRocm93ZXIvU01cXG5mbGFtaW5nby9NU1xcbmZsYW1tYWJpbGl0eS9JTVxcbmZsYW1tYWJsZS9TTVxcbmZsYW4vTVNcXG5mbGFuZ2UvTVNcXG5mbGFuay9TWkdNRFJcXG5mbGFua2VyL01cXG5mbGFubmVsL1NHTURcXG5mbGFubmVsZXR0ZS9NXFxuZmxhcC9NU1xcbmZsYXBqYWNrL01TXFxuZmxhcHBlZFxcbmZsYXBwZXIvU01cXG5mbGFwcGluZ1xcbmZsYXJlL0RTTUdcXG5mbGFyZXVwL1NNXFxuZmxhc2gvWlRHTURSU1xcbmZsYXNoYmFjay9TTVxcbmZsYXNoYnVsYi9TTVxcbmZsYXNoY2FyZC9TTVxcbmZsYXNoY3ViZS9TTVxcbmZsYXNoZXIvTVxcbmZsYXNoZ3VuL1NNXFxuZmxhc2hpbHlcXG5mbGFzaGluZXNzL01cXG5mbGFzaGluZy9NXFxuZmxhc2hsaWdodC9NU1xcbmZsYXNoeS9SVFBcXG5mbGFzay9TTVxcbmZsYXQvTVlQU1xcbmZsYXRiZWQvU01cXG5mbGF0Ym9hdC9TTVxcbmZsYXRicmVhZFxcbmZsYXRjYXIvU01cXG5mbGF0ZmVldFxcbmZsYXRmaXNoL01TXFxuZmxhdGZvb3QvU01EXFxuZmxhdGlyb24vU01cXG5mbGF0bGFuZC9NXFxuZmxhdGxldC9TXFxuZmxhdG1hdGUvU1xcbmZsYXRuZXNzL01cXG5mbGF0dGVkXFxuZmxhdHRlbi9TREdcXG5mbGF0dGVyL1NEUlpHXFxuZmxhdHRlcmVyL01cXG5mbGF0dGVyaW5nL1lcXG5mbGF0dGVyeS9NXFxuZmxhdHRlc3RcXG5mbGF0dGluZ1xcbmZsYXR0aXNoXFxuZmxhdHRvcC9TTVxcbmZsYXR1bGVuY2UvTVxcbmZsYXR1bGVudFxcbmZsYXR1cy9NXFxuZmxhdHdhcmUvTVxcbmZsYXR3b3JtL1NNXFxuZmxhdW50L01EU0dcXG5mbGF1bnRpbmcvWVxcbmZsYXZvci9NRFNHSlxcbmZsYXZvcmVkL1VcXG5mbGF2b3JmdWxcXG5mbGF2b3JpbmcvTVxcbmZsYXZvcmxlc3NcXG5mbGF2b3Jzb21lXFxuZmxhdy9NREdTXFxuZmxhd2xlc3MvUFlcXG5mbGF3bGVzc25lc3MvTVxcbmZsYXgvTU5cXG5mbGF5L0RHU1xcbmZsZWEvTVNcXG5mbGVhYmFnL1NNXFxuZmxlYWJpdGUvU1xcbmZsZWFwaXQvU1xcbmZsZWNrL1NHTURcXG5mbGVkZ2VkL1VcXG5mbGVkZ2xpbmcvTVNcXG5mbGVlL1NcXG5mbGVlY2UvTVpHRFJTXFxuZmxlZWNlci9NXFxuZmxlZWNpbmVzcy9NXFxuZmxlZWN5L1JUUFxcbmZsZWVpbmdcXG5mbGVldC9TVEdNRFJZUFxcbmZsZWV0aW5nbHkvTVxcbmZsZWV0aW5nbmVzcy9NXFxuZmxlZXRuZXNzL01cXG5mbGVzaC9HTURTWVxcbmZsZXNobHkvVFJcXG5mbGVzaHBvdC9NU1xcbmZsZXNoeS9SVFxcbmZsZXdcXG5mbGV4L0FNU1xcbmZsZXhlZFxcbmZsZXhpYmlsaXR5L0lNXFxuZmxleGlibGUvSVxcbmZsZXhpYmx5L0lcXG5mbGV4aW5nXFxuZmxleGlvblxcbmZsZXh0aW1lL01cXG5mbGliYmVydGlnaWJiZXQvU01cXG5mbGljay9TWkdNRFJcXG5mbGlja2VyL0dNRFxcbmZsaWVyL01cXG5mbGlnaHQvTVNcXG5mbGlnaHRpbmVzcy9NXFxuZmxpZ2h0bGVzc1xcbmZsaWdodHkvUFRSXFxuZmxpbWZsYW0vU01cXG5mbGltZmxhbW1lZFxcbmZsaW1mbGFtbWluZ1xcbmZsaW1zaWx5XFxuZmxpbXNpbmVzcy9NXFxuZmxpbXN5L1RSUFxcbmZsaW5jaC9HTURTXFxuZmxpbmcvR01cXG5mbGludC9TTVxcbmZsaW50bG9jay9TTVxcbmZsaW50eS9UUlxcbmZsaXAvTVNcXG5mbGlwcGFuY3kvTVxcbmZsaXBwYW50L1lcXG5mbGlwcGVkXFxuZmxpcHBlci9NU1xcbmZsaXBwZXN0XFxuZmxpcHBpbmdcXG5mbGlwcHkvU1xcbmZsaXJ0L1NHTURcXG5mbGlydGF0aW9uL01TXFxuZmxpcnRhdGlvdXMvWVBcXG5mbGlydGF0aW91c25lc3MvTVxcbmZsaXJ0eVxcbmZsaXQvTVNcXG5mbGl0dGVkXFxuZmxpdHRpbmdcXG5mbG9hdC9TTURSWkdcXG5mbG9hdGVyL01cXG5mbG9jay9TTURHXFxuZmxvY2tpbmcvTVxcbmZsb2UvTVNcXG5mbG9nL1NcXG5mbG9nZ2VkXFxuZmxvZ2dlci9TTVxcbmZsb2dnaW5nL01TXFxuZmxvb2QvU01EUkdcXG5mbG9vZGdhdGUvTVNcXG5mbG9vZGxpZ2h0L01EU0dcXG5mbG9vZGxpdFxcbmZsb29kcGxhaW4vTVNcXG5mbG9vZHdhdGVyL01TXFxuZmxvb3IvU01ER1xcbmZsb29yYm9hcmQvTVNcXG5mbG9vcmluZy9NXFxuZmxvb3J3YWxrZXIvU01cXG5mbG9venkvU01cXG5mbG9wL01TXFxuZmxvcGhvdXNlL01TXFxuZmxvcHBlZFxcbmZsb3BwaWx5XFxuZmxvcHBpbmVzcy9NXFxuZmxvcHBpbmdcXG5mbG9wcHkvUFJTTVRcXG5mbG9yYS9TTVxcbmZsb3JhbFxcbmZsb3Jlc2NlbmNlL0lNXFxuZmxvcmVzY2VudC9JXFxuZmxvcmV0L1NNXFxuZmxvcmlkL1BZXFxuZmxvcmlkbmVzcy9NXFxuZmxvcmluL1NNXFxuZmxvcmlzdC9TTVxcbmZsb3NzL01EU0dcXG5mbG9zc3kvUlRcXG5mbG90YXRpb24vU01cXG5mbG90aWxsYS9NU1xcbmZsb3RzYW0vTVxcbmZsb3VuY2UvRFNNR1xcbmZsb3VuY3lcXG5mbG91bmRlci9NRFNHXFxuZmxvdXIvU01ER1xcbmZsb3VyaXNoL0dNRFNcXG5mbG91cnlcXG5mbG91dC9TTURSWkdcXG5mbG91dGVyL01cXG5mbG93L01ER1NcXG5mbG93Y2hhcnQvU01cXG5mbG93ZXInc1xcbmZsb3dlci9DU0RHXFxuZmxvd2VyYmVkL01TXFxuZmxvd2VyaW5lc3MvTVxcbmZsb3dlcmluZy9TXFxuZmxvd2VybGVzc1xcbmZsb3dlcnBvdC9NU1xcbmZsb3dlcnkvUFRSXFxuZmxvd25cXG5mbHRcXG5mbHUvTVxcbmZsdWIvTVNcXG5mbHViYmVkXFxuZmx1YmJpbmdcXG5mbHVjdHVhdGUvR05EU1hcXG5mbHVjdHVhdGlvbi9NXFxuZmx1ZS9NU1xcbmZsdWVuY3kvTVxcbmZsdWVudC9ZXFxuZmx1ZmYvU01ER1xcbmZsdWZmaW5lc3MvTVxcbmZsdWZmeS9SUFRcXG5mbHVpZC9TTVlcXG5mbHVpZGl0eS9NXFxuZmx1a2UvU01cXG5mbHVreS9SVFxcbmZsdW1lL1NNXFxuZmx1bW1veC9EU0dcXG5mbHVuZ1xcbmZsdW5rL1NNREdcXG5mbHVua3kvU01cXG5mbHVvcmVzY2UvRFNHXFxuZmx1b3Jlc2NlbmNlL01cXG5mbHVvcmVzY2VudFxcbmZsdW9yaWRhdGUvR05EU1xcbmZsdW9yaWRhdGlvbi9NXFxuZmx1b3JpZGUvU01cXG5mbHVvcmluZS9NXFxuZmx1b3JpdGUvTVxcbmZsdW9yb2NhcmJvbi9NU1xcbmZsdW9yb3Njb3BlL1NNXFxuZmx1b3Jvc2NvcGljXFxuZmx1b3hldGluZVxcbmZsdXJyeS9HRFNNXFxuZmx1c2gvTURSU1RHXFxuZmx1c3Rlci9NRFNHXFxuZmx1dGUvRFNNR1xcbmZsdXRpbmcvTVxcbmZsdXRpc3QvTVNcXG5mbHV0dGVyL01EU0dcXG5mbHV0dGVyeVxcbmZsdXZpYWxcXG5mbHV4L0lNU1xcbmZsdXhlZFxcbmZsdXhpbmdcXG5mbHkvWlRHQkRSU01cXG5mbHlhd2F5XFxuZmx5Ymxvd25cXG5mbHlieS9NXFxuZmx5YnlzXFxuZmx5Y2F0Y2hlci9NU1xcbmZseWluZy9NXFxuZmx5bGVhZi9NXFxuZmx5bGVhdmVzXFxuZmx5b3Zlci9NU1xcbmZseXBhcGVyL1NNXFxuZmx5cGFzdC9TXFxuZmx5c2hlZXQvU1xcbmZseXNwZWNrL0dNRFNcXG5mbHlzd2F0dGVyL01TXFxuZmx5dHJhcC9TXFxuZmx5d2F5L1NNXFxuZmx5d2VpZ2h0L1NNXFxuZmx5d2hlZWwvTVNcXG5mb2FsL01ER1NcXG5mb2FtL01ER1NcXG5mb2FtaW5lc3MvTVxcbmZvYW15L1JUUFxcbmZvYi9TTVxcbmZvYmJlZFxcbmZvYmJpbmdcXG5mb2NhbC9ZXFxuZm9jdXMnc1xcbmZvY3VzL0FEU0dcXG5mb2N1c2VkL1VcXG5mb2RkZXIvU01cXG5mb2UvU01cXG5mb2cnc1xcbmZvZy9DU1xcbmZvZ2JvdW5kXFxuZm9nZ2VkL0NcXG5mb2dnaWx5XFxuZm9nZ2luZXNzL01cXG5mb2dnaW5nL0NcXG5mb2dneS9SVFBcXG5mb2dob3JuL01TXFxuZm9neS9TTVxcbmZvZ3lpc2hcXG5mb2libGUvU01cXG5mb2lsL01ER1NcXG5mb2lzdC9TREdcXG5mb2xcXG5mb2xkJ3NcXG5mb2xkL0FVU0dEXFxuZm9sZGF3YXlcXG5mb2xkZXIvU01cXG5mb2xkb3V0L01TXFxuZm9saWFnZS9NXFxuZm9saWNcXG5mb2xpby9TTVxcbmZvbGsvTVNcXG5mb2xrbG9yZS9NXFxuZm9sa2xvcmljXFxuZm9sa2xvcmlzdC9NU1xcbmZvbGtzaW5lc3MvTVxcbmZvbGtzaW5nZXIvU01cXG5mb2xrc2luZ2luZy9NXFxuZm9sa3N5L1BUUlxcbmZvbGt0YWxlL01TXFxuZm9sa3dheS9NU1xcbmZvbGxcXG5mb2xsaWNsZS9NU1xcbmZvbGxvdy9TRFJaR0pcXG5mb2xsb3dlci9NXFxuZm9sbG93aW5nL01cXG5mb2xsb3d1cC9TXFxuZm9sbHkvU01cXG5mb21lbnQvU0dEXFxuZm9tZW50YXRpb24vTVxcbmZvbmQvUllUUFxcbmZvbmRhbnQvTVNcXG5mb25kbGUvRFNHXFxuZm9uZG5lc3MvTVxcbmZvbmR1ZS9TTVxcbmZvbnQvTVNcXG5mb250YW5lbC9NU1xcbmZvb1xcbmZvb2JhclxcbmZvb2QvTVNcXG5mb29kaWUvU01cXG5mb29kc3R1ZmYvU01cXG5mb29sL01ER1NcXG5mb29sZXJ5L1NNXFxuZm9vbGhhcmRpbHlcXG5mb29saGFyZGluZXNzL01cXG5mb29saGFyZHkvVFBSXFxuZm9vbGlzaC9ZUFxcbmZvb2xpc2huZXNzL01cXG5mb29scHJvb2ZcXG5mb29sc2NhcC9NXFxuZm9vdC9NRFJaR1NKXFxuZm9vdGFnZS9NXFxuZm9vdGJhbGwvTVJaR1NcXG5mb290YmFsbGVyL01cXG5mb290YnJpZGdlL1NNXFxuZm9vdGZhbGwvTVNcXG5mb290aGlsbC9NU1xcbmZvb3Rob2xkL01TXFxuZm9vdGllXFxuZm9vdGluZy9NXFxuZm9vdGxlc3NcXG5mb290bGlnaHRzL01cXG5mb290bGluZy9NU1xcbmZvb3Rsb2NrZXIvU01cXG5mb290bG9vc2VcXG5mb290bWFuL01cXG5mb290bWVuXFxuZm9vdG5vdGUvTUdEU1xcbmZvb3RwYXRoL01cXG5mb290cGF0aHNcXG5mb290cGxhdGUvU1xcbmZvb3RwcmludC9TTVxcbmZvb3RyYWNlL01TXFxuZm9vdHJlc3QvTVNcXG5mb290c2llL1NNXFxuZm9vdHNsb2dnaW5nXFxuZm9vdHNvcmVcXG5mb290c3RlcC9NU1xcbmZvb3RzdG9vbC9TTVxcbmZvb3R3ZWFyL01cXG5mb290d29yay9NXFxuZm9vdHlcXG5mb3AvU01cXG5mb3BwZXJ5L01cXG5mb3BwaXNoL1BcXG5mb3BwaXNobmVzcy9NXFxuZm9yL0hcXG5mb3JhXFxuZm9yYWdlL0RSU01aR1xcbmZvcmFnZXIvTVxcbmZvcmF5L1NNREdcXG5mb3JiYWRlXFxuZm9yYmVhci9TTUdcXG5mb3JiZWFyYW5jZS9NXFxuZm9yYmlkL1NcXG5mb3JiaWRkZW5cXG5mb3JiaWRkaW5nL1lTXFxuZm9yYm9yZVxcbmZvcmJvcm5lXFxuZm9yY2UvRFNNR1xcbmZvcmNlZC9VXFxuZm9yY2VmdWwvUFlcXG5mb3JjZWZ1bG5lc3MvTVxcbmZvcmNlcHMvTVxcbmZvcmNpYmxlXFxuZm9yY2libHlcXG5mb3JkL01ER1NCXFxuZm9yZS9NU1xcbmZvcmVhcm0vR1NNRFxcbmZvcmViZWFyL01TXFxuZm9yZWJvZGUvR0pEU1xcbmZvcmVib2RpbmcvTVxcbmZvcmVjYXN0L01SWkdTXFxuZm9yZWNhc3Rlci9NXFxuZm9yZWNhc3RsZS9NU1xcbmZvcmVjbG9zZS9EU0dcXG5mb3JlY2xvc3VyZS9NU1xcbmZvcmVjb3VydC9TTVxcbmZvcmVkb29tL0RHU1xcbmZvcmVmYXRoZXIvTVNcXG5mb3JlZmVldFxcbmZvcmVmaW5nZXIvU01cXG5mb3JlZm9vdC9NXFxuZm9yZWZyb250L1NNXFxuZm9yZWdvL0dcXG5mb3JlZ29lc1xcbmZvcmVnb25lXFxuZm9yZWdyb3VuZC9HTURTXFxuZm9yZWhhbmQvTVNcXG5mb3JlaGVhZC9NU1xcbmZvcmVpZ24vWlJQXFxuZm9yZWlnbmVyL01cXG5mb3JlaWdubmVzcy9NXFxuZm9yZWtuZXdcXG5mb3Jla25vdy9HU1xcbmZvcmVrbm93bGVkZ2UvTVxcbmZvcmVrbm93blxcbmZvcmVsZWcvU01cXG5mb3JlbGltYi9NU1xcbmZvcmVsb2NrL01TXFxuZm9yZW1hbi9NXFxuZm9yZW1hc3QvTVNcXG5mb3JlbWVuXFxuZm9yZW1vc3RcXG5mb3JlbmFtZS9NRFNcXG5mb3Jlbm9vbi9NU1xcbmZvcmVuc2ljL01TXFxuZm9yZW5zaWNhbGx5XFxuZm9yZW5zaWNzL01cXG5mb3Jlb3JkYWluL0dTRFxcbmZvcmVwYXJ0L01TXFxuZm9yZXBlcnNvbi9TTVxcbmZvcmVwbGF5L01cXG5mb3JlcXVhcnRlci9NU1xcbmZvcmVydW5uZXIvTVNcXG5mb3Jlc2FpbC9NU1xcbmZvcmVzYXdcXG5mb3Jlc2VlL1JTQlpcXG5mb3Jlc2VlYWJsZS9VXFxuZm9yZXNlZWluZ1xcbmZvcmVzZWVuL1VcXG5mb3Jlc2Vlci9NXFxuZm9yZXNoYWRvdy9HRFNcXG5mb3Jlc2hvcmUvU1xcbmZvcmVzaG9ydGVuL0RTR1xcbmZvcmVzaWdodC9NRFxcbmZvcmVzaWdodGVkbmVzcy9NXFxuZm9yZXNraW4vTVNcXG5mb3Jlc3Qnc1xcbmZvcmVzdC9BQ0dEU1xcbmZvcmVzdGFsbC9TR0RcXG5mb3Jlc3RhdGlvbi9BQ01cXG5mb3Jlc3Rlci9NU1xcbmZvcmVzdGxhbmQvTVxcbmZvcmVzdHJ5L01cXG5mb3JldGFzdGUvRFNNR1xcbmZvcmV0ZWxsL0dTXFxuZm9yZXRob3VnaHQvTVxcbmZvcmV0b2xkXFxuZm9yZXZlci9NXFxuZm9yZXZlcm1vcmVcXG5mb3Jld2Fybi9EU0dcXG5mb3Jld2VudFxcbmZvcmV3b21hbi9NXFxuZm9yZXdvbWVuXFxuZm9yZXdvcmQvTVNcXG5mb3JmZWl0L0dTTURcXG5mb3JmZWl0dXJlL1NNXFxuZm9yZ2F0aGVyL1NER1xcbmZvcmdhdmVcXG5mb3JnZS9EUlNNWkdWSlxcbmZvcmdlci9NXFxuZm9yZ2VyeS9TTVxcbmZvcmdldC9TXFxuZm9yZ2V0ZnVsL1lQXFxuZm9yZ2V0ZnVsbmVzcy9NXFxuZm9yZ2V0dGFibGUvVVxcbmZvcmdldHRpbmdcXG5mb3JnaW5nL01cXG5mb3JnaXZhYmxlL1VcXG5mb3JnaXZlL0JSU1pHUFxcbmZvcmdpdmVuXFxuZm9yZ2l2ZW5lc3MvTVxcbmZvcmdpdmVyL01cXG5mb3JnaXZpbmcvVVxcbmZvcmdvL1JaR1xcbmZvcmdvZXIvTVxcbmZvcmdvZXNcXG5mb3Jnb25lXFxuZm9yZ290XFxuZm9yZ290dGVuL1VcXG5mb3JrL01ER1NcXG5mb3JrZnVsL1NNXFxuZm9ya2xpZnQvTVNcXG5mb3Jsb3JuL1lcXG5mb3JtJ3NcXG5mb3JtL0NBSUZER1NcXG5mb3JtYWwvU01ZXFxuZm9ybWFsZGVoeWRlL01cXG5mb3JtYWxpblxcbmZvcm1hbGlzbS9NXFxuZm9ybWFsaXN0L01TXFxuZm9ybWFsaXRpZXNcXG5mb3JtYWxpdHkvSU1cXG5mb3JtYWxpemF0aW9uL01cXG5mb3JtYWxpemUvR0RTXFxuZm9ybWF0L1NNVlxcbmZvcm1hdGlvbi9DRkFTTVxcbmZvcm1hdHRlZC9BXFxuZm9ybWF0dGluZy9NXFxuZm9ybWVkL1VcXG5mb3JtZXIvRklBTVxcbmZvcm1lcmx5XFxuZm9ybWZpdHRpbmdcXG5mb3JtaWNcXG5mb3JtaWRhYmxlXFxuZm9ybWlkYWJseVxcbmZvcm1sZXNzL1BZXFxuZm9ybWxlc3NuZXNzL01cXG5mb3JtdWxhL01TXFxuZm9ybXVsYWVcXG5mb3JtdWxhaWNcXG5mb3JtdWxhdGUvQURTR05YXFxuZm9ybXVsYXRlZC9VXFxuZm9ybXVsYXRpb24vQU1cXG5mb3JtdWxhdG9yL1NNXFxuZm9ybmljYXRlL0dORFNcXG5mb3JuaWNhdGlvbi9NXFxuZm9ybmljYXRvci9NU1xcbmZvcnNha2UvR1NcXG5mb3JzYWtlblxcbmZvcnNvb2tcXG5mb3Jzb290aFxcbmZvcnN3ZWFyL1NHXFxuZm9yc3dvcmVcXG5mb3Jzd29yblxcbmZvcnN5dGhpYS9TTVxcbmZvcnQvTVNcXG5mb3J0ZS9TTVxcbmZvcnRoY29taW5nL01cXG5mb3J0aHJpZ2h0L1lQXFxuZm9ydGhyaWdodG5lc3MvTVxcbmZvcnRod2l0aFxcbmZvcnRpZXRoL01cXG5mb3J0aWV0aHNcXG5mb3J0aWZpY2F0aW9uL01cXG5mb3J0aWZpZWQvVVxcbmZvcnRpZmllci9NXFxuZm9ydGlmeS9EUlNOWkdYXFxuZm9ydGlzc2ltb1xcbmZvcnRpdHVkZS9NXFxuZm9ydG5pZ2h0L01ZU1xcbmZvcnRyZXNzL01TXFxuZm9ydHVpdG91cy9ZUFxcbmZvcnR1aXRvdXNuZXNzL01cXG5mb3J0dWl0eS9NXFxuZm9ydHVuYXRlL1VZXFxuZm9ydHVuZS9NU1xcbmZvcnR1bmV0ZWxsZXIvU01cXG5mb3J0dW5ldGVsbGluZy9NXFxuZm9ydHkvU01IXFxuZm9ydW0vU01cXG5mb3J3YXJkL01EUllaVEdTUFxcbmZvcndhcmRlci9NXFxuZm9yd2FyZG5lc3MvTVxcbmZvcndlbnRcXG5mb3NzYVxcbmZvc3NpbC9TTVxcbmZvc3NpbGl6YXRpb24vTVxcbmZvc3NpbGl6ZS9HRFNcXG5mb3N0ZXIvR1NEXFxuZm91Z2h0XFxuZm91bC9NRFJZVEdTUFxcbmZvdWxhcmQvTVxcbmZvdWxtb3V0aGVkXFxuZm91bG5lc3MvTVxcbmZvdW5kL0ZTREdcXG5mb3VuZGF0aW9uL1NNXFxuZm91bmRhdGlvbmFsXFxuZm91bmRlZC9VXFxuZm91bmRlci9HTURTXFxuZm91bmRsaW5nL1NNXFxuZm91bmRyeS9TTVxcbmZvdW50L1NNXFxuZm91bnRhaW4vU01cXG5mb3VudGFpbmhlYWQvTVNcXG5mb3VyL01IU1xcbmZvdXJmb2xkXFxuZm91cnBvc3Rlci9TTVxcbmZvdXJzY29yZS9NXFxuZm91cnNvbWUvU01cXG5mb3Vyc3F1YXJlXFxuZm91cnRlZW4vU01IXFxuZm91cnRlZW50aC9NXFxuZm91cnRlZW50aHNcXG5mb3VydGgvTVlcXG5mb3VydGhzXFxuZm93bC9NREdTXFxuZm94L0dNRFNcXG5mb3hmaXJlL01cXG5mb3hnbG92ZS9TTVxcbmZveGhvbGUvTVNcXG5mb3hob3VuZC9TTVxcbmZveGh1bnQvR1NcXG5mb3hpbHlcXG5mb3hpbmVzcy9NXFxuZm94dHJvdC9NU1xcbmZveHRyb3R0ZWRcXG5mb3h0cm90dGluZ1xcbmZveHkvUlRQXFxuZm95ZXIvU01cXG5mcHNcXG5mclxcbmZyYWNhcy9NU1xcbmZyYWNrL1NER1xcbmZyYWN0YWwvU01cXG5mcmFjdGlvbi9JU01cXG5mcmFjdGlvbmFsL1lcXG5mcmFjdGlvdXMvWVBcXG5mcmFjdGlvdXNuZXNzL01cXG5mcmFjdHVyZS9NR0RTXFxuZnJhZy9TXFxuZnJhZ2lsZS9SVFxcbmZyYWdpbGl0eS9NXFxuZnJhZ21lbnQvR01EU1xcbmZyYWdtZW50YXJ5L01cXG5mcmFnbWVudGF0aW9uL01cXG5mcmFncmFuY2UvTVNcXG5mcmFncmFudC9ZXFxuZnJhaWwvUllUUFxcbmZyYWlsbmVzcy9NXFxuZnJhaWx0eS9TTVxcbmZyYW1lL0RSU01aR1xcbmZyYW1lZC9VXFxuZnJhbWVyL01cXG5mcmFtZXdvcmsvU01cXG5mcmFuYy9TTVxcbmZyYW5jaGlzZSdzXFxuZnJhbmNoaXNlL0VEU0dcXG5mcmFuY2hpc2VlL1NNXFxuZnJhbmNoaXNlci9TTVxcbmZyYW5jaXVtL01cXG5mcmFuY29waG9uZVxcbmZyYW5naWJpbGl0eS9NXFxuZnJhbmdpYmxlXFxuZnJhbmsvU01EUllUR1BcXG5mcmFua2Z1cnRlci9NU1xcbmZyYW5raW5jZW5zZS9NXFxuZnJhbmtuZXNzL01cXG5mcmFudGljXFxuZnJhbnRpY2FsbHlcXG5mcmFwcGUvU01cXG5mcmF0L01TXFxuZnJhdGVybmFsL1lcXG5mcmF0ZXJuaXR5L0ZTTVxcbmZyYXRlcm5pemF0aW9uL01cXG5mcmF0ZXJuaXplL1pHRFJTXFxuZnJhdGVybml6ZXIvTVxcbmZyYXRyaWNpZGFsXFxuZnJhdHJpY2lkZS9NU1xcbmZyYXVkJ3NcXG5mcmF1ZC9TXFxuZnJhdWRzdGVyL1NcXG5mcmF1ZHVsZW5jZS9NXFxuZnJhdWR1bGVudC9ZXFxuZnJhdWdodFxcbmZyYXknc1xcbmZyYXkvQ0RHU1xcbmZyYXp6bGUvTUdEU1xcbmZyZWFrL1NNREdcXG5mcmVha2lzaC9ZUFxcbmZyZWFraXNobmVzcy9NXFxuZnJlYWt5L1JUXFxuZnJlY2tsZS9EU01HXFxuZnJlY2tseVxcbmZyZWUvWVREUlNcXG5mcmVlYmFzZS9NR0RTXFxuZnJlZWJpZS9TTVxcbmZyZWVib290ZXIvU01cXG5mcmVlYm9yblxcbmZyZWVkbWFuL01cXG5mcmVlZG1lblxcbmZyZWVkb20vU01cXG5mcmVlaGFuZFxcbmZyZWVob2xkL1pNUlNcXG5mcmVlaG9sZGVyL01cXG5mcmVlaW5nXFxuZnJlZWxhbmNlL0RSU01aR1xcbmZyZWVsYW5jZXIvTVxcbmZyZWVsb2FkL1NEUlpHXFxuZnJlZWxvYWRlci9NXFxuZnJlZW1hbi9NXFxuZnJlZW1hc29ucnlcXG5mcmVlbWVuXFxuZnJlZXBob25lXFxuZnJlZXNpYS9TXFxuZnJlZXN0YW5kaW5nXFxuZnJlZXN0b25lL1NNXFxuZnJlZXN0eWxlL1NNXFxuZnJlZXRoaW5rZXIvU01cXG5mcmVldGhpbmtpbmcvTVxcbmZyZWV3YXJlL01cXG5mcmVld2F5L01TXFxuZnJlZXdoZWVsL0RHU1xcbmZyZWV3aWxsXFxuZnJlZXphYmxlXFxuZnJlZXplJ3NcXG5mcmVlemUvVUFHU1xcbmZyZWV6ZXIvTVNcXG5mcmVlemluZydzXFxuZnJlaWdodC9NRFJaR1NcXG5mcmVpZ2h0ZXIvTVxcbmZyZW5jaFxcbmZyZW5lbXkvU1xcbmZyZW5ldGljXFxuZnJlbmV0aWNhbGx5XFxuZnJlbnppZWQvWVxcbmZyZW56eS9EU01cXG5mcmVxXFxuZnJlcXVlbmNpZXNcXG5mcmVxdWVuY3kvSU1cXG5mcmVxdWVudC9EUllTWlRHXFxuZnJlcXVlbnRlZC9VXFxuZnJlcXVlbnRlci9NXFxuZnJlc2NvL01cXG5mcmVzY29lc1xcbmZyZXNoL1BOUllYWlRcXG5mcmVzaGVuL1pHRFJcXG5mcmVzaGVuZXIvTVxcbmZyZXNoZXQvTVNcXG5mcmVzaG1hbi9NXFxuZnJlc2htZW5cXG5mcmVzaG5lc3MvTVxcbmZyZXNod2F0ZXIvTVxcbmZyZXQvTVNcXG5mcmV0ZnVsL1lQXFxuZnJldGZ1bG5lc3MvTVxcbmZyZXRzYXcvTVNcXG5mcmV0dGVkXFxuZnJldHRpbmdcXG5mcmV0d29yay9NXFxuZnJpYWJsZVxcbmZyaWFyL1NNXFxuZnJpYXJ5L1NNXFxuZnJpY2Fzc2VlL0RTTVxcbmZyaWNhc3NlZWluZ1xcbmZyaWNhdGl2ZS9TTVxcbmZyaWN0aW9uL1NNXFxuZnJpY3Rpb25hbFxcbmZyaWRnZS9TTVxcbmZyaWVkY2FrZS9NU1xcbmZyaWVuZCdzXFxuZnJpZW5kL1VHU0RZXFxuZnJpZW5kbGVzc1xcbmZyaWVuZGxpZXNcXG5mcmllbmRsaW5lc3MvVU1cXG5mcmllbmRseSdzXFxuZnJpZW5kbHkvVVBUUlxcbmZyaWVuZHNoaXAvTVNcXG5mcmllemUvU01cXG5mcmlnL1NcXG5mcmlnYXRlL01TXFxuZnJpZ2dlZFxcbmZyaWdnaW5nXFxuZnJpZ2h0L1NYR01ETlxcbmZyaWdodGVuL0RHXFxuZnJpZ2h0ZW5pbmcvWVxcbmZyaWdodGZ1bC9QWVxcbmZyaWdodGZ1bG5lc3MvTVxcbmZyaWdpZC9ZUFxcbmZyaWdpZGl0eS9NXFxuZnJpZ2lkbmVzcy9NXFxuZnJpbGwvU01EXFxuZnJpbGx5L1RSXFxuZnJpbmdlJ3NcXG5mcmluZ2UvSURTR1xcbmZyaXBwZXJ5L1NNXFxuZnJpc2svU0RHXFxuZnJpc2tpbHlcXG5mcmlza2luZXNzL01cXG5mcmlza3kvVFJQXFxuZnJpc3Nvbi9TXFxuZnJpdHRlci9NRFNHXFxuZnJpdHovTVxcbmZyaXZvbGl0eS9TTVxcbmZyaXZvbG91cy9QWVxcbmZyaXZvbG91c25lc3MvTVxcbmZyaXp6L01EU1lHXFxuZnJpenpsZS9NR0RTXFxuZnJpenp5L1RSXFxuZnJvXFxuZnJvY2snc1xcbmZyb2NrL0NVU1xcbmZyb2cvTVNcXG5mcm9nZ2luZy9TXFxuZnJvZ21hbi9NXFxuZnJvZ21hcmNoL0dEU1xcbmZyb2dtZW5cXG5mcm9nc3Bhd25cXG5mcm9saWMvU01cXG5mcm9saWNrZWRcXG5mcm9saWNrZXIvU01cXG5mcm9saWNraW5nXFxuZnJvbGljc29tZVxcbmZyb21cXG5mcm9uZC9TTVxcbmZyb250J3NcXG5mcm9udC9GU0RHXFxuZnJvbnRhZ2UvTVNcXG5mcm9udGFsL1lcXG5mcm9udGJlbmNoL1pSU1xcbmZyb250aWVyL01TXFxuZnJvbnRpZXJzbWFuL01cXG5mcm9udGllcnNtZW5cXG5mcm9udGllcnN3b21hblxcbmZyb250aWVyc3dvbWVuXFxuZnJvbnRpc3BpZWNlL01TXFxuZnJvbnR3YXJkL1NcXG5mcm9zaC9NXFxuZnJvc3Qnc1xcbmZyb3N0L0NTREdcXG5mcm9zdGJpdFxcbmZyb3N0Yml0ZS9NR1NcXG5mcm9zdGJpdHRlblxcbmZyb3N0aWx5XFxuZnJvc3RpbmVzcy9NXFxuZnJvc3RpbmcvU01cXG5mcm9zdHkvVFBSXFxuZnJvdGgvTURHXFxuZnJvdGhpbmVzcy9NXFxuZnJvdGhzXFxuZnJvdGh5L1RQUlxcbmZyb3Vmcm91L01cXG5mcm93bi9TTURHXFxuZnJvd3ppbHlcXG5mcm93emluZXNzL01cXG5mcm93enkvVFBSXFxuZnJvemUvQVVcXG5mcm96ZW4vVUFcXG5mcnVjdGlmeS9EU0dcXG5mcnVjdG9zZS9NXFxuZnJ1Z2FsL1lcXG5mcnVnYWxpdHkvTVxcbmZydWl0L1NNREdcXG5mcnVpdGNha2UvTVNcXG5mcnVpdGVyZXIvU1xcbmZydWl0ZnVsL1lQXFxuZnJ1aXRmdWxuZXNzL01cXG5mcnVpdGluZXNzL01cXG5mcnVpdGlvbi9NXFxuZnJ1aXRsZXNzL1BZXFxuZnJ1aXRsZXNzbmVzcy9NXFxuZnJ1aXR5L1RQUlxcbmZydW1wL1NNXFxuZnJ1bXBpc2hcXG5mcnVtcHkvVFJcXG5mcnVzdHJhdGUvR05YRFNcXG5mcnVzdHJhdGluZy9ZXFxuZnJ1c3RyYXRpb24vTVxcbmZydXN0dW0vTVNcXG5mcnkvR0RTTVxcbmZyeWVyL1NNXFxuZnRcXG5mdHAvWkdTXFxuZnVjaHNpYS9NU1xcbmZ1Y2svU01HRFJaIVxcbmZ1Y2tlci9NIVxcbmZ1Y2toZWFkL1MhXFxuZnVkZGxlL0RTTUdcXG5mdWRnZS9EU01HXFxuZnVlaHJlci9NU1xcbmZ1ZWwnc1xcbmZ1ZWwvQURHU1xcbmZ1Z1xcbmZ1Z2FsXFxuZnVnZ3lcXG5mdWdpdGl2ZS9NU1xcbmZ1Z3VlL1NNXFxuZnVocmVyL1NNXFxuZnVsY3J1bS9NU1xcbmZ1bGZpbGwvTERHU1xcbmZ1bGZpbGxlZC9VXFxuZnVsZmlsbGluZy9VXFxuZnVsZmlsbG1lbnQvTVxcbmZ1bGwvTURSWlRHU1BcXG5mdWxsYmFjay9NU1xcbmZ1bGxlci9NXFxuZnVsbG5lc3MvTVxcbmZ1bGx5XFxuZnVsbWluYXRlL0RTWEdOXFxuZnVsbWluYXRpb24vTVxcbmZ1bHNvbWUvUFlcXG5mdWxzb21lbmVzcy9NXFxuZnVtL1NcXG5mdW1ibGUvRFJTTVpHXFxuZnVtYmxlci9NXFxuZnVtYmxpbmcvWVxcbmZ1bWUvTUdEU1xcbmZ1bWlnYW50L01TXFxuZnVtaWdhdGUvR05EU1xcbmZ1bWlnYXRpb24vTVxcbmZ1bWlnYXRvci9TTVxcbmZ1bXkvUlRcXG5mdW4vTVxcbmZ1bmN0aW9uL01ER1NcXG5mdW5jdGlvbmFsL1lcXG5mdW5jdGlvbmFsaXNtXFxuZnVuY3Rpb25hbGlzdC9TXFxuZnVuY3Rpb25hbGl0eS9TXFxuZnVuY3Rpb25hcnkvU01cXG5mdW5jdG9yXFxuZnVuZC9BTURHU1xcbmZ1bmRhbWVudGFsL1NNWVxcbmZ1bmRhbWVudGFsaXNtL01cXG5mdW5kYW1lbnRhbGlzdC9TTVxcbmZ1bmRlZC9VXFxuZnVuZGluZy9NXFxuZnVuZHJhaXNlci9NU1xcbmZ1bmRyYWlzaW5nXFxuZnVuZXJhbC9NU1xcbmZ1bmVyYXJ5XFxuZnVuZXJlYWwvWVxcbmZ1bmZhaXIvU1xcbmZ1bmdhbFxcbmZ1bmdpXFxuZnVuZ2libGUvTVNcXG5mdW5naWNpZGFsXFxuZnVuZ2ljaWRlL01TXFxuZnVuZ29pZFxcbmZ1bmdvdXNcXG5mdW5ndXMvTVxcbmZ1bmljdWxhci9TTVxcbmZ1bmsvTURHU1xcbmZ1bmtpbmVzcy9NXFxuZnVua3kvUFJUXFxuZnVubmVsL01ER1NcXG5mdW5uZXJcXG5mdW5uZXN0XFxuZnVubmlseVxcbmZ1bm5pbmVzcy9NXFxuZnVubnkvVFBSU01cXG5mdW5ueW1hbi9NXFxuZnVubnltZW5cXG5mdXIvU01cXG5mdXJiZWxvdy9NXFxuZnVyYmlzaC9BRFNHXFxuZnVyaW91cy9ZXFxuZnVybCdzXFxuZnVybC9VREdTXFxuZnVybG9uZy9TTVxcbmZ1cmxvdWdoL0dNRFxcbmZ1cmxvdWdoc1xcbmZ1cm5cXG5mdXJuYWNlL1NNXFxuZnVybmlzaC9BRFNHXFxuZnVybmlzaGVkL1VcXG5mdXJuaXNoaW5ncy9NXFxuZnVybml0dXJlL01cXG5mdXJvci9TTVxcbmZ1cm9zZW1pZGVcXG5mdXJyZWRcXG5mdXJyaWVyL01cXG5mdXJyaW5lc3MvTVxcbmZ1cnJpbmcvTVxcbmZ1cnJvdy9NRFNHXFxuZnVycnkvWlRSUFxcbmZ1cnRoZXIvU0dEXFxuZnVydGhlcmFuY2UvTVxcbmZ1cnRoZXJtb3JlXFxuZnVydGhlcm1vc3RcXG5mdXJ0aGVzdFxcbmZ1cnRpdmUvWVBcXG5mdXJ0aXZlbmVzcy9NXFxuZnVyeS9TTVxcbmZ1cnplL01cXG5mdXNlJ3MvQVxcbmZ1c2UvQ0FJRkdEU1xcbmZ1c2VlL1NNXFxuZnVzZWxhZ2UvU01cXG5mdXNpYmlsaXR5L01cXG5mdXNpYmxlXFxuZnVzaWxpZXIvU01cXG5mdXNpbGxhZGUvTVNcXG5mdXNpb24vSUZLU01cXG5mdXNzL01EU0dcXG5mdXNzYnVkZ2V0L01TXFxuZnVzc2lseVxcbmZ1c3NpbmVzcy9NXFxuZnVzc3BvdC9TTVxcbmZ1c3N5L1RSUFxcbmZ1c3RpYW4vTVxcbmZ1c3RpbmVzcy9NXFxuZnVzdHkvVFJQXFxuZnV0XFxuZnV0aWxlL1lcXG5mdXRpbGl0eS9NXFxuZnV0b24vU01cXG5mdXR1cmUvTVNcXG5mdXR1cmlzbS9NXFxuZnV0dXJpc3QvTVNcXG5mdXR1cmlzdGljXFxuZnV0dXJpdHkvU01cXG5mdXR1cm9sb2dpc3QvTVNcXG5mdXR1cm9sb2d5L01cXG5mdXR6L0RTR1xcbmZ1enovTURTR1xcbmZ1enpiYWxsL1NcXG5mdXp6aWx5XFxuZnV6emluZXNzL01cXG5mdXp6eS9QVFJcXG5md2RcXG5md3lcXG5nL1NOWFZCXFxuZ2FiL1NNXFxuZ2FiYXJkaW5lL1NNXFxuZ2FiYmVkXFxuZ2FiYmluZXNzL01cXG5nYWJiaW5nXFxuZ2FiYmxlL0RTTUdcXG5nYWJieS9SVFBcXG5nYWJlcmRpbmUvU01cXG5nYWJmZXN0L01TXFxuZ2FibGUvRFNNXFxuZ2FkL1NcXG5nYWRhYm91dC9TTVxcbmdhZGRlZFxcbmdhZGRlci9TTVxcbmdhZGRpbmdcXG5nYWRmbHkvU01cXG5nYWRnZXQvU01cXG5nYWRnZXRyeS9NXFxuZ2Fkb2xpbml1bS9NXFxuZ2FmZi9NRFJaR1NcXG5nYWZmZS9TTVxcbmdhZmZlci9NXFxuZ2FnL1NNXFxuZ2FnYVxcbmdhZ2dlZFxcbmdhZ2dpbmdcXG5nYWdnbGUvU01cXG5nYWlldHkvTVxcbmdhaWx5XFxuZ2FpbidzXFxuZ2Fpbi9BREdTXFxuZ2FpbmVyL1NNXFxuZ2FpbmZ1bC9ZXFxuZ2FpbnNhaWRcXG5nYWluc2F5L1pHUlNcXG5nYWluc2F5ZXIvTVxcbmdhaXQvTVJaU1xcbmdhaXRlci9NXFxuZ2FsL1NNXFxuZ2FsYS9NU1xcbmdhbGFjdGljXFxuZ2FsYXh5L1NNXFxuZ2FsZSdzXFxuZ2FsZS9BU1xcbmdhbGVuYS9NXFxuZ2FsbC9NREdTXFxuZ2FsbGFudC9TTVlcXG5nYWxsYW50cnkvTVxcbmdhbGxibGFkZGVyL01TXFxuZ2FsbGVvbi9TTVxcbmdhbGxlcmlhL01TXFxuZ2FsbGVyeS9TTVxcbmdhbGxleS9TTVxcbmdhbGxpbWF1ZnJ5L1NNXFxuZ2FsbGl1bS9NXFxuZ2FsbGl2YW50L0dTRFxcbmdhbGxvbi9TTVxcbmdhbGxvcC9TTURHXFxuZ2FsbG93cy9NXFxuZ2FsbHN0b25lL01TXFxuZ2Fsb290L1NNXFxuZ2Fsb3JlXFxuZ2Fsb3NoL01TXFxuZ2FsdW1waC9ER1xcbmdhbHVtcGhzXFxuZ2FsdmFuaWNcXG5nYWx2YW5pc20vTVxcbmdhbHZhbml6YXRpb24vTVxcbmdhbHZhbml6ZS9EU0dcXG5nYWx2YW5vbWV0ZXIvTVNcXG5nYW1iaXQvU01cXG5nYW1ibGUvRFJTTVpHXFxuZ2FtYmxlci9NXFxuZ2FtYmxpbmcvTVxcbmdhbWJvbC9TTURHXFxuZ2FtZS9NWVRHRFJTUFxcbmdhbWVjb2NrL01TXFxuZ2FtZWtlZXBlci9NU1xcbmdhbWVuZXNzL01cXG5nYW1lc21hbnNoaXAvTVxcbmdhbWVzdGVyL01TXFxuZ2FtZXRlL1NNXFxuZ2FtZXRpY1xcbmdhbWluL1NNXFxuZ2FtaW5lL1NNXFxuZ2FtaW5lc3MvTVxcbmdhbWluZy9NXFxuZ2FtbWEvU01cXG5nYW1tb24vTVxcbmdhbW15XFxuZ2FtdXQvU01cXG5nYW15L1JUUFxcbmdhbmRlci9TTVxcbmdhbmcvTURHU1xcbmdhbmdidXN0ZXJzL01cXG5nYW5nbGFuZC9NXFxuZ2FuZ2xpYVxcbmdhbmdsaW5nXFxuZ2FuZ2xpb24vTVxcbmdhbmdsaW9uaWNcXG5nYW5ncGxhbmsvU01cXG5nYW5ncmVuZS9EU01HXFxuZ2FuZ3Jlbm91c1xcbmdhbmdzdGEvU1xcbmdhbmdzdGVyL1NNXFxuZ2FuZ3dheS9NU1xcbmdhbmphXFxuZ2FubmV0L1NNXFxuZ2FudGxldC9NU1xcbmdhbnRyeS9TTVxcbmdhcC9HU01EXFxuZ2FwZS9NU1xcbmdhci9TTE1cXG5nYXJhZ2UvRFNNR1xcbmdhcmIvTURHU1xcbmdhcmJhZ2UvTVxcbmdhcmJhZ2VtYW5cXG5nYXJiYW56by9TTVxcbmdhcmJsZS9EU0dcXG5nYXJjb24vU01cXG5nYXJkZW4vU1pHTURSXFxuZ2FyZGVuZXIvTVxcbmdhcmRlbmlhL01TXFxuZ2FyZGVuaW5nL01cXG5nYXJmaXNoL01TXFxuZ2FyZ2FudHVhblxcbmdhcmdsZS9EU01HXFxuZ2FyZ295bGUvU01cXG5nYXJpc2gvUFlcXG5nYXJpc2huZXNzL01cXG5nYXJsYW5kL01ER1NcXG5nYXJsaWMvTVxcbmdhcmxpY2t5XFxuZ2FybWVudC9NU1xcbmdhcm5lci9TR0RcXG5nYXJuZXQvU01cXG5nYXJuaXNoL0dMTURTXFxuZ2FybmlzaGVlL0RTTVxcbmdhcm5pc2hlZWluZ1xcbmdhcm5pc2htZW50L1NNXFxuZ2FycmV0L1NNXFxuZ2Fycmlzb24vTURTR1xcbmdhcnJvdGUvTVpHRFJTXFxuZ2Fycm90ZXIvTVxcbmdhcnJ1bGl0eS9NXFxuZ2FycnVsb3VzL1BZXFxuZ2FycnVsb3VzbmVzcy9NXFxuZ2FydGVyL1NNXFxuZ2FzJ3NcXG5nYXMvQ1NcXG5nYXNiYWcvU01cXG5nYXNlb3VzXFxuZ2FzaC9NRFNHXFxuZ2FzaG9sZGVyL1NcXG5nYXNrZXQvU01cXG5nYXNsaWdodC9NU1xcbmdhc21hblxcbmdhc21lblxcbmdhc29ob2wvTVxcbmdhc29saW5lL01cXG5nYXNvbWV0ZXIvU1xcbmdhc3AvTURHU1xcbmdhc3NlZC9DXFxuZ2Fzc2VzXFxuZ2Fzc2luZy9DXFxuZ2Fzc3kvUlRcXG5nYXN0cmljXFxuZ2FzdHJpdGlzL01cXG5nYXN0cm9lbnRlcml0aXMvTVxcbmdhc3Ryb2ludGVzdGluYWxcXG5nYXN0cm9ub21lL1NcXG5nYXN0cm9ub21pY1xcbmdhc3Ryb25vbWljYWwvWVxcbmdhc3Ryb25vbXkvTVxcbmdhc3Ryb3BvZC9TTVxcbmdhc3dvcmtzL01cXG5nYXRlL01HRFNcXG5nYXRlYXVcXG5nYXRlYXV4XFxuZ2F0ZWNyYXNoL0RSU1pHXFxuZ2F0ZWNyYXNoZXIvTVxcbmdhdGVob3VzZS9TTVxcbmdhdGVrZWVwZXIvTVNcXG5nYXRlcG9zdC9NU1xcbmdhdGV3YXkvTVNcXG5nYXRoZXIvU0paR01EUlxcbmdhdGhlcmVyL01cXG5nYXRoZXJpbmcvTVxcbmdhdG9yL1NNXFxuZ2F1Y2hlL1JQWVRcXG5nYXVjaGVuZXNzL01cXG5nYXVjaGVyaWUvTVxcbmdhdWNoby9TTVxcbmdhdWRpbHlcXG5nYXVkaW5lc3MvTVxcbmdhdWR5L1JQVFxcbmdhdWdlL0RTTUdcXG5nYXVudC9SUFRcXG5nYXVudGxldC9NU1xcbmdhdW50bmVzcy9NXFxuZ2F1emUvTVxcbmdhdXppbmVzcy9NXFxuZ2F1enkvUlBUXFxuZ2F2ZVxcbmdhdmVsL1NNXFxuZ2F2b3R0ZS9NU1xcbmdhd2RcXG5nYXdrL0RHU1xcbmdhd2tpbHlcXG5nYXdraW5lc3MvTVxcbmdhd2t5L1JQVFxcbmdhd3AvREdTXFxuZ2F5L1RTUE1SXFxuZ2F5bmVzcy9NXFxuZ2F6ZS9NWkdEUlNcXG5nYXplYm8vU01cXG5nYXplbGxlL01TXFxuZ2F6ZXIvTVxcbmdhemV0dGUvTUdEU1xcbmdhemV0dGVlci9NU1xcbmdhemlsbGlvbi9TXFxuZ2F6cGFjaG8vTVxcbmdhenVtcC9ER1NcXG5nZWFyL01ER1NcXG5nZWFyYm94L01TXFxuZ2VhcmluZy9NXFxuZ2VhcnNoaWZ0L01TXFxuZ2VhcndoZWVsL1NNXFxuZ2Vja28vU01cXG5nZWRkaXRcXG5nZWUvRFNcXG5nZWVpbmdcXG5nZWVrL01TXFxuZ2Vla3kvUlRcXG5nZWVzZVxcbmdlZXplci9NU1xcbmdlaXNoYS9NXFxuZ2VsL1NNXFxuZ2VsYXRpbi9NXFxuZ2VsYXRpbm91c1xcbmdlbGNhcC9NXFxuZ2VsZC9ESkdTXFxuZ2VsZGluZy9NXFxuZ2VsaWRcXG5nZWxpZ25pdGUvTVxcbmdlbGxlZFxcbmdlbGxpbmdcXG5nZW0vU01cXG5nZW1vbG9naWNhbFxcbmdlbW9sb2dpc3QvTVNcXG5nZW1vbG9neS9NXFxuZ2Vtc3RvbmUvTVNcXG5nZW5kYXJtZS9NU1xcbmdlbmRlci9NRFNcXG5nZW5lL01TXFxuZ2VuZWFsb2dpY2FsL1lcXG5nZW5lYWxvZ2lzdC9NU1xcbmdlbmVhbG9neS9TTVxcbmdlbmVyYVxcbmdlbmVyYWwvU01ZXFxuZ2VuZXJhbGlzc2ltby9NU1xcbmdlbmVyYWxpc3QvTVNcXG5nZW5lcmFsaXR5L1NNXFxuZ2VuZXJhbGl6YXRpb24vTVNcXG5nZW5lcmFsaXplL0dEU1xcbmdlbmVyYWxzaGlwL01cXG5nZW5lcmF0ZS9DQVZOR1NEXFxuZ2VuZXJhdGlvbi9BQ01cXG5nZW5lcmF0aW9uYWxcXG5nZW5lcmF0aW9uc1xcbmdlbmVyYXRvci9TTVxcbmdlbmVyaWMvU01cXG5nZW5lcmljYWxseVxcbmdlbmVyb3NpdHkvU01cXG5nZW5lcm91cy9QWVxcbmdlbmVyb3VzbmVzcy9NXFxuZ2VuZXMvU1xcbmdlbmVzaXMvTVxcbmdlbmV0aWMvU1xcbmdlbmV0aWNhbGx5XFxuZ2VuZXRpY2lzdC9NU1xcbmdlbmV0aWNzL01cXG5nZW5pYWwvRllcXG5nZW5pYWxpdHkvRk1cXG5nZW5pY3VsYXRlXFxuZ2VuaWUvU01cXG5nZW5paVxcbmdlbml0YWwvRllcXG5nZW5pdGFsaWEvTVxcbmdlbml0YWxzL01cXG5nZW5pdGl2ZS9NU1xcbmdlbml0b3VyaW5hcnlcXG5nZW5pdXMvTVNcXG5nZW5uZWRcXG5nZW5uaW5nXFxuZ2Vub2NpZGFsXFxuZ2Vub2NpZGUvTVNcXG5nZW5vbWUvTVNcXG5nZW5vbWljc1xcbmdlbnJlL1NNXFxuZ2VudC9BTVNcXG5nZW50ZWVsL1lQXFxuZ2VudGVlbG5lc3MvTVxcbmdlbnRpYW4vU01cXG5nZW50aWxlL1NNXFxuZ2VudGlsaXR5L01cXG5nZW50bGUvVEdEUlNQXFxuZ2VudGxlZm9say9NU1xcbmdlbnRsZWZvbGtzL01cXG5nZW50bGVtYW4vTVlcXG5nZW50bGVtYW5seS9VXFxuZ2VudGxlbWVuXFxuZ2VudGxlbmVzcy9NXFxuZ2VudGxld29tYW4vTVxcbmdlbnRsZXdvbWVuXFxuZ2VudGx5XFxuZ2VudHJpZmljYXRpb24vTVxcbmdlbnRyaWZ5L0RTR05cXG5nZW50cnkvU01cXG5nZW51ZmxlY3QvREdTXFxuZ2VudWZsZWN0aW9uL01TXFxuZ2VudWluZS9QWVxcbmdlbnVpbmVuZXNzL01cXG5nZW51cy9NXFxuZ2VvY2FjaGUvRFNHXFxuZ2VvY2VudHJpY1xcbmdlb2NlbnRyaWNhbGx5XFxuZ2VvY2hlbWlzdHJ5L01cXG5nZW9kZS9TTVxcbmdlb2Rlc2ljL1NNXFxuZ2VvZGVzeS9NXFxuZ2VvZGV0aWNcXG5nZW9lbmdpbmVlcmluZ1xcbmdlb2dcXG5nZW9ncmFwaGVyL1NNXFxuZ2VvZ3JhcGhpY1xcbmdlb2dyYXBoaWNhbC9ZXFxuZ2VvZ3JhcGh5L1NNXFxuZ2VvbG9naWNcXG5nZW9sb2dpY2FsL1lcXG5nZW9sb2dpc3QvTVNcXG5nZW9sb2d5L1NNXFxuZ2VvbVxcbmdlb21hZ25ldGljXFxuZ2VvbWFnbmV0aXNtL01cXG5nZW9tZXRlclxcbmdlb21ldHJpY1xcbmdlb21ldHJpY2FsL1lcXG5nZW9tZXRyeS9TTVxcbmdlb3BoeXNpY2FsXFxuZ2VvcGh5c2ljaXN0L1NNXFxuZ2VvcGh5c2ljcy9NXFxuZ2VvcG9saXRpY2FsXFxuZ2VvcG9saXRpY3MvTVxcbmdlb3N0YXRpb25hcnlcXG5nZW9zeW5jaHJvbm91c1xcbmdlb3N5bmNsaW5lL01TXFxuZ2VvdGhlcm1hbFxcbmdlb3RoZXJtaWNcXG5nZXJhbml1bS9NU1xcbmdlcmJpbC9NU1xcbmdlcmlhdHJpYy9TXFxuZ2VyaWF0cmljaWFuL1NcXG5nZXJpYXRyaWNzL01cXG5nZXJtL01TXFxuZ2VybWFuZVxcbmdlcm1hbml1bS9NXFxuZ2VybWljaWRhbFxcbmdlcm1pY2lkZS9NU1xcbmdlcm1pbmFsL01cXG5nZXJtaW5hdGUvR05EU1xcbmdlcm1pbmF0aW9uL01cXG5nZXJvbnRvbG9naWNhbFxcbmdlcm9udG9sb2dpc3QvTVNcXG5nZXJvbnRvbG9neS9NXFxuZ2VycnltYW5kZXIvR01EU1xcbmdlcnJ5bWFuZGVyaW5nL01cXG5nZXJ1bmQvTVNcXG5nZXN0YWx0L1NcXG5nZXN0YXBvL01TXFxuZ2VzdGF0ZS9HTkRTXFxuZ2VzdGF0aW9uL01cXG5nZXN0YXRpb25hbFxcbmdlc3RpY3VsYXRlL0RTR05YXFxuZ2VzdGljdWxhdGlvbi9NXFxuZ2VzdHVyYWxcXG5nZXN0dXJlL01HRFNcXG5nZXN1bmRoZWl0XFxuZ2V0L1NcXG5nZXRhd2F5L1NNXFxuZ2V0dGluZ1xcbmdldHVwL01cXG5nZXdnYXcvU01cXG5nZXlzZXIvU01cXG5naGFzdGxpbmVzcy9NXFxuZ2hhc3RseS9UUFJcXG5naGF0L01TXFxuZ2hlZVxcbmdoZXJraW4vTVNcXG5naGV0dG8vU01cXG5naGV0dG9pemUvR0RTXFxuZ2hvc3QvU01EWUdcXG5naG9zdGxpbmVzcy9NXFxuZ2hvc3RseS9SVFBcXG5naG9zdHdyaXRlL1pHUlNcXG5naG9zdHdyaXRlci9NXFxuZ2hvc3R3cml0dGVuXFxuZ2hvc3R3cm90ZVxcbmdob3VsL1NNXFxuZ2hvdWxpc2gvWVBcXG5naG91bGlzaG5lc3MvTVxcbmdpYW50L1NNXFxuZ2lhbnRlc3MvTVNcXG5naWJiZXIvR0RTXFxuZ2liYmVyaXNoL01cXG5naWJiZXQvR01EU1xcbmdpYmJvbi9NU1xcbmdpYmJvdXNcXG5naWJlL01HRFNcXG5naWJsZXQvU01cXG5naWRkaWx5XFxuZ2lkZGluZXNzL01cXG5naWRkeS9SVFBcXG5naWZ0L01ER1NcXG5naWcvU01cXG5naWdhYml0L1NNXFxuZ2lnYWJ5dGUvTVNcXG5naWdhZ3JhbS9TXFxuZ2lnYWhlcnR6L01cXG5naWdham91bGUvU1xcbmdpZ2FtZXRlci9TXFxuZ2lnYW50aWNcXG5naWdhbnRpY2FsbHlcXG5naWdhcGFzY2FsL1NcXG5naWdhcGl4ZWwvTVNcXG5naWdhd2F0dC9TTVxcbmdpZ2dlZFxcbmdpZ2dpbmdcXG5naWdnbGUvRFJTTVpHXFxuZ2lnZ2xlci9NXFxuZ2lnZ2x5L1JUXFxuZ2lnb2xvL1NNXFxuZ2lsZC9NRFJaR1NcXG5naWxkZXIvTVxcbmdpbGRpbmcvTVxcbmdpbGwvTVNcXG5naWxsaWUvU1xcbmdpbGxpb24vU1xcbmdpbHQvTVNcXG5naW1iYWxzL01cXG5naW1jcmFjay9TTVxcbmdpbWNyYWNrZXJ5L01cXG5naW1sZXQvR1NNRFxcbmdpbW1lL1NNXFxuZ2ltbWljay9NU1xcbmdpbW1pY2tyeS9NXFxuZ2ltbWlja3lcXG5naW1wL01ER1NcXG5naW1weVxcbmdpbi9TTVxcbmdpbmdlci9HU01EWVxcbmdpbmdlcmJyZWFkL01cXG5naW5nZXJzbmFwL1NNXFxuZ2luZ2VyeVxcbmdpbmdoYW0vTVxcbmdpbmdpdml0aXMvTVxcbmdpbmtnby9NXFxuZ2lua2dvZXNcXG5naW5uZWRcXG5naW5uaW5nXFxuZ2lub3Jtb3VzXFxuZ2luc2VuZy9NXFxuZ2lyYWZmZS9NU1xcbmdpcmQvRFJaR1NcXG5naXJkZXIvTVxcbmdpcmRsZS9EU01HXFxuZ2lybC9NU1xcbmdpcmxmcmllbmQvTVNcXG5naXJsaG9vZC9TTVxcbmdpcmxpc2gvWVBcXG5naXJsaXNobmVzcy9NXFxuZ2lybHlcXG5naXJvL1NcXG5naXJ0L01ER1NcXG5naXJ0aC9NXFxuZ2lydGhzXFxuZ2lzdC9NXFxuZ2l0L1NcXG5naXRlL1NcXG5naXZlL1pHSlJTXFxuZ2l2ZWF3YXkvTVNcXG5naXZlYmFjay9NU1xcbmdpdmVuL1NNXFxuZ2l2ZXIvTVxcbmdpem1vL1NNXFxuZ2l6emFyZC9NU1xcbmdsYWNlL1NcXG5nbGFjZWVkXFxuZ2xhY2VpbmdcXG5nbGFjaWFsL1lcXG5nbGFjaWF0ZS9YR05EU1xcbmdsYWNpYXRpb24vTVxcbmdsYWNpZXIvTVNcXG5nbGFkL01ZU1BcXG5nbGFkZGVuL0dEU1xcbmdsYWRkZXJcXG5nbGFkZGVzdFxcbmdsYWRlL1NNXFxuZ2xhZGlhdG9yL1NNXFxuZ2xhZGlhdG9yaWFsXFxuZ2xhZGlvbGEvU01cXG5nbGFkaW9saVxcbmdsYWRpb2x1cy9NXFxuZ2xhZG5lc3MvTVxcbmdsYWRzb21lXFxuZ2xhbVxcbmdsYW1vcml6YXRpb24vTVxcbmdsYW1vcml6ZS9EU0dcXG5nbGFtb3JvdXMvWVxcbmdsYW1vdXIvR01EU1xcbmdsYW5jZS9EU01HXFxuZ2xhbmQvU01cXG5nbGFuZGVzXFxuZ2xhbmR1bGFyXFxuZ2xhbnMvTVxcbmdsYXJlL0RTTUdcXG5nbGFyaW5nL1lcXG5nbGFzbm9zdC9NXFxuZ2xhc3MvTURTR1xcbmdsYXNzYmxvd2VyL01TXFxuZ2xhc3NibG93aW5nL01cXG5nbGFzc2Z1bC9TTVxcbmdsYXNzaG91c2UvU1xcbmdsYXNzaWx5XFxuZ2xhc3NpbmVzcy9NXFxuZ2xhc3N3YXJlL01cXG5nbGFzc3kvUlRQXFxuZ2xhdWNvbWEvTVxcbmdsYXplL0RTTUdcXG5nbGF6aWVyL1NNXFxuZ2xhemluZy9NXFxuZ2xlYW0vU01ER0pcXG5nbGVhbi9TRFJaR0pcXG5nbGVhbmVyL01cXG5nbGVhbmluZ3MvTVxcbmdsZWUvTVxcbmdsZWVmdWwvWVBcXG5nbGVlZnVsbmVzcy9NXFxuZ2xlbi9NU1xcbmdsZW5vaHVtZXJhbFxcbmdsZW5vaWRcXG5nbGliL1lQXFxuZ2xpYmJlclxcbmdsaWJiZXN0XFxuZ2xpYm5lc3MvTVxcbmdsaWRlL0RSU01aR1xcbmdsaWRlci9NXFxuZ2xpZGluZy9NXFxuZ2xpbW1lci9NREdKU1xcbmdsaW1tZXJpbmcvTVxcbmdsaW1wc2UvTUdEU1xcbmdsaW50L1NNREdcXG5nbGlzc2FuZGlcXG5nbGlzc2FuZG8vTVxcbmdsaXN0ZW4vTURTR1xcbmdsaXN0ZXIvRFNHXFxuZ2xpdGNoL0dNRFNcXG5nbGl0dGVyL01EU0dcXG5nbGl0dGVyYXRpXFxuZ2xpdHRlcnlcXG5nbGl0ei9NXFxuZ2xpdHp5L1RSXFxuZ2xvYW1pbmcvU01cXG5nbG9hdC9TTURHXFxuZ2xvYXRpbmcvWVxcbmdsb2IvTURHU1xcbmdsb2JhbC9ZXFxuZ2xvYmFsaXNtL01cXG5nbG9iYWxpc3QvTVNcXG5nbG9iYWxpemF0aW9uL01cXG5nbG9iYWxpemUvR0RTXFxuZ2xvYmUvU01cXG5nbG9iZXRyb3R0ZXIvTVNcXG5nbG9iZXRyb3R0aW5nXFxuZ2xvYnVsYXJcXG5nbG9idWxlL01TXFxuZ2xvYnVsaW4vTVxcbmdsb2NrZW5zcGllbC9TTVxcbmdsb29tL01cXG5nbG9vbWlseVxcbmdsb29taW5lc3MvTVxcbmdsb29teS9UUlBcXG5nbG9wL01cXG5nbG9wcHlcXG5nbG9yaWZpY2F0aW9uL01cXG5nbG9yaWZ5L0dEU05cXG5nbG9yaW91cy9JWVxcbmdsb3J5L0RTTUdcXG5nbG9zcy9NRFNHXFxuZ2xvc3NhcnkvU01cXG5nbG9zc2lseVxcbmdsb3NzaW5lc3MvTVxcbmdsb3Nzb2xhbGlhL01cXG5nbG9zc3kvUFRSU01cXG5nbG90dGFsXFxuZ2xvdHRpcy9NU1xcbmdsb3ZlL0RTTUdcXG5nbG93L01EUlpHU1xcbmdsb3dlci9HTURcXG5nbG93aW5nL1lcXG5nbG93d29ybS9NU1xcbmdsdWNhZ29uXFxuZ2x1Y29zZS9NXFxuZ2x1ZS9NR0RTXFxuZ2x1ZWQvVVxcbmdsdWV5XFxuZ2x1aWVyXFxuZ2x1aWVzdFxcbmdsdW0vWVBcXG5nbHVtbWVyXFxuZ2x1bW1lc3RcXG5nbHVtbmVzcy9NXFxuZ2x1b24vU1xcbmdsdXQvTU5TXFxuZ2x1dGVuL01cXG5nbHV0ZW5vdXNcXG5nbHV0aW5vdXMvWVxcbmdsdXR0ZWRcXG5nbHV0dGluZ1xcbmdsdXR0b24vTVNcXG5nbHV0dG9ub3VzL1lcXG5nbHV0dG9ueS9NXFxuZ2x5Y2VyaW4vTVxcbmdseWNlcm9sL01cXG5nbHljb2dlbi9NXFxuZ2x5Y29sXFxuZ2x5cGhcXG5nbVxcbmduYXJsL1NNREdcXG5nbmFybHkvVFJcXG5nbmFzaC9NRFNHXFxuZ25hdC9NU1xcbmduYXcvREdTXFxuZ25laXNzL01cXG5nbm9jY2hpXFxuZ25vbWUvU01cXG5nbm9taWNcXG5nbm9taXNoXFxuZ251L1NNXFxuZ28vSk1SSFpHXFxuZ29hZC9NREdTXFxuZ29hbC9NU1xcbmdvYWxpZS9TTVxcbmdvYWxrZWVwZXIvTVNcXG5nb2Fsa2VlcGluZy9NXFxuZ29hbGxlc3NcXG5nb2FsbW91dGhcXG5nb2FsbW91dGhzXFxuZ29hbHBvc3QvTVNcXG5nb2Fsc2NvcmVyL1NcXG5nb2FsdGVuZGVyL01TXFxuZ29hdC9NU1xcbmdvYXRlZS9TTVxcbmdvYXRoZXJkL01TXFxuZ29hdHNraW4vTVNcXG5nb2IvU01cXG5nb2JiZWRcXG5nb2JiZXQvU01cXG5nb2JiaW5nXFxuZ29iYmxlL0RSU01aR1xcbmdvYmJsZWR5Z29vay9NXFxuZ29iYmxlci9NXFxuZ29ibGV0L1NNXFxuZ29ibGluL1NNXFxuZ29ic21hY2tlZFxcbmdvYnN0b3BwZXIvU1xcbmdvZC9TTVxcbmdvZGF3ZnVsXFxuZ29kY2hpbGQvTVxcbmdvZGNoaWxkcmVuL01cXG5nb2RkYW1taXRcXG5nb2RkYW1uL0RcXG5nb2RkYXVnaHRlci9NU1xcbmdvZGRlc3MvTVNcXG5nb2RmYXRoZXIvU01cXG5nb2Rmb3JzYWtlblxcbmdvZGhlYWQvTVxcbmdvZGhvb2QvTVxcbmdvZGxlc3MvUFlcXG5nb2RsZXNzbmVzcy9NXFxuZ29kbGlrZVxcbmdvZGxpbmVzcy9VTVxcbmdvZGx5L1VSVFBcXG5nb2Rtb3RoZXIvU01cXG5nb2RwYXJlbnQvU01cXG5nb2RzZW5kL1NNXFxuZ29kc29uL1NNXFxuZ29kc3BlZWRcXG5nb2VyL01cXG5nb2VzXFxuZ29mZXIvU01cXG5nb2dnbGUvRFNNR1xcbmdvZ2dsZXMvTVxcbmdvaW5nL01cXG5nb2l0ZXIvU01cXG5nb2xkL01OU1xcbmdvbGRicmljay9aR1NNRFJcXG5nb2xkYnJpY2tlci9NXFxuZ29sZGVuL1RSXFxuZ29sZGVucm9kL01cXG5nb2xkZmllbGQvU1xcbmdvbGRmaW5jaC9NU1xcbmdvbGRmaXNoL01TXFxuZ29sZG1pbmUvU01cXG5nb2xkc21pdGgvTVxcbmdvbGRzbWl0aHNcXG5nb2xmL01EUlpHU1xcbmdvbGZlci9NXFxuZ29sbGl3b2cvU1xcbmdvbGx5L1NNXFxuZ29uYWQvU01cXG5nb25hZGFsXFxuZ29uZG9sYS9NU1xcbmdvbmRvbGllci9TTVxcbmdvbmUvWlJcXG5nb25lci9NXFxuZ29uZy9NREdTXFxuZ29uay9TXFxuZ29ubmFcXG5nb25vcnJoZWEvTVxcbmdvbm9ycmhlYWxcXG5nb256b1xcbmdvby9NXFxuZ29vYmVyL1NNXFxuZ29vZC9NWVNQXFxuZ29vZGJ5ZS9NU1xcbmdvb2RoZWFydGVkXFxuZ29vZGlzaFxcbmdvb2RseS9UUlxcbmdvb2RuZXNzL01cXG5nb29kbmlnaHRcXG5nb29kcy9NXFxuZ29vZHdpbGwvTVxcbmdvb2R5L1NNXFxuZ29vZXlcXG5nb29mL01ER1NcXG5nb29mYmFsbC9TTVxcbmdvb2ZpbmVzcy9NXFxuZ29vZnkvUlBUXFxuZ29vZ2xlL0RTTUdcXG5nb29nbHkvU1xcbmdvb2llclxcbmdvb2llc3RcXG5nb29rL01TXFxuZ29vbi9NU1xcbmdvb3AvTVxcbmdvb3NlL0RTTUdcXG5nb29zZWJlcnJ5L1NNXFxuZ29vc2VidW1wcy9NXFxuZ29vc2VzdGVwL1NcXG5nb29zZXN0ZXBwZWRcXG5nb29zZXN0ZXBwaW5nXFxuZ29waGVyL1NNXFxuZ29yZS9NR0RTXFxuZ29yZ2Unc1xcbmdvcmdlL0VEU0dcXG5nb3JnZW91cy9ZUFxcbmdvcmdlb3VzbmVzcy9NXFxuZ29yZ29uL1NNXFxuZ29yaWxsYS9NU1xcbmdvcmlseVxcbmdvcmluZXNzL01cXG5nb3JtYW5kaXplL0RSU1pHXFxuZ29ybWFuZGl6ZXIvTVxcbmdvcm1sZXNzXFxuZ29ycC9NU1xcbmdvcnNlL01cXG5nb3J5L1JUUFxcbmdvc2hcXG5nb3NoYXdrL01TXFxuZ29zbGluZy9TTVxcbmdvc3BlbC9NU1xcbmdvc3NhbWVyL01cXG5nb3NzaXAvTURSWkdTXFxuZ29zc2lwZXIvTVxcbmdvc3NpcHlcXG5nb3RcXG5nb3RjaGEvU1xcbmdvdGhzXFxuZ290dGFcXG5nb3R0ZW5cXG5nb3VhY2hlL1NcXG5nb3VnZS9EUlNNWkdcXG5nb3VnZXIvTVxcbmdvdWxhc2gvTVNcXG5nb3VyZC9TTVxcbmdvdXJkZS9NU1xcbmdvdXJtYW5kL1NNXFxuZ291cm1ldC9TTVxcbmdvdXQvTVxcbmdvdXR5L1RSXFxuZ292XFxuZ292ZXJuL0RHU0JMXFxuZ292ZXJuYWJsZS9VXFxuZ292ZXJuYW5jZS9NXFxuZ292ZXJuZWQvVVxcbmdvdmVybmVzcy9NU1xcbmdvdmVybm1lbnQvTVNcXG5nb3Zlcm5tZW50YWxcXG5nb3Zlcm5vci9TTVxcbmdvdmVybm9yc2hpcC9NXFxuZ292dFxcbmdvd24vTURHU1xcbmdyXFxuZ3JhYi9NU1xcbmdyYWJiZWRcXG5ncmFiYmVyL01TXFxuZ3JhYmJpbmdcXG5ncmFiYnkvVFJcXG5ncmFjZS9FRFNNR1xcbmdyYWNlZnVsL0VQWVxcbmdyYWNlZnVsbmVzcy9FTVxcbmdyYWNlbGVzcy9QWVxcbmdyYWNlbGVzc25lc3MvTVxcbmdyYWNpb3VzL1VZXFxuZ3JhY2lvdXNuZXNzL01cXG5ncmFja2xlL01TXFxuZ3JhZC9NUlpTQlxcbmdyYWRhdGUvWEdORFNcXG5ncmFkYXRpb24vQ01cXG5ncmFkZSdzXFxuZ3JhZGUvQ0FEU0dcXG5ncmFkZWQvVVxcbmdyYWRlci9NXFxuZ3JhZGllbnQvTVNcXG5ncmFkdWFsL1BZXFxuZ3JhZHVhbGlzbS9NXFxuZ3JhZHVhbG5lc3MvTVxcbmdyYWR1YXRlL1hNR05EU1xcbmdyYWR1YXRpb24vTVxcbmdyYWZmaXRpXFxuZ3JhZmZpdG8vTVxcbmdyYWZ0L1NNRFJaR1xcbmdyYWZ0ZXIvTVxcbmdyYWhhbS9TXFxuZ3JhaWxcXG5ncmFpbi9JU01EXFxuZ3JhaW5pbmVzcy9NXFxuZ3JhaW55L1BUUlxcbmdyYW0vS01TXFxuZ3JhbW1hci9NU1xcbmdyYW1tYXJpYW4vU01cXG5ncmFtbWF0aWNhbC9VWVxcbmdyYW1vcGhvbmUvTVNcXG5ncmFtcHVzL01TXFxuZ3Jhbi9TXFxuZ3JhbmFyeS9TTVxcbmdyYW5kL1NNUllQVFxcbmdyYW5kYW0vTVNcXG5ncmFuZGF1bnQvTVNcXG5ncmFuZGNoaWxkL01cXG5ncmFuZGNoaWxkcmVuL01cXG5ncmFuZGRhZC9TTVxcbmdyYW5kZGFkZHkvU01cXG5ncmFuZGRhdWdodGVyL1NNXFxuZ3JhbmRlZS9NU1xcbmdyYW5kZXVyL01cXG5ncmFuZGZhdGhlci9HTURZU1xcbmdyYW5kaWxvcXVlbmNlL01cXG5ncmFuZGlsb3F1ZW50XFxuZ3JhbmRpb3NlL1lcXG5ncmFuZGlvc2l0eS9NXFxuZ3JhbmRtYS9NU1xcbmdyYW5kbW90aGVyL01ZU1xcbmdyYW5kbmVwaGV3L01TXFxuZ3JhbmRuZXNzL01cXG5ncmFuZG5pZWNlL01TXFxuZ3JhbmRwYS9NU1xcbmdyYW5kcGFyZW50L01TXFxuZ3JhbmRzb24vTVNcXG5ncmFuZHN0YW5kL1NHTURcXG5ncmFuZHVuY2xlL1NNXFxuZ3JhbmdlL1NNXFxuZ3Jhbml0ZS9NXFxuZ3Jhbml0aWNcXG5ncmFubnkvU01cXG5ncmFub2xhL01cXG5ncmFudC9TTURSWkdcXG5ncmFudGVlL01TXFxuZ3JhbnRlci9NXFxuZ3JhbnRzbWFuc2hpcC9NXFxuZ3JhbnVsYXJcXG5ncmFudWxhcml0eS9NXFxuZ3JhbnVsYXRlL0dORFNcXG5ncmFudWxhdGlvbi9NXFxuZ3JhbnVsZS9NU1xcbmdyYXBlL1NNXFxuZ3JhcGVmcnVpdC9NU1xcbmdyYXBlc2hvdC9NXFxuZ3JhcGV2aW5lL1NNXFxuZ3JhcGgvTURHXFxuZ3JhcGhpYy9NU1xcbmdyYXBoaWNhbC9ZXFxuZ3JhcGhpdGUvTVxcbmdyYXBob2xvZ2lzdC9NU1xcbmdyYXBob2xvZ3kvTVxcbmdyYXBoc1xcbmdyYXBuZWwvTVNcXG5ncmFwcGxlL01HRFNcXG5ncmFzcC9TTURCR1xcbmdyYXNzL01EU0dcXG5ncmFzc2hvcHBlci9NU1xcbmdyYXNzbGFuZC9NU1xcbmdyYXNzcm9vdHNcXG5ncmFzc3kvVFJcXG5ncmF0ZS9EUlNNWkdKXFxuZ3JhdGVmdWwvVVlQXFxuZ3JhdGVmdWxuZXNzL1VNXFxuZ3JhdGVyL01cXG5ncmF0aWZpY2F0aW9uL01cXG5ncmF0aWZ5L0dOWERTXFxuZ3JhdGlmeWluZy9ZXFxuZ3JhdGluL1NcXG5ncmF0aW5nL01ZXFxuZ3JhdGlzXFxuZ3JhdGl0dWRlL0lNXFxuZ3JhdHVpdG91cy9ZUFxcbmdyYXR1aXRvdXNuZXNzL01cXG5ncmF0dWl0eS9TTVxcbmdyYXZhbWVuL01TXFxuZ3JhdmUvRFJTTVlUR1BcXG5ncmF2ZWRpZ2dlci9TTVxcbmdyYXZlbC9TR01EWVxcbmdyYXZlblxcbmdyYXZlbmVzcy9NXFxuZ3JhdmVzaWRlL01TXFxuZ3JhdmVzdG9uZS9TTVxcbmdyYXZleWFyZC9NU1xcbmdyYXZpZFxcbmdyYXZpbWV0ZXIvTVNcXG5ncmF2aXRhc1xcbmdyYXZpdGF0ZS9HTkRTXFxuZ3Jhdml0YXRpb24vTVxcbmdyYXZpdGF0aW9uYWxcXG5ncmF2aXR5L01cXG5ncmF2eS9TTVxcbmdyYXkvTURSVEdTUFxcbmdyYXliZWFyZC9TTVxcbmdyYXlpc2hcXG5ncmF5bmVzcy9NXFxuZ3JhemUvRFJTTVpHXFxuZ3JhemVyL01cXG5ncmVhc2UvRFJTTVpHXFxuZ3JlYXNlcGFpbnQvTVxcbmdyZWFzaWx5XFxuZ3JlYXNpbmVzcy9NXFxuZ3JlYXN5L1BUUlxcbmdyZWF0L1NNUllQVFxcbmdyZWF0Y29hdC9TTVxcbmdyZWF0aGVhcnRlZFxcbmdyZWF0bmVzcy9NXFxuZ3JlYmUvU01cXG5ncmVlZC9NXFxuZ3JlZWRpbHlcXG5ncmVlZGluZXNzL01cXG5ncmVlZHkvUFRSXFxuZ3JlZW4vR1BTTURSWVRcXG5ncmVlbmJhY2svTVNcXG5ncmVlbmJlbHQvTVNcXG5ncmVlbmVyeS9NXFxuZ3JlZW5maWVsZFxcbmdyZWVuZmx5L1NcXG5ncmVlbmdhZ2UvTVNcXG5ncmVlbmdyb2Nlci9TTVxcbmdyZWVuaG9ybi9TTVxcbmdyZWVuaG91c2UvU01cXG5ncmVlbmlzaFxcbmdyZWVubWFpbC9NXFxuZ3JlZW5uZXNzL01cXG5ncmVlbnJvb20vU01cXG5ncmVlbnN0b25lXFxuZ3JlZW5zd2FyZC9NXFxuZ3JlZW53b29kL01cXG5ncmVldC9aR0pTRFJcXG5ncmVldGVyL01cXG5ncmVldGluZy9NXFxuZ3JlZ2FyaW91cy9QWVxcbmdyZWdhcmlvdXNuZXNzL01cXG5ncmVtbGluL1NNXFxuZ3JlbmFkZS9TTVxcbmdyZW5hZGllci9NU1xcbmdyZW5hZGluZS9NXFxuZ3JlcC9TXFxuZ3JlcHBlZFxcbmdyZXBwaW5nXFxuZ3Jldy9BXFxuZ3JleWhvdW5kL1NNXFxuZ3JpYmJsZS9TXFxuZ3JpZC9NU1xcbmdyaWRkbGUvU01cXG5ncmlkZGxlY2FrZS9TTVxcbmdyaWRpcm9uL1NNXFxuZ3JpZGxvY2svU01EXFxuZ3JpZWYvU01cXG5ncmlldmFuY2UvTVNcXG5ncmlldmUvWkdEUlNcXG5ncmlldmVyL01cXG5ncmlldm91cy9QWVxcbmdyaWV2b3VzbmVzcy9NXFxuZ3JpZmZpbi9TTVxcbmdyaWZmb24vU01cXG5ncmlsbC9TR01ESlxcbmdyaWxsZS9NU1xcbmdyaW0vRFlQR1xcbmdyaW1hY2UvRFNNR1xcbmdyaW1lL1NNXFxuZ3JpbWluZXNzL01cXG5ncmltbWVyXFxuZ3JpbW1lc3RcXG5ncmltbmVzcy9NXFxuZ3JpbXkvVFJQXFxuZ3Jpbi9NU1xcbmdyaW5kL1NaR01SSlxcbmdyaW5kZXIvTVxcbmdyaW5kc3RvbmUvTVNcXG5ncmluZ28vTVNcXG5ncmlubmVkXFxuZ3Jpbm5pbmdcXG5ncmlwL01EUlNaR1xcbmdyaXBlL1NNXFxuZ3JpcGVyL01cXG5ncmlwcGUvTVpHRFJcXG5ncmlwcGVyL01cXG5ncmlzbGluZXNzL01cXG5ncmlzbHkvUlRQXFxuZ3Jpc3QvTVlcXG5ncmlzdGxlL01cXG5ncmlzdG1pbGwvTVNcXG5ncml0L01TXFxuZ3JpdHMvTVxcbmdyaXR0ZWRcXG5ncml0dGVyL1NNXFxuZ3JpdHRpbmVzcy9NXFxuZ3JpdHRpbmdcXG5ncml0dHkvUlRQXFxuZ3JpenpsZS9EU0dcXG5ncml6emx5L1RSU01cXG5ncm9hbi9TR01EXFxuZ3JvYXQvU01cXG5ncm9jZXIvTVNcXG5ncm9jZXJ5L1NNXFxuZ3JvZy9NXFxuZ3JvZ2dpbHlcXG5ncm9nZ2luZXNzL01cXG5ncm9nZ3kvUFJUXFxuZ3JvaW4vU01cXG5ncm9rL1NcXG5ncm9ra2VkXFxuZ3Jva2tpbmdcXG5ncm9tbWV0L1NNXFxuZ3Jvb20vU1pHTURSXFxuZ3Jvb21lci9NXFxuZ3Jvb21pbmcvTVxcbmdyb29tc21hbi9NXFxuZ3Jvb21zbWVuXFxuZ3Jvb3ZlL01HRFNcXG5ncm9vdnkvUlRcXG5ncm9wZS9EUlNNWkdcXG5ncm9wZXIvTVxcbmdyb3NiZWFrL01TXFxuZ3Jvc2dyYWluL01cXG5ncm9zcy9QVEdNRFJTWVxcbmdyb3NzbmVzcy9NXFxuZ3JvdGVzcXVlL1NQTVlcXG5ncm90ZXNxdWVuZXNzL01cXG5ncm90dG8vTVxcbmdyb3R0b2VzXFxuZ3JvdHR5L1RSXFxuZ3JvdWNoL0dNRFNcXG5ncm91Y2hpbHlcXG5ncm91Y2hpbmVzcy9NXFxuZ3JvdWNoeS9SVFBcXG5ncm91bmQvWkdNRFJKU1xcbmdyb3VuZGJyZWFraW5nL01TXFxuZ3JvdW5kY2xvdGhcXG5ncm91bmRjbG90aHNcXG5ncm91bmRlci9NXFxuZ3JvdW5kaG9nL01TXFxuZ3JvdW5kaW5nL01cXG5ncm91bmRsZXNzL1lcXG5ncm91bmRudXQvTVNcXG5ncm91bmRzaGVldC9TXFxuZ3JvdW5kc2tlZXBlci9TXFxuZ3JvdW5kc21hblxcbmdyb3VuZHNtZW5cXG5ncm91bmRzd2VsbC9TTVxcbmdyb3VuZHdhdGVyL01cXG5ncm91bmR3b3JrL01cXG5ncm91cC9KU1pHTURSXFxuZ3JvdXBlci9NXFxuZ3JvdXBpZS9NU1xcbmdyb3VwaW5nL01cXG5ncm91cHdhcmUvTVxcbmdyb3VzZS9NWkdEUlNcXG5ncm91c2VyL01cXG5ncm91dC9TR01EXFxuZ3JvdmUvU01cXG5ncm92ZWwvWkdEUlNcXG5ncm92ZWxlci9NXFxuZ3JvdmVsbGVkXFxuZ3JvdmVsbGluZ1xcbmdyb3cvQUhTR1xcbmdyb3dlci9NU1xcbmdyb3dpbmcvSVxcbmdyb3dsL1NaR01EUlxcbmdyb3dsZXIvTVxcbmdyb3duL0FJXFxuZ3Jvd251cC9NU1xcbmdyb3d0aC9BTVxcbmdyb3d0aHNcXG5ncnViL01TXFxuZ3J1YmJlZFxcbmdydWJiZXIvTVNcXG5ncnViYmlseVxcbmdydWJiaW5lc3MvTVxcbmdydWJiaW5nXFxuZ3J1YmJ5L1RSUFxcbmdydWJzdGFrZS9NXFxuZ3J1ZGdlL01HRFNcXG5ncnVkZ2luZy9ZXFxuZ3J1ZS9TXFxuZ3J1ZWwvR0pNXFxuZ3J1ZWxpbmcvWVxcbmdydWVzb21lL1JZVFBcXG5ncnVlc29tZW5lc3MvTVxcbmdydWZmL1RQUllcXG5ncnVmZm5lc3MvTVxcbmdydW1ibGUvRFJTTVpHSlxcbmdydW1ibGVyL01cXG5ncnVtcC9TTVxcbmdydW1waWx5XFxuZ3J1bXBpbmVzcy9NXFxuZ3J1bXB5L1BSVFxcbmdydW5nZS9NU1xcbmdydW5neS9SVFxcbmdydW5pb24vU01cXG5ncnVudC9TR01EXFxuZ3RcXG5ndWFjYW1vbGUvTVxcbmd1YW5pbmUvTVxcbmd1YW5vL01cXG5ndWFyYW5pL01TXFxuZ3VhcmFudGVlL01EU1xcbmd1YXJhbnRlZWluZ1xcbmd1YXJhbnRvci9NU1xcbmd1YXJhbnR5L0dEU01cXG5ndWFyZC9TWkdNRFJcXG5ndWFyZGVkL1lcXG5ndWFyZGVyL01cXG5ndWFyZGhvdXNlL1NNXFxuZ3VhcmRpYW4vU01cXG5ndWFyZGlhbnNoaXAvTVxcbmd1YXJkcmFpbC9TTVxcbmd1YXJkcm9vbS9TTVxcbmd1YXJkc21hbi9NXFxuZ3VhcmRzbWVuXFxuZ3VhdmEvU01cXG5ndWJlcm5hdG9yaWFsXFxuZ3VlcnJpbGxhL1NNXFxuZ3Vlc3MvWkdCTURSU1xcbmd1ZXNzZXIvTVxcbmd1ZXNzdGltYXRlL0RTTUdcXG5ndWVzc3dvcmsvTVxcbmd1ZXN0L1NHTURcXG5ndWVzdGJvb2svU01cXG5ndWVzdGhvdXNlL1NcXG5ndWVzdHJvb20vU1xcbmd1ZmYvTVxcbmd1ZmZhdy9NREdTXFxuZ3VpZGFuY2UvTVxcbmd1aWRlL0RSU01aR1xcbmd1aWRlYm9vay9TTVxcbmd1aWRlZC9VXFxuZ3VpZGVsaW5lL1NNXFxuZ3VpZGVwb3N0L1NNXFxuZ3VpZGVyL01cXG5ndWlsZC9TWk1SXFxuZ3VpbGRlci9NXFxuZ3VpbGRoYWxsL01TXFxuZ3VpbGUvTVxcbmd1aWxlZnVsXFxuZ3VpbGVsZXNzL1lQXFxuZ3VpbGVsZXNzbmVzcy9NXFxuZ3VpbGxlbW90L1NcXG5ndWlsbG90aW5lL0RTTUdcXG5ndWlsdC9NXFxuZ3VpbHRpbHlcXG5ndWlsdGluZXNzL01cXG5ndWlsdGxlc3NcXG5ndWlsdHkvUFJUXFxuZ3VpbmVhL01TXFxuZ3Vpc2UvRVNNXFxuZ3VpdGFyL01TXFxuZ3VpdGFyaXN0L1NNXFxuZ3VsYWcvU01cXG5ndWxjaC9NU1xcbmd1bGRlbi9NU1xcbmd1bGYvTVNcXG5ndWxsL01EU0dcXG5ndWxsZXQvTVNcXG5ndWxsaWJpbGl0eS9NXFxuZ3VsbGlibGVcXG5ndWxseS9TTVxcbmd1bHAvTURSU1pHXFxuZ3VscGVyL01cXG5ndW0vU01cXG5ndW1iYWxsL1NcXG5ndW1iby9TTVxcbmd1bWJvaWwvU01cXG5ndW1ib290L1NcXG5ndW1kcm9wL1NNXFxuZ3VtbWVkXFxuZ3VtbWluZ1xcbmd1bW15L1RSXFxuZ3VtcHRpb24vTVxcbmd1bXNob2UvTURTXFxuZ3Vtc2hvZWluZ1xcbmd1bi9TTVxcbmd1bmJvYXQvU01cXG5ndW5maWdodC9NUlpTXFxuZ3VuZmlnaHRlci9NXFxuZ3VuZmlyZS9NXFxuZ3VuZ2VcXG5ndW5neVxcbmd1bmsvTVxcbmd1bmt5XFxuZ3VubWFuL01cXG5ndW5tZW5cXG5ndW5tZXRhbC9NXFxuZ3VubmVkXFxuZ3VubmVsL01TXFxuZ3VubmVyL01TXFxuZ3VubmVyeS9NXFxuZ3VubmluZ1xcbmd1bm55L01cXG5ndW5ueXNhY2svTVNcXG5ndW5wb2ludC9NXFxuZ3VucG93ZGVyL01cXG5ndW5ydW5uZXIvTVNcXG5ndW5ydW5uaW5nL01cXG5ndW5zaGlwL01TXFxuZ3Vuc2hvdC9NU1xcbmd1bnNsaW5nZXIvU01cXG5ndW5zbWl0aC9NXFxuZ3Vuc21pdGhzXFxuZ3Vud2FsZS9NU1xcbmd1cHB5L1NNXFxuZ3VyZ2xlL01HRFNcXG5ndXJuZXkvTVNcXG5ndXJ1L01TXFxuZ3VzaC9NRFJTWkdcXG5ndXNoZXIvTVxcbmd1c2hpbmcvWVxcbmd1c2h5L1RSXFxuZ3Vzc2V0L01TREdcXG5ndXNzeS9EU0dcXG5ndXN0L0VNRFNHXFxuZ3VzdGF0b3J5XFxuZ3VzdGlseVxcbmd1c3RvL01cXG5ndXN0eS9SVFxcbmd1dC9TTVxcbmd1dGxlc3MvUFxcbmd1dGxlc3NuZXNzL01cXG5ndXRzeS9SVFxcbmd1dHRlZFxcbmd1dHRlci9TTURHXFxuZ3V0dGVyc25pcGUvTVNcXG5ndXR0aW5nXFxuZ3V0dHVyYWwvTVNcXG5ndXR0eS9SVFxcbmd1di9TXFxuZ3V2bm9yL1NcXG5ndXkvU0dNRFxcbmd1enpsZS9EUlNaR1xcbmd1enpsZXIvTVxcbmd5bS9TTVxcbmd5bWtoYW5hL01TXFxuZ3ltbmFzaXVtL01TXFxuZ3ltbmFzdC9NU1xcbmd5bW5hc3RpYy9TXFxuZ3ltbmFzdGljYWxseVxcbmd5bW5hc3RpY3MvTVxcbmd5bW5vc3Blcm0vU01cXG5neW1zbGlwL1NcXG5neW5lY29sb2dpY1xcbmd5bmVjb2xvZ2ljYWxcXG5neW5lY29sb2dpc3QvU01cXG5neW5lY29sb2d5L01cXG5neXAvU01cXG5neXBwZWRcXG5neXBwZXIvU01cXG5neXBwaW5nXFxuZ3lwc3Rlci9TTVxcbmd5cHN1bS9NXFxuZ3lwc3kvU01cXG5neXJhdGUvRFNHTlhcXG5neXJhdGlvbi9NXFxuZ3lyYXRvci9TTVxcbmd5cmZhbGNvbi9NU1xcbmd5cm8vTVNcXG5neXJvc2NvcGUvTVNcXG5neXJvc2NvcGljXFxuZ3l2ZS9NR0RTXFxuaCdtXFxuaC9OUlNYWkdWSlxcbmhhL1NIXFxuaGFiZXJkYXNoZXIvU01cXG5oYWJlcmRhc2hlcnkvU01cXG5oYWJpbGltZW50L1NNXFxuaGFiaXQnc1xcbmhhYml0L0lTQlxcbmhhYml0YWJpbGl0eS9NXFxuaGFiaXRhdC9TTVxcbmhhYml0YXRpb24vTVNcXG5oYWJpdHVhbC9ZUFxcbmhhYml0dWFsbmVzcy9NXFxuaGFiaXR1YXRlL0dORFNcXG5oYWJpdHVhdGlvbi9NXFxuaGFiaXR1ZS9TTVxcbmhhY2llbmRhL1NNXFxuaGFjay9NRFJaR1NcXG5oYWNrZXIvTVxcbmhhY2tpbmcvTVxcbmhhY2tpc2hcXG5oYWNrbGUvTVNcXG5oYWNrbmV5L1NNREdcXG5oYWNrc2F3L1NNXFxuaGFja3RpdmlzdC9NU1xcbmhhY2t3b3JrL01cXG5oYWRcXG5oYWRkb2NrL1NNXFxuaGFkaXRoXFxuaGFkbid0XFxuaGFkc3RcXG5oYWZuaXVtL01cXG5oYWZ0L01TXFxuaGFnL1NNXFxuaGFnZ2FyZC9ZUFxcbmhhZ2dhcmRuZXNzL01cXG5oYWdnaXMvTVNcXG5oYWdnaXNoXFxuaGFnZ2xlL01aR0RSU1xcbmhhZ2dsZXIvTVxcbmhhZ2lvZ3JhcGhlci9TTVxcbmhhZ2lvZ3JhcGh5L1NNXFxuaGFobml1bS9NXFxuaGFpa3UvTVxcbmhhaWwvTURHU1xcbmhhaWxzdG9uZS9NU1xcbmhhaWxzdG9ybS9NU1xcbmhhaXIvTURTXFxuaGFpcmJhbGwvTVNcXG5oYWlyYmFuZC9TXFxuaGFpcmJyZWFkdGgvTVxcbmhhaXJicmVhZHRoc1xcbmhhaXJicnVzaC9NU1xcbmhhaXJjbG90aC9NXFxuaGFpcmN1dC9TTVxcbmhhaXJkby9NU1xcbmhhaXJkcmVzc2VyL1NNXFxuaGFpcmRyZXNzaW5nL01cXG5oYWlyZHJ5ZXIvTVNcXG5oYWlyZ3JpcC9TXFxuaGFpcmluZXNzL01cXG5oYWlybGVzc1xcbmhhaXJsaWtlXFxuaGFpcmxpbmUvU01cXG5oYWlybmV0L1NNXFxuaGFpcnBpZWNlL01TXFxuaGFpcnBpbi9TTVxcbmhhaXJzYnJlYWR0aC9NXFxuaGFpcnNicmVhZHRoc1xcbmhhaXJzcGxpdHRlci9TTVxcbmhhaXJzcGxpdHRpbmcvTVxcbmhhaXJzcHJheS9TXFxuaGFpcnNwcmluZy9NU1xcbmhhaXJzdHlsZS9NU1xcbmhhaXJzdHlsaXN0L1NNXFxuaGFpcnkvVFJQXFxuaGFqXFxuaGFqai9NXFxuaGFqamVzXFxuaGFqamkvU01cXG5oYWtlL01TXFxuaGFsYWwvTVxcbmhhbGJlcmQvU01cXG5oYWxjeW9uXFxuaGFsZS9JVEdEUlNcXG5oYWxmL01cXG5oYWxmYmFjay9TTVxcbmhhbGZoZWFydGVkL1BZXFxuaGFsZmhlYXJ0ZWRuZXNzL01cXG5oYWxmcGVuY2VcXG5oYWxmcGVubnkvU01cXG5oYWxmdGltZS9NU1xcbmhhbGZ0b25lL01TXFxuaGFsZndheVxcbmhhbGZ3aXQvU01cXG5oYWxpYnV0L1NNXFxuaGFsaXRlL01cXG5oYWxpdG9zaXMvTVxcbmhhbGwvTVNcXG5oYWxsZWx1amFoL01cXG5oYWxsZWx1amFoc1xcbmhhbGxtYXJrL0dNRFNcXG5oYWxsb28vTVNHXFxuaGFsbG93L0RTR1xcbmhhbGxvd2VkL1VcXG5oYWxsdWNpbmF0ZS9HTlhEU1xcbmhhbGx1Y2luYXRpb24vTVxcbmhhbGx1Y2luYXRvcnlcXG5oYWxsdWNpbm9nZW4vU01cXG5oYWxsdWNpbm9nZW5pYy9TTVxcbmhhbGx3YXkvU01cXG5oYWxvL01ER1NcXG5oYWxvZ2VuL1NNXFxuaGFsb25cXG5oYWx0L01EUlpHU1xcbmhhbHRlci9HTURcXG5oYWx0ZXJuZWNrL1NcXG5oYWx0aW5nL1lcXG5oYWx2ZS9EU0dcXG5oYWx5YXJkL01TXFxuaGFtL1NNXFxuaGFtYnVyZy9TWk1SXFxuaGFtYnVyZ2VyL01cXG5oYW1sZXQvTVNcXG5oYW1tZWRcXG5oYW1tZXIvTURSU0paR1xcbmhhbW1lcmVyL01cXG5oYW1tZXJoZWFkL1NNXFxuaGFtbWVybG9jay9TTVxcbmhhbW1lcnRvZS9NU1xcbmhhbW1pbmdcXG5oYW1tb2NrL1NNXFxuaGFtbXkvVFJcXG5oYW1wZXIvR01EU1xcbmhhbXBlcmVkL1VcXG5oYW1zdGVyL01TXFxuaGFtc3RyaW5nL0dTTVxcbmhhbXN0cnVuZ1xcbmhhbmQnc1xcbmhhbmQvVURHU1xcbmhhbmRiYWcvU01cXG5oYW5kYmFsbC9NU1xcbmhhbmRiYXJyb3cvU01cXG5oYW5kYmlsbC9NU1xcbmhhbmRib29rL01TXFxuaGFuZGJyYWtlL1NcXG5oYW5kY2FyL1NNXFxuaGFuZGNhcnQvTVNcXG5oYW5kY2xhc3AvTVNcXG5oYW5kY3JhZnQvU01ER1xcbmhhbmRjdWZmL01ER1NcXG5oYW5kZWQvUFxcbmhhbmRmdWwvU01cXG5oYW5kZ3VuL1NNXFxuaGFuZGhlbGQvTVNcXG5oYW5kaG9sZC9NU1xcbmhhbmRpY2FwL01TXFxuaGFuZGljYXBwZWRcXG5oYW5kaWNhcHBlci9NU1xcbmhhbmRpY2FwcGluZ1xcbmhhbmRpY3JhZnQvTVNcXG5oYW5kaWx5XFxuaGFuZGluZXNzL01cXG5oYW5kaXdvcmsvTVxcbmhhbmRrZXJjaGllZi9NU1xcbmhhbmRsZS9NWkdEUlNcXG5oYW5kbGViYXIvTVNcXG5oYW5kbGVyL01cXG5oYW5kbWFkZVxcbmhhbmRtYWlkL1hNTlNcXG5oYW5kbWFpZGVuL01cXG5oYW5kb3V0L1NNXFxuaGFuZG92ZXIvU1xcbmhhbmRwaWNrL0dEU1xcbmhhbmRyYWlsL01TXFxuaGFuZHNhdy9TTVxcbmhhbmRzZXQvU01cXG5oYW5kc2hha2UvSk1HU1xcbmhhbmRzb21lL1BZVFJcXG5oYW5kc29tZW5lc3MvTVxcbmhhbmRzcHJpbmcvTVNcXG5oYW5kc3RhbmQvU01cXG5oYW5kd29yay9NXFxuaGFuZHdvdmVuXFxuaGFuZHdyaXRpbmcvTVxcbmhhbmR3cml0dGVuXFxuaGFuZHkvVVRSXFxuaGFuZHltYW4vTVxcbmhhbmR5bWVuXFxuaGFuZy9NRFJKWkdTXFxuaGFuZ2FyL01TXFxuaGFuZ2RvZ1xcbmhhbmdlci9NXFxuaGFuZ2luZy9NXFxuaGFuZ21hbi9NXFxuaGFuZ21lblxcbmhhbmduYWlsL01TXFxuaGFuZ291dC9TTVxcbmhhbmdvdmVyL01TXFxuaGFuZ3VwL01TXFxuaGFuay9NUlpTXFxuaGFua2VyL0dKRFxcbmhhbmtlcmluZy9NXFxuaGFua2llL01TXFxuaGFuc29tL01TXFxuaGFwL01ZXFxuaGFwaGF6YXJkL1lQXFxuaGFwaGF6YXJkbmVzcy9NXFxuaGFwbGVzcy9ZUFxcbmhhcGxlc3NuZXNzL01cXG5oYXBsb2lkL01TXFxuaGFwcGVuL1NER0pcXG5oYXBwZW5pbmcvTVxcbmhhcHBlbnN0YW5jZS9TTVxcbmhhcHBpbHkvVVxcbmhhcHBpbmVzcy9VTVxcbmhhcHB5L1VSVFBcXG5oYXB0aWNcXG5oYXJhbmd1ZS9NR0RTXFxuaGFyYXNzL0xaR0RSU1xcbmhhcmFzc2VyL01cXG5oYXJhc3NtZW50L01cXG5oYXJiaW5nZXIvU01cXG5oYXJib3IvR01EU1xcbmhhcmJvcm1hc3Rlci9TXFxuaGFyZC9OUllYVFBcXG5oYXJkYmFjay9NU1xcbmhhcmRiYWxsL01cXG5oYXJkYm9hcmQvTVxcbmhhcmRib3VuZFxcbmhhcmRjb3JlXFxuaGFyZGNvdmVyL1NNXFxuaGFyZGVuL1pHRFJcXG5oYXJkZW5lZC9VXFxuaGFyZGVuZXIvTVxcbmhhcmRoYXQvTVNcXG5oYXJkaGVhZGVkL1BZXFxuaGFyZGhlYWRlZG5lc3MvTVxcbmhhcmRoZWFydGVkL1BZXFxuaGFyZGhlYXJ0ZWRuZXNzL01cXG5oYXJkaWhvb2QvTVxcbmhhcmRpbHlcXG5oYXJkaW5lc3MvTVxcbmhhcmRsaW5lci9NU1xcbmhhcmRuZXNzL01cXG5oYXJkc2NyYWJibGVcXG5oYXJkc2hpcC9TTVxcbmhhcmRzdGFuZC9TTVxcbmhhcmR0YWNrL01cXG5oYXJkdG9wL1NNXFxuaGFyZHdhcmUvTVxcbmhhcmR3aXJlZFxcbmhhcmR3b29kL1NNXFxuaGFyZHdvcmtpbmdcXG5oYXJkeS9QVFJcXG5oYXJlL01HRFNcXG5oYXJlYmVsbC9NU1xcbmhhcmVicmFpbmVkXFxuaGFyZWxpcC9TTVxcbmhhcmVsaXBwZWRcXG5oYXJlbS9TTVxcbmhhcmljb3QvU1xcbmhhcmsvREdTXFxuaGFybGVxdWluL1NNXFxuaGFybG90L1NNXFxuaGFybG90cnkvTVxcbmhhcm0vTURHU1xcbmhhcm1lZC9VXFxuaGFybWZ1bC9ZUFxcbmhhcm1mdWxuZXNzL01cXG5oYXJtbGVzcy9QWVxcbmhhcm1sZXNzbmVzcy9NXFxuaGFybW9uaWMvU01cXG5oYXJtb25pY2EvTVNcXG5oYXJtb25pY2FsbHlcXG5oYXJtb25pZXNcXG5oYXJtb25pb3VzL1BZXFxuaGFybW9uaW91c25lc3MvTVxcbmhhcm1vbml1bS9NU1xcbmhhcm1vbml6YXRpb24vTVxcbmhhcm1vbml6ZS9aR0RSU1xcbmhhcm1vbml6ZXIvTVxcbmhhcm1vbnkvRU1cXG5oYXJuZXNzJ3NcXG5oYXJuZXNzL1VEU0dcXG5oYXJwL01ER1NcXG5oYXJwaXN0L1NNXFxuaGFycG9vbi9aR1NNRFJcXG5oYXJwb29uZXIvTVxcbmhhcnBzaWNob3JkL01TXFxuaGFycHNpY2hvcmRpc3QvU01cXG5oYXJweS9TTVxcbmhhcnJpZGFuL01TXFxuaGFycmllci9NXFxuaGFycm93L1NNREdcXG5oYXJydW1waC9HRFxcbmhhcnJ1bXBoc1xcbmhhcnJ5L0RSU1pHXFxuaGFyc2gvUllUUFxcbmhhcnNobmVzcy9NXFxuaGFydC9NU1xcbmhhcnZlc3QvU01EUlpHXFxuaGFydmVzdGVkL1VcXG5oYXJ2ZXN0ZXIvTVxcbmhhc2gvQU1EU0dcXG5oYXNoaXNoL01cXG5oYXNodGFnL1NNXFxuaGFzbid0XFxuaGFzcC9NU1xcbmhhc3NsZS9EU01HXFxuaGFzc29jay9TTVxcbmhhc3QvRE5YR1xcbmhhc3RlL1NNXFxuaGFzdGVuL0RHXFxuaGFzdGlseVxcbmhhc3RpbmVzcy9NXFxuaGFzdHkvUlRQXFxuaGF0L1pHU01EUlxcbmhhdGJhbmQvU1xcbmhhdGJveC9NU1xcbmhhdGNoL01EU0dcXG5oYXRjaGJhY2svTVNcXG5oYXRjaGVjay9TTVxcbmhhdGNoZWQvVVxcbmhhdGNoZXJ5L1NNXFxuaGF0Y2hldC9TTVxcbmhhdGNoaW5nL01cXG5oYXRjaHdheS9TTVxcbmhhdGUvTVNcXG5oYXRlZnVsL1BZXFxuaGF0ZWZ1bG5lc3MvTVxcbmhhdGVtb25nZXIvTVNcXG5oYXRlci9NXFxuaGF0cGluL1NcXG5oYXRyZWQvU01cXG5oYXRzdGFuZC9TXFxuaGF0dGVkXFxuaGF0dGVyL1NNXFxuaGF0dGluZ1xcbmhhdWJlcmsvU01cXG5oYXVnaHRpbHlcXG5oYXVnaHRpbmVzcy9NXFxuaGF1Z2h0eS9QUlRcXG5oYXVsL01EUlpHU1xcbmhhdWxhZ2UvTVxcbmhhdWxlci9NXFxuaGF1bGllci9TXFxuaGF1bmNoL01TXFxuaGF1bnQvU01EUlpHXFxuaGF1bnRlci9NXFxuaGF1bnRpbmcvWVxcbmhhdXRldXIvTVxcbmhhdmUvTUdTXFxuaGF2ZW4ndFxcbmhhdmVuL1NNXFxuaGF2ZXJzYWNrL1NNXFxuaGF2b2MvTVxcbmhhdy9HU01EXFxuaGF3ay9NRFJaR1NcXG5oYXdrZXIvTVxcbmhhd2tpc2gvUFxcbmhhd2tpc2huZXNzL01cXG5oYXdzZXIvU01cXG5oYXd0aG9ybi9NU1xcbmhheS9HU01EXFxuaGF5Y29jay9TTVxcbmhheWxvZnQvU01cXG5oYXltYWtlci9TXFxuaGF5bWFraW5nXFxuaGF5bW93L1NNXFxuaGF5cmljay9NU1xcbmhheXJpZGUvTVNcXG5oYXlzZWVkL01TXFxuaGF5c3RhY2svU01cXG5oYXl3aXJlXFxuaGF6YXJkL1NNREdcXG5oYXphcmRvdXMvWVxcbmhhemUvTVpHSkRSU1xcbmhhemVsL1NNXFxuaGF6ZWxudXQvTVNcXG5oYXplci9NXFxuaGF6aWx5XFxuaGF6aW5lc3MvTVxcbmhhemluZy9NXFxuaGF6bWF0XFxuaGF6eS9SVFBcXG5oZHFyc1xcbmhlJ2RcXG5oZSdsbFxcbmhlL01cXG5oZWFkL01EUlpHSlNcXG5oZWFkYWNoZS9NU1xcbmhlYWRiYW5kL01TXFxuaGVhZGJhbmdlci9TXFxuaGVhZGJhbmdpbmdcXG5oZWFkYm9hcmQvU01cXG5oZWFkYnV0dC9EU0dcXG5oZWFkY2FzZS9TXFxuaGVhZGNoZWVzZVxcbmhlYWRjb3VudC9TXFxuaGVhZGRyZXNzL01TXFxuaGVhZGVyL01cXG5oZWFkZmlyc3RcXG5oZWFkZ2Vhci9NXFxuaGVhZGh1bnQvRFJTWkdcXG5oZWFkaHVudGVyL01cXG5oZWFkaHVudGluZy9NXFxuaGVhZGlseVxcbmhlYWRpbmVzcy9NXFxuaGVhZGluZy9NXFxuaGVhZGxhbXAvTVNcXG5oZWFkbGFuZC9NU1xcbmhlYWRsZXNzXFxuaGVhZGxpZ2h0L01TXFxuaGVhZGxpbmUvTVpHRFJTXFxuaGVhZGxpbmVyL01cXG5oZWFkbG9jay9NU1xcbmhlYWRsb25nXFxuaGVhZG1hbi9NXFxuaGVhZG1hc3Rlci9TTVxcbmhlYWRtZW5cXG5oZWFkbWlzdHJlc3MvTVNcXG5oZWFkcGhvbmUvTVNcXG5oZWFkcGllY2UvTVNcXG5oZWFkcGluL1NNXFxuaGVhZHF1YXJ0ZXIvU0RHXFxuaGVhZHF1YXJ0ZXJzL01cXG5oZWFkcmVzdC9NU1xcbmhlYWRyb29tL01cXG5oZWFkc2NhcmZcXG5oZWFkc2NhcnZlc1xcbmhlYWRzZXQvU01cXG5oZWFkc2hpcC9TTVxcbmhlYWRzaHJpbmtlci9TTVxcbmhlYWRzbWFuL01cXG5oZWFkc21lblxcbmhlYWRzdGFsbC9TTVxcbmhlYWRzdGFuZC9TTVxcbmhlYWRzdG9uZS9TTVxcbmhlYWRzdHJvbmdcXG5oZWFkdGVhY2hlci9TXFxuaGVhZHdhaXRlci9TTVxcbmhlYWR3YXRlcnMvTVxcbmhlYWR3YXkvTVxcbmhlYWR3aW5kL1NNXFxuaGVhZHdvcmQvU01cXG5oZWFkeS9SVFBcXG5oZWFsL0RSSFpHU1xcbmhlYWxlZC9VXFxuaGVhbGVyL01cXG5oZWFsdGgvTVxcbmhlYWx0aGNhcmVcXG5oZWFsdGhmdWwvUFlcXG5oZWFsdGhmdWxuZXNzL01cXG5oZWFsdGhpbHkvVVxcbmhlYWx0aGluZXNzL1VNXFxuaGVhbHRoeS9VVFJQXFxuaGVhcC9NREdTXFxuaGVhci9BSEdKU1xcbmhlYXJkL0FVXFxuaGVhcmVyL1NNXFxuaGVhcmluZy9BTVxcbmhlYXJrZW4vU0dEXFxuaGVhcnNheS9NXFxuaGVhcnNlJ3NcXG5oZWFyc2UvQVNcXG5oZWFydC9TTVxcbmhlYXJ0YWNoZS9NU1xcbmhlYXJ0YmVhdC9NU1xcbmhlYXJ0YnJlYWsvU01HXFxuaGVhcnRicm9rZW5cXG5oZWFydGJ1cm4vTVxcbmhlYXJ0ZW4vRVNHRFxcbmhlYXJ0ZmVsdFxcbmhlYXJ0aC9NXFxuaGVhcnRocnVnL1NcXG5oZWFydGhzXFxuaGVhcnRoc3RvbmUvU01cXG5oZWFydGlseVxcbmhlYXJ0aW5lc3MvTVxcbmhlYXJ0bGFuZC9NU1xcbmhlYXJ0bGVzcy9QWVxcbmhlYXJ0bGVzc25lc3MvTVxcbmhlYXJ0cmVuZGluZy9ZXFxuaGVhcnRzaWNrL1BcXG5oZWFydHNpY2tuZXNzL01cXG5oZWFydHN0cmluZ3MvTVxcbmhlYXJ0dGhyb2IvTVNcXG5oZWFydHdhcm1pbmdcXG5oZWFydHdvb2QvTVxcbmhlYXJ0eS9SU01QVFxcbmhlYXQnc1xcbmhlYXQvQURHU1xcbmhlYXRlZC9VXFxuaGVhdGVkbHlcXG5oZWF0ZXIvU01cXG5oZWF0aC9NTlJYXFxuaGVhdGhlbi9NXFxuaGVhdGhlbmRvbS9NXFxuaGVhdGhlbmlzaFxcbmhlYXRoZW5pc20vTVxcbmhlYXRoZXIvTVxcbmhlYXRoc1xcbmhlYXRpbmcvTVxcbmhlYXRwcm9vZlxcbmhlYXRzdHJva2UvTVxcbmhlYXR3YXZlL1NcXG5oZWF2ZS9EUlNNWkdcXG5oZWF2ZW4vU01ZXFxuaGVhdmVubHkvVFJcXG5oZWF2ZW5zL01cXG5oZWF2ZW53YXJkL1NcXG5oZWF2ZXIvTVxcbmhlYXZpbHlcXG5oZWF2aW5lc3MvTVxcbmhlYXZ5L1JTTVRQXFxuaGVhdnloZWFydGVkXFxuaGVhdnlzZXRcXG5oZWF2eXdlaWdodC9NU1xcbmhlY2svTVxcbmhlY2tsZS9EUlNNWkdcXG5oZWNrbGVyL01cXG5oZWNrbGluZy9NXFxuaGVjdGFyZS9TTVxcbmhlY3RpY1xcbmhlY3RpY2FsbHlcXG5oZWN0b2dyYW0vU01cXG5oZWN0b21ldGVyL01TXFxuaGVjdG9yL1NNREdcXG5oZWRnZS9EUlNNWkdcXG5oZWRnZWhvZy9NU1xcbmhlZGdlaG9wL1NcXG5oZWRnZWhvcHBlZFxcbmhlZGdlaG9wcGluZ1xcbmhlZGdlci9NXFxuaGVkZ2Vyb3cvU01cXG5oZWRvbmlzbS9NXFxuaGVkb25pc3QvTVNcXG5oZWRvbmlzdGljXFxuaGVlZC9NREdTXFxuaGVlZGVkL1VcXG5oZWVkZnVsL1lcXG5oZWVkbGVzcy9QWVxcbmhlZWRsZXNzbmVzcy9NXFxuaGVlaGF3L1NNREdcXG5oZWVsL01ER1NcXG5oZWVsbGVzc1xcbmhlZnQvTURHU1xcbmhlZnRpbHlcXG5oZWZ0aW5lc3MvTVxcbmhlZnR5L1BSVFxcbmhlZ2Vtb25pY1xcbmhlZ2Vtb255L01cXG5oZWdpcmEvU01cXG5oZWlmZXIvU01cXG5oZWlnaHQvWFNNTlxcbmhlaWdodGVuL0RHXFxuaGVpbm91cy9ZUFxcbmhlaW5vdXNuZXNzL01cXG5oZWlyL01TXFxuaGVpcmVzcy9NU1xcbmhlaXJsb29tL1NNXFxuaGVpc3QvU01ER1xcbmhlbGRcXG5oZWxpY2FsXFxuaGVsaWNlc1xcbmhlbGljb3B0ZXIvU0dNRFxcbmhlbGlvY2VudHJpY1xcbmhlbGlvdHJvcGUvU01cXG5oZWxpcGFkL1NcXG5oZWxpcG9ydC9NU1xcbmhlbGl1bS9NXFxuaGVsaXgvTVxcbmhlbGwvTVxcbmhlbGxiZW50XFxuaGVsbGNhdC9NU1xcbmhlbGxlYm9yZS9NXFxuaGVsbGZpcmVcXG5oZWxsaG9sZS9NU1xcbmhlbGxpb24vTVNcXG5oZWxsaXNoL1lQXFxuaGVsbGlzaG5lc3MvTVxcbmhlbGxvL1NNXFxuaGVsbHV2YVxcbmhlbG0vTVNcXG5oZWxtZXQvU01EXFxuaGVsbXNtYW4vTVxcbmhlbG1zbWVuXFxuaGVsb3QvU01cXG5oZWxwL01EUlpHU0pcXG5oZWxwZXIvTVxcbmhlbHBmdWwvVVlcXG5oZWxwZnVsbmVzcy9NXFxuaGVscGluZy9NXFxuaGVscGxlc3MvUFlcXG5oZWxwbGVzc25lc3MvTVxcbmhlbHBsaW5lL1NNXFxuaGVscG1hdGUvU01cXG5oZWx2ZS9TTVxcbmhlbS9TTVxcbmhlbWF0aXRlL01cXG5oZW1hdG9sb2dpY1xcbmhlbWF0b2xvZ2ljYWxcXG5oZW1hdG9sb2dpc3QvTVNcXG5oZW1hdG9sb2d5L01cXG5oZW1lL01cXG5oZW1pcGxlZ2lhXFxuaGVtaXNwaGVyZS9TTVxcbmhlbWlzcGhlcmljXFxuaGVtaXNwaGVyaWNhbFxcbmhlbWxpbmUvU01cXG5oZW1sb2NrL1NNXFxuaGVtbWVkXFxuaGVtbWVyL1NNXFxuaGVtbWluZ1xcbmhlbW9nbG9iaW4vTVxcbmhlbW9waGlsaWEvTVxcbmhlbW9waGlsaWFjL01TXFxuaGVtb3JyaGFnZS9NR0RTXFxuaGVtb3JyaGFnaWNcXG5oZW1vcnJob2lkL01TXFxuaGVtb3N0YXQvTVNcXG5oZW1wL01OXFxuaGVtc3RpdGNoL01EU0dcXG5oZW4vTVxcbmhlbmNlXFxuaGVuY2Vmb3J0aFxcbmhlbmNlZm9yd2FyZFxcbmhlbmNobWFuL01cXG5oZW5jaG1lblxcbmhlbm5hL1NNREdcXG5oZW5wZWNrL0dTRFxcbmhlcFxcbmhlcGFyaW4vTVxcbmhlcGF0aWNcXG5oZXBhdGl0aXMvTVxcbmhlcGF0b2N5dGUvU1xcbmhlcHBlclxcbmhlcHBlc3RcXG5oZXB0YWdvbi9NU1xcbmhlcHRhZ29uYWxcXG5oZXB0YXRobG9uL1NNXFxuaGVyYWxkL1NNREdcXG5oZXJhbGRlZC9VXFxuaGVyYWxkaWNcXG5oZXJhbGRyeS9NXFxuaGVyYi9NU1xcbmhlcmJhY2VvdXNcXG5oZXJiYWdlL01cXG5oZXJiYWwvU1xcbmhlcmJhbGlzdC9NU1xcbmhlcmJpY2lkYWxcXG5oZXJiaWNpZGUvTVNcXG5oZXJiaXZvcmUvU01cXG5oZXJiaXZvcm91c1xcbmhlcmN1bGVhblxcbmhlcmQvTURSWkdTXFxuaGVyZGVyL01cXG5oZXJkc21hbi9NXFxuaGVyZHNtZW5cXG5oZXJlL01cXG5oZXJlYWJvdXQvU1xcbmhlcmVhZnRlci9TTVxcbmhlcmVieVxcbmhlcmVkaXRhcnlcXG5oZXJlZGl0eS9NXFxuaGVyZWluXFxuaGVyZWluYWZ0ZXJcXG5oZXJlb2ZcXG5oZXJlb25cXG5oZXJlc3kvU01cXG5oZXJldGljL1NNXFxuaGVyZXRpY2FsXFxuaGVyZXRvXFxuaGVyZXRvZm9yZVxcbmhlcmV1bmRlclxcbmhlcmV1bnRvXFxuaGVyZXVwb25cXG5oZXJld2l0aFxcbmhlcml0YWJsZS9JXFxuaGVyaXRhZ2UvTVNcXG5oZXJtYXBocm9kaXRlL1NNXFxuaGVybWFwaHJvZGl0aWNcXG5oZXJtZXRpY1xcbmhlcm1ldGljYWwvWVxcbmhlcm1pdC9TTVxcbmhlcm1pdGFnZS9NU1xcbmhlcm1pdGlhblxcbmhlcm5pYS9TTVxcbmhlcm5pYWxcXG5oZXJuaWF0ZS9HTkRTXFxuaGVybmlhdGlvbi9NXFxuaGVyby9NXFxuaGVyb2VzXFxuaGVyb2ljL1NcXG5oZXJvaWNhbGx5XFxuaGVyb2ljcy9NXFxuaGVyb2luL1NNXFxuaGVyb2luZS9TTVxcbmhlcm9pc20vTVxcbmhlcm9uL1NNXFxuaGVycGVzL01cXG5oZXJwZXRvbG9naXN0L1NNXFxuaGVycGV0b2xvZ3kvTVxcbmhlcnJpbmcvTVNcXG5oZXJyaW5nYm9uZS9NXFxuaGVyc2VsZlxcbmhlcnR6L01cXG5oZXNpdGFuY2UvTVxcbmhlc2l0YW5jeS9NXFxuaGVzaXRhbnQvWVxcbmhlc2l0YXRlL0RTR05YXFxuaGVzaXRhdGluZy9VWVxcbmhlc2l0YXRpb24vTVxcbmhlc3NpYW5cXG5oZXRlcm8vU01cXG5oZXRlcm9kb3hcXG5oZXRlcm9kb3h5L01cXG5oZXRlcm9nZW5laXR5L01cXG5oZXRlcm9nZW5lb3VzL1lcXG5oZXRlcm9zZXh1YWwvTVlTXFxuaGV0ZXJvc2V4dWFsaXR5L01cXG5oZXVyaXN0aWMvTVNcXG5oZXVyaXN0aWNhbGx5XFxuaGV1cmlzdGljcy9NXFxuaGV3L1pHU0RSXFxuaGV3ZXIvTVxcbmhleC9HTURTXFxuaGV4YWRlY2ltYWwvU1xcbmhleGFnb24vTVNcXG5oZXhhZ29uYWxcXG5oZXhhZ3JhbS9TTVxcbmhleGFtZXRlci9TTVxcbmhleVxcbmhleWRheS9TTVxcbmhmXFxuaGd0XFxuaGd3eVxcbmhpL1NEXFxuaGlhdHVzL01TXFxuaGliYWNoaS9NU1xcbmhpYmVybmF0ZS9HTkRTXFxuaGliZXJuYXRpb24vTVxcbmhpYmVybmF0b3IvTVNcXG5oaWJpc2N1cy9NU1xcbmhpY2NvdWdoL0RHXFxuaGljY291Z2hzXFxuaGljY3VwL0dTTURcXG5oaWNrL01TXFxuaGlja2V5L1NNXFxuaGlja29yeS9TTVxcbmhpZFxcbmhpZGRlblxcbmhpZGUvTVpHSkRSU1xcbmhpZGVhd2F5L1NNXFxuaGlkZWJvdW5kXFxuaGlkZW91cy9ZUFxcbmhpZGVvdXNuZXNzL01cXG5oaWRlb3V0L01TXFxuaGlkZXIvTVxcbmhpZGluZy9NXFxuaGllL1NcXG5oaWVpbmdcXG5oaWVyYXJjaGljXFxuaGllcmFyY2hpY2FsL1lcXG5oaWVyYXJjaHkvU01cXG5oaWVyb2dseXBoL01cXG5oaWVyb2dseXBoaWMvTVNcXG5oaWVyb2dseXBoc1xcbmhpZ2gvTVJZWlRQXFxuaGlnaGJhbGwvU01cXG5oaWdoYm9yblxcbmhpZ2hib3kvTVNcXG5oaWdoYnJvdy9TTVxcbmhpZ2hjaGFpci9NU1xcbmhpZ2hmYWx1dGluXFxuaGlnaGhhbmRlZC9QWVxcbmhpZ2hoYW5kZWRuZXNzL01cXG5oaWdobGFuZC9NUlpTXFxuaGlnaGxhbmRlci9NXFxuaGlnaGxpZ2h0L1NNRFJaR1xcbmhpZ2hsaWdodGVyL01cXG5oaWdobmVzcy9NXFxuaGlnaHJvYWQvTVNcXG5oaWdoc1xcbmhpZ2h0YWlsL0RTR1xcbmhpZ2h3YXkvTVNcXG5oaWdod2F5bWFuL01cXG5oaWdod2F5bWVuXFxuaGlqYWIvU01cXG5oaWphY2svU0paR01EUlxcbmhpamFja2VyL01cXG5oaWphY2tpbmcvTVxcbmhpa2UvTVpHRFJTXFxuaGlrZXIvTVxcbmhpa2luZy9NXFxuaGlsYXJpb3VzL1BZXFxuaGlsYXJpb3VzbmVzcy9NXFxuaGlsYXJpdHkvTVxcbmhpbGwvTVNcXG5oaWxsYmlsbHkvU01cXG5oaWxsaW5lc3MvTVxcbmhpbGxvY2svTVNcXG5oaWxsc2lkZS9TTVxcbmhpbGx0b3AvTVNcXG5oaWxseS9QUlRcXG5oaWx0L01TXFxuaGltL1NcXG5oaW1zZWxmXFxuaGluZC9NUlpTXFxuaGluZGVyL0dEXFxuaGluZGVyZWQvVVxcbmhpbmRtb3N0XFxuaGluZHF1YXJ0ZXIvTVNcXG5oaW5kcmFuY2UvU01cXG5oaW5kc2lnaHQvTVxcbmhpbmdlJ3NcXG5oaW5nZS9VRFNHXFxuaGludC9NRFJaR1NcXG5oaW50ZXIvTVxcbmhpbnRlcmxhbmQvU01cXG5oaXAvU1BNXFxuaGlwYmF0aFxcbmhpcGJhdGhzXFxuaGlwYm9uZS9NU1xcbmhpcGh1Z2dlcnNcXG5oaXBuZXNzL01cXG5oaXBwZWRcXG5oaXBwZXJcXG5oaXBwZXN0XFxuaGlwcGllL1NNXFxuaGlwcGluZ1xcbmhpcHBvL1NNXFxuaGlwcG9jYW1wdXNcXG5oaXBwb2Ryb21lL1NNXFxuaGlwcG9wb3RhbXVzL01TXFxuaGlwcHlcXG5oaXBzdGVyL01TXFxuaGlyYWdhbmFcXG5oaXJlJ3NcXG5oaXJlL0FHRFNcXG5oaXJlbGluZy9NU1xcbmhpcnN1dGUvUFxcbmhpcnN1dGVuZXNzL01cXG5oaXNzL01EU0dcXG5oaXN0XFxuaGlzdGFtaW5lL01TXFxuaGlzdG9ncmFtL01TXFxuaGlzdG9sb2dpc3QvU01cXG5oaXN0b2xvZ3kvTVxcbmhpc3RvcGF0aG9sb2d5XFxuaGlzdG9yaWFuL01TXFxuaGlzdG9yaWNcXG5oaXN0b3JpY2FsL1lcXG5oaXN0b3JpY2l0eS9NXFxuaGlzdG9yaW9ncmFwaGVyL01TXFxuaGlzdG9yaW9ncmFwaHkvTVxcbmhpc3RvcnkvU01cXG5oaXN0cmlvbmljL1NcXG5oaXN0cmlvbmljYWxseVxcbmhpc3RyaW9uaWNzL01cXG5oaXQvU01cXG5oaXRjaCdzXFxuaGl0Y2gvVURTR1xcbmhpdGNoZXIvTVNcXG5oaXRjaGhpa2UvRFJTTVpHXFxuaGl0Y2hoaWtlci9NXFxuaGl0aGVyXFxuaGl0aGVydG9cXG5oaXR0ZXIvU01cXG5oaXR0aW5nXFxuaGl2ZS9NR0RTXFxuaGl2ZW1pbmQvU01cXG5oaXlhXFxuaG1tXFxuaG8vU01EUllaXFxuaG9hZ2llL01TXFxuaG9hcmQvU1pHTURSSlxcbmhvYXJkZXIvTVxcbmhvYXJkaW5nL01cXG5ob2FyZnJvc3QvTVxcbmhvYXJpbmVzcy9NXFxuaG9hcnNlL1lUUlBcXG5ob2Fyc2VuZXNzL01cXG5ob2FyeS9UUlBcXG5ob2F4L01EUlNaR1xcbmhvYXhlci9NXFxuaG9iL1NNXFxuaG9iYml0L1NcXG5ob2JibGUvTVpHRFJTXFxuaG9iYmxlci9NXFxuaG9iYnkvU01cXG5ob2JieWhvcnNlL01TXFxuaG9iYnlpc3QvU01cXG5ob2Jnb2JsaW4vTVNcXG5ob2JuYWlsL1NHTURcXG5ob2Jub2IvU1xcbmhvYm5vYmJlZFxcbmhvYm5vYmJpbmdcXG5ob2JvL01TXFxuaG9jXFxuaG9jay9NRFNHXFxuaG9ja2V5L01cXG5ob2Nrc2hvcC9NU1xcbmhvZC9TTVxcbmhvZGdlcG9kZ2UvU01cXG5ob2UvU01cXG5ob2VjYWtlL1NNXFxuaG9lZG93bi9TTVxcbmhvZWluZ1xcbmhvZXIvTVxcbmhvZy9TTVxcbmhvZ2FuL1NNXFxuaG9nYmFjay9TTVxcbmhvZ2dlZFxcbmhvZ2dpbmdcXG5ob2dnaXNoL1lcXG5ob2dzaGVhZC9TTVxcbmhvZ3RpZS9EU1xcbmhvZ3R5aW5nXFxuaG9nd2FzaC9NXFxuaG9pY2svU0dEXFxuaG9pc3QvU0dNRFxcbmhva2UvR0RTXFxuaG9rZXlcXG5ob2tpZXJcXG5ob2tpZXN0XFxuaG9rdW0vTVxcbmhvbGQvTVJKU1pHXFxuaG9sZGFsbC9TXFxuaG9sZGVyL01cXG5ob2xkaW5nL01cXG5ob2xkb3V0L1NNXFxuaG9sZG92ZXIvU01cXG5ob2xkdXAvTVNcXG5ob2xlL01HRFNcXG5ob2xleVxcbmhvbGlkYXkvU01ER1xcbmhvbGlkYXltYWtlci9TXFxuaG9saW5lc3MvVU1cXG5ob2xpc21cXG5ob2xpc3RpY1xcbmhvbGlzdGljYWxseVxcbmhvbGxlci9NREdTXFxuaG9sbG93L01EUllQU1RHXFxuaG9sbG93bmVzcy9NXFxuaG9sbHkvU01cXG5ob2xseWhvY2svTVNcXG5ob2xtaXVtL01cXG5ob2xvY2F1c3QvU01cXG5ob2xvZ3JhbS9NU1xcbmhvbG9ncmFwaC9NXFxuaG9sb2dyYXBoaWNcXG5ob2xvZ3JhcGhzXFxuaG9sb2dyYXBoeS9NXFxuaG9sc1xcbmhvbHN0ZXIvU01ER1xcbmhvbHkvVVJQVFxcbmhvbWFnZS9NU1xcbmhvbWJyZS9NU1xcbmhvbWJ1cmcvU01cXG5ob21lL01ZWkdEUlNcXG5ob21lYm9keS9TTVxcbmhvbWVib3kvU01cXG5ob21lY29taW5nL1NNXFxuaG9tZWdyb3duXFxuaG9tZWxhbmQvTVNcXG5ob21lbGVzcy9NUFxcbmhvbWVsZXNzbmVzcy9NXFxuaG9tZWxpa2VcXG5ob21lbGluZXNzL01cXG5ob21lbHkvUFJUXFxuaG9tZW1hZGVcXG5ob21lbWFrZXIvU01cXG5ob21lbWFraW5nL01cXG5ob21lb3BhdGgvTVxcbmhvbWVvcGF0aGljXFxuaG9tZW9wYXRoc1xcbmhvbWVvcGF0aHkvTVxcbmhvbWVvc3Rhc2lzL01cXG5ob21lb3N0YXRpY1xcbmhvbWVvd25lci9NU1xcbmhvbWVwYWdlL01TXFxuaG9tZXIvR01EXFxuaG9tZXJvb20vTVNcXG5ob21lc2Nob29saW5nL01cXG5ob21lc2ljay9QXFxuaG9tZXNpY2tuZXNzL01cXG5ob21lc3B1bi9NXFxuaG9tZXN0ZWFkL1NNRFJaR1xcbmhvbWVzdGVhZGVyL01cXG5ob21lc3RyZXRjaC9NU1xcbmhvbWV0b3duL01TXFxuaG9tZXdhcmQvU1xcbmhvbWV3b3JrL01SWkdcXG5ob21ld3JlY2tlci9TTVxcbmhvbWV5L1NNUFxcbmhvbWV5bmVzcy9NXFxuaG9taWNpZGFsXFxuaG9taWNpZGUvTVNcXG5ob21pZXJcXG5ob21pZXN0XFxuaG9taWxldGljXFxuaG9taWx5L1NNXFxuaG9taW5pZC9TTVxcbmhvbWlub2lkL1NcXG5ob21pbnkvTVxcbmhvbW8vTVNcXG5ob21vZXJvdGljXFxuaG9tb2dlbmVpdHkvTVxcbmhvbW9nZW5lb3VzL1lcXG5ob21vZ2VuaXphdGlvbi9NXFxuaG9tb2dlbml6ZS9EU0dcXG5ob21vZ3JhcGgvTVxcbmhvbW9ncmFwaHNcXG5ob21vbG9nb3VzXFxuaG9tb2xvZ3lcXG5ob21vbnltL1NNXFxuaG9tb3Bob2JpYS9NXFxuaG9tb3Bob2JpY1xcbmhvbW9waG9uZS9NU1xcbmhvbW9zZXh1YWwvU01cXG5ob21vc2V4dWFsaXR5L01cXG5ob24vU1pUR01EUlxcbmhvbmNoby9NU1xcbmhvbmUvTVNcXG5ob25lci9NXFxuaG9uZXN0L0VZVFxcbmhvbmVzdGVyXFxuaG9uZXN0eS9FTVxcbmhvbmV5L1NHTURcXG5ob25leWJlZS9TTVxcbmhvbmV5Y29tYi9NRFNHXFxuaG9uZXlkZXcvU01cXG5ob25leWxvY3VzdC9NXFxuaG9uZXltb29uL1pHTURSU1xcbmhvbmV5bW9vbmVyL01cXG5ob25leXBvdC9TXFxuaG9uZXlzdWNrbGUvU01cXG5ob25rL01EUlNaR1xcbmhvbmtlci9NXFxuaG9ua3kvU01cXG5ob25vci9FU0dNREJcXG5ob25vcmFibGVuZXNzL01cXG5ob25vcmFibHkvRVxcbmhvbm9yYXJpbHlcXG5ob25vcmFyaXVtL01TXFxuaG9ub3JhcnlcXG5ob25vcmVlL1NNXFxuaG9ub3Jlci9TTVxcbmhvbm9yaWZpYy9NU1xcbmhvb2NoL01cXG5ob29kL01EU0dcXG5ob29kaWUvTVNcXG5ob29kbHVtL1NNXFxuaG9vZG9vL01EU0dcXG5ob29kd2luay9ER1NcXG5ob29leS9NXFxuaG9vZi9NRFJTWkdcXG5ob29rJ3NcXG5ob29rL1VEU0dcXG5ob29rYWgvTVxcbmhvb2thaHNcXG5ob29rZXIvTVNcXG5ob29rdXAvTVNcXG5ob29rd29ybS9NU1xcbmhvb2t5L01cXG5ob29saWdhbi9NU1xcbmhvb2xpZ2FuaXNtL01cXG5ob29wL01EU0dcXG5ob29wbGEvTVxcbmhvb3JheVxcbmhvb3NlZ293L1NNXFxuaG9vdC9NRFJTWkdcXG5ob290ZW5hbm55L1NNXFxuaG9vdGVyL01cXG5ob292ZXIvRFNHXFxuaG9vdmVzXFxuaG9wL1NHTURcXG5ob3BlL01TXFxuaG9wZWZ1bC9QU01ZXFxuaG9wZWZ1bG5lc3MvTVxcbmhvcGVsZXNzL1lQXFxuaG9wZWxlc3NuZXNzL01cXG5ob3BwZWRcXG5ob3BwZXIvTVNcXG5ob3BwaW5nXFxuaG9wc2NvdGNoL01EU0dcXG5ob3JhL01TXFxuaG9yZGUvRFNNR1xcbmhvcmVob3VuZC9TTVxcbmhvcml6b24vU01cXG5ob3Jpem9udGFsL1NNWVxcbmhvcm1vbmFsXFxuaG9ybW9uZS9TTVxcbmhvcm4vTURTXFxuaG9ybmJlYW1cXG5ob3JuYmxlbmRlL01cXG5ob3JuZXQvTVNcXG5ob3JubGVzc1xcbmhvcm5saWtlXFxuaG9ybnBpcGUvTVNcXG5ob3JueS9UUlxcbmhvcm9sb2dpY1xcbmhvcm9sb2dpY2FsXFxuaG9yb2xvZ2lzdC9NU1xcbmhvcm9sb2d5L01cXG5ob3Jvc2NvcGUvU01cXG5ob3JyZW5kb3VzL1lcXG5ob3JyaWJsZS9QXFxuaG9ycmlibGVuZXNzL01cXG5ob3JyaWJseVxcbmhvcnJpZC9ZXFxuaG9ycmlmaWNcXG5ob3JyaWZpY2FsbHlcXG5ob3JyaWZ5L0RTR1xcbmhvcnJpZnlpbmcvWVxcbmhvcnJvci9NU1xcbmhvcnNlJ3NcXG5ob3JzZS9VRFNHXFxuaG9yc2ViYWNrL01cXG5ob3JzZWJveC9TXFxuaG9yc2VmbGVzaC9NXFxuaG9yc2VmbHkvU01cXG5ob3JzZWhhaXIvTVxcbmhvcnNlaGlkZS9NXFxuaG9yc2VsYXVnaC9NXFxuaG9yc2VsYXVnaHNcXG5ob3JzZWxlc3NcXG5ob3JzZW1hbi9NXFxuaG9yc2VtYW5zaGlwL01cXG5ob3JzZW1lblxcbmhvcnNlcGxheS9NXFxuaG9yc2Vwb3dlci9NXFxuaG9yc2VyYWRpc2gvTVNcXG5ob3JzZXNoaXQvIVxcbmhvcnNlc2hvZS9EU01cXG5ob3JzZXNob2VpbmdcXG5ob3JzZXRhaWwvU01cXG5ob3JzZXRyYWRpbmdcXG5ob3JzZXdoaXAvU01cXG5ob3JzZXdoaXBwZWRcXG5ob3JzZXdoaXBwaW5nXFxuaG9yc2V3b21hbi9NXFxuaG9yc2V3b21lblxcbmhvcnNleVxcbmhvcnNpZXJcXG5ob3JzaWVzdFxcbmhvcnRhdG9yeVxcbmhvcnRpY3VsdHVyYWxcXG5ob3J0aWN1bHR1cmFsaXN0L1NcXG5ob3J0aWN1bHR1cmUvTVxcbmhvcnRpY3VsdHVyaXN0L01TXFxuaG9zYW5uYS9TTVxcbmhvc2UvTUdEU1xcbmhvc2VwaXBlL1NcXG5ob3NpZXIvTVNcXG5ob3NpZXJ5L01cXG5ob3NwXFxuaG9zcGhvbGlwYXNlXFxuaG9zcGljZS9NU1xcbmhvc3BpdGFibGUvSVxcbmhvc3BpdGFibHkvSVxcbmhvc3BpdGFsL1NNXFxuaG9zcGl0YWxpdHkvTVxcbmhvc3BpdGFsaXphdGlvbi9TTVxcbmhvc3BpdGFsaXplL0RTR1xcbmhvc3QvTURTR1xcbmhvc3RhZ2UvTVNcXG5ob3N0ZWwvWkdNRFJTXFxuaG9zdGVsZXIvTVxcbmhvc3RlbHJ5L1NNXFxuaG9zdGVzcy9NRFNHXFxuaG9zdGlsZS9NWVNcXG5ob3N0aWxpdGllcy9NXFxuaG9zdGlsaXR5L1NNXFxuaG9zdGxlci9NU1xcbmhvdC9TWVBcXG5ob3RiZWQvTVNcXG5ob3RibG9vZGVkXFxuaG90Ym94L01TXFxuaG90Y2FrZS9TTVxcbmhvdGVsL1NNXFxuaG90ZWxpZXIvTVNcXG5ob3Rmb290L01ER1NcXG5ob3RoZWFkL0RTTVxcbmhvdGhlYWRlZC9ZUFxcbmhvdGhlYWRlZG5lc3MvTVxcbmhvdGhvdXNlL1NNXFxuaG90a2V5L1NcXG5ob3RsaW5rL1NcXG5ob3RuZXNzL01cXG5ob3RwbGF0ZS9TTVxcbmhvdHBvdC9TXFxuaG90cy9NXFxuaG90c2hvdC9NU1xcbmhvdHRlZFxcbmhvdHRlclxcbmhvdHRlc3RcXG5ob3R0aWUvU1xcbmhvdHRpbmdcXG5ob3VuZC9TR01EXFxuaG91ci9NWVNcXG5ob3VyZ2xhc3MvTVNcXG5ob3VyaS9TTVxcbmhvdXNlJ3NcXG5ob3VzZS9BRFNHXFxuaG91c2Vib2F0L1NNXFxuaG91c2Vib3VuZFxcbmhvdXNlYm95L1NNXFxuaG91c2VicmVhay9SU1pHXFxuaG91c2VicmVha2VyL01cXG5ob3VzZWJyZWFraW5nL01cXG5ob3VzZWJyb2tlXFxuaG91c2Vicm9rZW5cXG5ob3VzZWNsZWFuL0RTR1xcbmhvdXNlY2xlYW5pbmcvTVxcbmhvdXNlY29hdC9TTVxcbmhvdXNlZmx5L1NNXFxuaG91c2VmdWwvU01cXG5ob3VzZWhvbGQvU01SWlxcbmhvdXNlaG9sZGVyL01cXG5ob3VzZWh1c2JhbmQvU01cXG5ob3VzZWtlZXBlci9NU1xcbmhvdXNla2VlcGluZy9NXFxuaG91c2VsaWdodHMvTVxcbmhvdXNlbWFpZC9TTVxcbmhvdXNlbWFuL01cXG5ob3VzZW1hc3Rlci9TXFxuaG91c2VtYXRlL1NcXG5ob3VzZW1lblxcbmhvdXNlbWlzdHJlc3MvU1xcbmhvdXNlbW90aGVyL1NNXFxuaG91c2VwYXJlbnQvU01cXG5ob3VzZXBsYW50L01TXFxuaG91c2Vwcm91ZFxcbmhvdXNlcm9vbVxcbmhvdXNldG9wL1NNXFxuaG91c2V3YXJlcy9NXFxuaG91c2V3YXJtaW5nL1NNXFxuaG91c2V3aWZlL01ZXFxuaG91c2V3aXZlc1xcbmhvdXNld29yay9NXFxuaG91c2luZy9NU1xcbmhvdmVcXG5ob3ZlbC9TTVxcbmhvdmVyL1NHRFxcbmhvdmVyYm9hcmQvTVNcXG5ob3ZlcmNyYWZ0L01TXFxuaG93J2RcXG5ob3cncmVcXG5ob3cvU01cXG5ob3diZWl0XFxuaG93ZGFoL01cXG5ob3dkYWhzXFxuaG93ZHlcXG5ob3dldmVyXFxuaG93aXR6ZXIvU01cXG5ob3dsL01EUlNaR1xcbmhvd2xlci9NXFxuaG93c29ldmVyXFxuaG95ZGVuL01TXFxuaG95ZGVuaXNoXFxuaHBcXG5oci9TXFxuaHRcXG5odWFyYWNoZS9TTVxcbmh1Yi9TTVxcbmh1YmJ1Yi9TTVxcbmh1YmJ5L1NNXFxuaHViY2FwL1NNXFxuaHVicmlzL01cXG5odWNrbGViZXJyeS9TTVxcbmh1Y2tzdGVyL1NHTURcXG5odWNrc3RlcmlzbS9NXFxuaHVkZGxlL0RTTUdcXG5odWUvRFNNXFxuaHVmZi9NRFNHXFxuaHVmZmlseVxcbmh1ZmZpbmVzcy9NXFxuaHVmZnkvUFJUXFxuaHVnL1NUTVJcXG5odWdlL1lQXFxuaHVnZW5lc3MvTVxcbmh1Z2dlZFxcbmh1Z2dpbmdcXG5odWhcXG5odWxhL01TXFxuaHVsay9NU0dcXG5odWxsL01EUlNaR1xcbmh1bGxhYmFsb28vU01cXG5odWxsZXIvTVxcbmh1bS9TTVxcbmh1bWFuL1NNUllUUFxcbmh1bWFuZS9QWVxcbmh1bWFuZW5lc3MvTVxcbmh1bWFuaXNtL01cXG5odW1hbmlzdC9TTVxcbmh1bWFuaXN0aWNcXG5odW1hbml0YXJpYW4vTVNcXG5odW1hbml0YXJpYW5pc20vTVxcbmh1bWFuaXRpZXMvTVxcbmh1bWFuaXR5L0lTTVxcbmh1bWFuaXphdGlvbi9DTVxcbmh1bWFuaXplL0NEU0dcXG5odW1hbml6ZXIvU01cXG5odW1hbmtpbmQvTVxcbmh1bWFubmVzcy9NXFxuaHVtYW5vaWQvU01cXG5odW1ibGUvRFJTWlRHSlBcXG5odW1ibGVuZXNzL01cXG5odW1ibGVyL01cXG5odW1ibHlcXG5odW1idWcvU01cXG5odW1idWdnZWRcXG5odW1idWdnaW5nXFxuaHVtZGluZ2VyL01TXFxuaHVtZHJ1bS9NXFxuaHVtZXJhbFxcbmh1bWVyaVxcbmh1bWVydXMvTVxcbmh1bWlkL1lcXG5odW1pZGlmaWNhdGlvbi9NXFxuaHVtaWRpZmllci9DTVxcbmh1bWlkaWZ5L0NaR0RSU1xcbmh1bWlkaXR5L01cXG5odW1pZG9yL1NNXFxuaHVtaWxpYXRlL0RTR05YXFxuaHVtaWxpYXRpbmcvWVxcbmh1bWlsaWF0aW9uL01cXG5odW1pbGl0eS9NXFxuaHVtbWVkXFxuaHVtbWVyL1NNXFxuaHVtbWluZ1xcbmh1bW1pbmdiaXJkL1NNXFxuaHVtbW9jay9TTVxcbmh1bW1vY2t5XFxuaHVtbXVzL01cXG5odW1vbmdvdXNcXG5odW1vci9TTURHXFxuaHVtb3Jlc3F1ZVxcbmh1bW9yaXN0L01TXFxuaHVtb3JsZXNzL1lQXFxuaHVtb3JsZXNzbmVzcy9NXFxuaHVtb3JvdXMvUFlcXG5odW1vcm91c25lc3MvTVxcbmh1bXAvTURTR1xcbmh1bXBiYWNrL01EU1xcbmh1bXBoL0RHXFxuaHVtcGhzXFxuaHVtdXMvTVxcbmh1bmNoL01EU0dcXG5odW5jaGJhY2svU01EXFxuaHVuZHJlZC9TTUhcXG5odW5kcmVkZm9sZFxcbmh1bmRyZWR0aC9NXFxuaHVuZHJlZHRoc1xcbmh1bmRyZWR3ZWlnaHQvU01cXG5odW5nXFxuaHVuZ2VyL1NNREdcXG5odW5nb3Zlclxcbmh1bmdyaWx5XFxuaHVuZ3JpbmVzcy9NXFxuaHVuZ3J5L1BSVFxcbmh1bmsvTVJTWlxcbmh1bmtlci9ER1xcbmh1bmt5L1JUXFxuaHVudC9NRFJTWkdcXG5odW50ZXIvTVxcbmh1bnRpbmcvTVxcbmh1bnRyZXNzL01TXFxuaHVudHNtYW4vTVxcbmh1bnRzbWVuXFxuaHVyZGxlL0RSU01aR1xcbmh1cmRsZXIvTVxcbmh1cmRsaW5nL01cXG5odXJsL01EUlNaR1xcbmh1cmxlci9NXFxuaHVybGluZy9NXFxuaHVycmFoL0dNRFxcbmh1cnJhaHNcXG5odXJyaWNhbmUvTVNcXG5odXJyaWVkL1VZXFxuaHVycnkvRFNNR1xcbmh1cnQvTVNHXFxuaHVydGZ1bC9ZUFxcbmh1cnRmdWxuZXNzL01cXG5odXJ0bGUvRFNHXFxuaHVzYmFuZC9HTURTXFxuaHVzYmFuZG1hbi9NXFxuaHVzYmFuZG1lblxcbmh1c2JhbmRyeS9NXFxuaHVzaC9NRFNHXFxuaHVzay9NRFJTWkdcXG5odXNrZXIvTVxcbmh1c2tpbHlcXG5odXNraW5lc3MvTVxcbmh1c2t5L1BSU01UXFxuaHVzc2FyL1NNXFxuaHVzc3kvU01cXG5odXN0aW5ncy9NXFxuaHVzdGxlL0RSU01aR1xcbmh1c3RsZXIvTVxcbmh1dC9TTVxcbmh1dGNoL01TXFxuaHV6emFoL01ER1xcbmh1enphaHNcXG5od3lcXG5oeWFjaW50aC9NXFxuaHlhY2ludGhzXFxuaHlicmlkL1NNXFxuaHlicmlkaXNtL01cXG5oeWJyaWRpemF0aW9uL01cXG5oeWJyaWRpemUvRFNHXFxuaHlkcmEvU01cXG5oeWRyYW5nZWEvU01cXG5oeWRyYW50L01TXFxuaHlkcmF0ZSdzXFxuaHlkcmF0ZS9DR05EU1xcbmh5ZHJhdGlvbi9DTVxcbmh5ZHJhdWxpYy9TXFxuaHlkcmF1bGljYWxseVxcbmh5ZHJhdWxpY3MvTVxcbmh5ZHJvL01cXG5oeWRyb2NhcmJvbi9NU1xcbmh5ZHJvY2VwaGFsdXMvTVxcbmh5ZHJvY2hsb3JpZGVcXG5oeWRyb2NvcnRpc29uZVxcbmh5ZHJvZHluYW1pYy9TXFxuaHlkcm9keW5hbWljcy9NXFxuaHlkcm9lbGVjdHJpY1xcbmh5ZHJvZWxlY3RyaWNhbGx5XFxuaHlkcm9lbGVjdHJpY2l0eS9NXFxuaHlkcm9mb2lsL01TXFxuaHlkcm9nZW4vTVxcbmh5ZHJvZ2VuYXRlL0NHRFNcXG5oeWRyb2dlbmF0aW9uL01cXG5oeWRyb2dlbm91c1xcbmh5ZHJvbG9naXN0L01TXFxuaHlkcm9sb2d5L01cXG5oeWRyb2x5c2VzXFxuaHlkcm9seXNpcy9NXFxuaHlkcm9seXplL0RTR1xcbmh5ZHJvbWV0ZXIvU01cXG5oeWRyb21ldHJ5L01cXG5oeWRyb3BoaWxpY1xcbmh5ZHJvcGhvYmlhL01cXG5oeWRyb3Bob2JpY1xcbmh5ZHJvcGhvbmUvU01cXG5oeWRyb3BsYW5lL0dEU01cXG5oeWRyb3BvbmljL1NcXG5oeWRyb3BvbmljYWxseVxcbmh5ZHJvcG9uaWNzL01cXG5oeWRyb3NwaGVyZS9NXFxuaHlkcm90aGVyYXB5L01cXG5oeWRyb3RoZXJtYWxcXG5oeWRyb3VzXFxuaHlkcm94aWRlL1NNXFxuaHllbmEvU01cXG5oeWdpZW5lL01cXG5oeWdpZW5pYy9VXFxuaHlnaWVuaWNhbGx5XFxuaHlnaWVuaXN0L01TXFxuaHlncm9tZXRlci9TTVxcbmh5aW5nXFxuaHltZW4vU01cXG5oeW1lbmVhbFxcbmh5bW4vTURTR1xcbmh5bW5hbC9NU1xcbmh5bW5ib29rL1NNXFxuaHlwZS9NR0RSU1xcbmh5cGVyYWN0aXZlXFxuaHlwZXJhY3Rpdml0eS9NXFxuaHlwZXJib2xhL1NNXFxuaHlwZXJib2xlL01cXG5oeXBlcmJvbGljXFxuaHlwZXJjcml0aWNhbC9ZXFxuaHlwZXJjdWJlXFxuaHlwZXJnbHljZW1pYS9NXFxuaHlwZXJpbmZsYXRpb25cXG5oeXBlcmxpbmsvR1NNRFxcbmh5cGVybWFya2V0L1NcXG5oeXBlcm1lZGlhL01cXG5oeXBlcnBhcmF0aHlyb2lkaXNtXFxuaHlwZXJwbGFuZVxcbmh5cGVyc2Vuc2l0aXZlL1BcXG5oeXBlcnNlbnNpdGl2ZW5lc3MvTVxcbmh5cGVyc2Vuc2l0aXZpdHkvU01cXG5oeXBlcnNwYWNlL1NcXG5oeXBlcnRlbnNpb24vTVxcbmh5cGVydGVuc2l2ZS9TTVxcbmh5cGVydGV4dC9NXFxuaHlwZXJ0aHlyb2lkL01cXG5oeXBlcnRoeXJvaWRpc20vTVxcbmh5cGVydHJvcGh5L0RTTUdcXG5oeXBlcnZlbnRpbGF0ZS9HTkRTXFxuaHlwZXJ2ZW50aWxhdGlvbi9NXFxuaHlwZXJ2aXNvci9NU1xcbmh5cGhlbi9NRFNHXFxuaHlwaGVuYXRlL1hEU01HTlxcbmh5cGhlbmF0aW9uL01cXG5oeXBub3Nlc1xcbmh5cG5vc2lzL01cXG5oeXBub3RoZXJhcGlzdC9TXFxuaHlwbm90aGVyYXB5L01cXG5oeXBub3RpYy9TTVxcbmh5cG5vdGljYWxseVxcbmh5cG5vdGlzbS9NXFxuaHlwbm90aXN0L01TXFxuaHlwbm90aXplL0dEU1xcbmh5cG8vTVNcXG5oeXBvYWxsZXJnZW5pY1xcbmh5cG9jaG9uZHJpYS9NXFxuaHlwb2Nob25kcmlhYy9TTVxcbmh5cG9jcmlzeS9TTVxcbmh5cG9jcml0ZS9NU1xcbmh5cG9jcml0aWNhbC9ZXFxuaHlwb2Rlcm1pYy9NU1xcbmh5cG9nbHljZW1pYS9NXFxuaHlwb2dseWNlbWljL1NNXFxuaHlwb3RlbnVzZS9NU1xcbmh5cG90aGFsYW1pXFxuaHlwb3RoYWxhbXVzL01cXG5oeXBvdGhlcm1pYS9NXFxuaHlwb3RoZXNlc1xcbmh5cG90aGVzaXMvTVxcbmh5cG90aGVzaXplL0RTR1xcbmh5cG90aGV0aWNhbC9ZXFxuaHlwb3RoeXJvaWQvTVxcbmh5cG90aHlyb2lkaXNtL01cXG5oeXNzb3AvTVxcbmh5c3RlcmVjdG9teS9TTVxcbmh5c3RlcmVzaXNcXG5oeXN0ZXJpYS9NXFxuaHlzdGVyaWMvU01cXG5oeXN0ZXJpY2FsL1lcXG5oeXN0ZXJpY3MvTVxcbmkvVVNcXG5pT1MvTVxcbmlQYWQvTVxcbmlQaG9uZS9NXFxuaVBvZC9NXFxuaVR1bmVzL01cXG5pYW1iL01TXFxuaWFtYmlcXG5pYW1iaWMvU01cXG5pYW1idXMvTVNcXG5pYmV4L01TXFxuaWJpZFxcbmliaWRlbVxcbmliaXMvTVNcXG5pYnVwcm9mZW4vTVxcbmljZSdzXFxuaWNlL0NEU0dcXG5pY2ViZXJnL1NNXFxuaWNlYm9hdC9TTVxcbmljZWJvdW5kXFxuaWNlYm94L01TXFxuaWNlYnJlYWtlci9TTVxcbmljZWNhcC9TTVxcbmljZW1hbi9NXFxuaWNlbWVuXFxuaWNodGh5b2xvZ2lzdC9NU1xcbmljaHRoeW9sb2d5L01cXG5pY2ljbGUvU01cXG5pY2lseVxcbmljaW5lc3MvTVxcbmljaW5nL1NNXFxuaWNreS9SVFxcbmljb24vTVNcXG5pY29uaWNcXG5pY29ub2NsYXNtL01cXG5pY29ub2NsYXN0L1NNXFxuaWNvbm9jbGFzdGljXFxuaWNvbm9ncmFwaHkvTVxcbmljdHVzL01cXG5pY3kvVFBSXFxuaWQvU01ZXFxuaWRlYS9NU1xcbmlkZWFsL1NNWVxcbmlkZWFsaXNtL01cXG5pZGVhbGlzdC9TTVxcbmlkZWFsaXN0aWNcXG5pZGVhbGlzdGljYWxseVxcbmlkZWFsaXphdGlvbi9NU1xcbmlkZWFsaXplL0RTR1xcbmlkZW1cXG5pZGVtcG90ZW50XFxuaWRlbnRpY2FsL1lcXG5pZGVudGlmaWFibGUvVVxcbmlkZW50aWZpY2F0aW9uL01cXG5pZGVudGlmaWVkL1VcXG5pZGVudGlmeS9aR05EUlNYXFxuaWRlbnRpa2l0L1NcXG5pZGVudGl0eS9TTVxcbmlkZW9ncmFtL1NNXFxuaWRlb2dyYXBoL01cXG5pZGVvZ3JhcGhzXFxuaWRlb2xvZ2ljYWwvWVxcbmlkZW9sb2dpc3QvU01cXG5pZGVvbG9ndWUvTVNcXG5pZGVvbG9neS9TTVxcbmlkZXMvTVxcbmlkaW9jeS9TTVxcbmlkaW9tL1NNXFxuaWRpb21hdGljL1VcXG5pZGlvbWF0aWNhbGx5XFxuaWRpb3BhdGhpY1xcbmlkaW9zeW5jcmFzeS9TTVxcbmlkaW9zeW5jcmF0aWNcXG5pZGlvc3luY3JhdGljYWxseVxcbmlkaW90L1NNXFxuaWRpb3RpY1xcbmlkaW90aWNhbGx5XFxuaWRsZS9NWlRHRFJTUFxcbmlkbGVuZXNzL01cXG5pZGxlci9NXFxuaWRvbC9NU1xcbmlkb2xhdGVyL1NNXFxuaWRvbGF0cmVzcy9NU1xcbmlkb2xhdHJvdXNcXG5pZG9sYXRyeS9NXFxuaWRvbGl6YXRpb24vTVxcbmlkb2xpemUvR0RTXFxuaWR5bGwvU01cXG5pZHlsbGljXFxuaWR5bGxpY2FsbHlcXG5pZi9TTVxcbmlmZmluZXNzL01cXG5pZmZ5L1JUUFxcbmlnbG9vL1NNXFxuaWduZW91c1xcbmlnbml0YWJsZVxcbmlnbml0ZS9BR0RTXFxuaWduaXRpb24vTVNcXG5pZ25vYmxlXFxuaWdub2JseVxcbmlnbm9taW5pb3VzL1lcXG5pZ25vbWlueS9TTVxcbmlnbm9yYW11cy9NU1xcbmlnbm9yYW5jZS9NXFxuaWdub3JhbnQvWVxcbmlnbm9yZS9HRFNcXG5pZ3VhbmEvTVNcXG5paVxcbmlpaVxcbmlsZWFcXG5pbGVpdGlzL01cXG5pbGV1bS9NXFxuaWxpYVxcbmlsaXVtL01cXG5pbGsvU01cXG5pbGwvU01QXFxuaWxsZWdhbC9NWVNcXG5pbGxlZ2FsaXR5L1NNXFxuaWxsZWdpYmlsaXR5L01cXG5pbGxlZ2libGVcXG5pbGxlZ2libHlcXG5pbGxlZ2l0aW1hY3kvTVxcbmlsbGVnaXRpbWF0ZS9ZXFxuaWxsaWJlcmFsL1lcXG5pbGxpYmVyYWxpdHkvTVxcbmlsbGljaXQvWVBcXG5pbGxpY2l0bmVzcy9NXFxuaWxsaW1pdGFibGVcXG5pbGxpdGVyYWN5L01cXG5pbGxpdGVyYXRlL01ZU1xcbmlsbG5lc3MvTVNcXG5pbGxvZ2ljYWwvWVxcbmlsbG9naWNhbGl0eS9NXFxuaWxsdW1pbmF0ZS9HTlhEU1xcbmlsbHVtaW5hdGluZy9ZXFxuaWxsdW1pbmF0aW9uL01cXG5pbGx1bWluZS9EU0JHXFxuaWxsdXMvVlxcbmlsbHVzaW9uL0VNU1xcbmlsbHVzaW9uaXN0L1NNXFxuaWxsdXNvcnlcXG5pbGx1c3RyYXRlL0dOVlhEU1xcbmlsbHVzdHJhdGlvbi9NXFxuaWxsdXN0cmF0aXZlL1lcXG5pbGx1c3RyYXRvci9TTVxcbmlsbHVzdHJpb3VzL1BZXFxuaWxsdXN0cmlvdXNuZXNzL01cXG5pbWFnZS9EU01HXFxuaW1hZ2VyeS9NXFxuaW1hZ2luYWJsZS9VXFxuaW1hZ2luYWJseS9VXFxuaW1hZ2luYWxcXG5pbWFnaW5hcnlcXG5pbWFnaW5hdGlvbi9NU1xcbmltYWdpbmF0aXZlL1VZXFxuaW1hZ2luZS9EU0JKR1xcbmltYWdvL01cXG5pbWFnb2VzXFxuaW1hbS9NU1xcbmltYmFsYW5jZS9EU01cXG5pbWJlY2lsZS9NU1xcbmltYmVjaWxpY1xcbmltYmVjaWxpdHkvU01cXG5pbWJpYmUvWkdEUlNcXG5pbWJpYmVyL01cXG5pbWJyaWNhdGlvbi9NXFxuaW1icm9nbGlvL1NNXFxuaW1idWUvRFNHXFxuaW1pdGFibGUvSVxcbmltaXRhdGUvRFNHTlZYXFxuaW1pdGF0aW9uL01cXG5pbWl0YXRpdmUvUFlcXG5pbWl0YXRpdmVuZXNzL01cXG5pbWl0YXRvci9TTVxcbmltbWFjdWxhdGUvUFlcXG5pbW1hY3VsYXRlbmVzcy9NXFxuaW1tYW5lbmNlL01cXG5pbW1hbmVuY3kvTVxcbmltbWFuZW50L1lcXG5pbW1hdGVyaWFsL1lQXFxuaW1tYXRlcmlhbGl0eS9NXFxuaW1tYXRlcmlhbG5lc3MvTVxcbmltbWF0dXJlL1lcXG5pbW1hdHVyaXR5L01cXG5pbW1lYXN1cmFibGVcXG5pbW1lYXN1cmFibHlcXG5pbW1lZGlhY2llcy9NXFxuaW1tZWRpYWN5L1NNXFxuaW1tZWRpYXRlL1BZXFxuaW1tZWRpYXRlbmVzcy9NXFxuaW1tZW1vcmlhbC9ZXFxuaW1tZW5zZS9ZXFxuaW1tZW5zaXR5L1NNXFxuaW1tZXJzZS9YRFNHTlZcXG5pbW1lcnNpYmxlXFxuaW1tZXJzaW9uL01cXG5pbW1pZ3JhbnQvU01cXG5pbW1pZ3JhdGUvRFNHTlxcbmltbWlncmF0aW9uL01cXG5pbW1pbmVuY2UvTVxcbmltbWluZW50L1lcXG5pbW1vYmlsZVxcbmltbW9iaWxpdHkvTVxcbmltbW9iaWxpemF0aW9uL01cXG5pbW1vYmlsaXplL1pHRFJTXFxuaW1tb2RlcmF0ZS9ZXFxuaW1tb2Rlc3QvWVxcbmltbW9kZXN0eS9NXFxuaW1tb2xhdGUvRFNHTlxcbmltbW9sYXRpb24vTVxcbmltbW9yYWwvWVxcbmltbW9yYWxpdHkvU01cXG5pbW1vcnRhbC9NWVNcXG5pbW1vcnRhbGl0eS9NXFxuaW1tb3J0YWxpemUvRFNHXFxuaW1tb3ZhYmlsaXR5L01cXG5pbW1vdmFibGVcXG5pbW1vdmFibHlcXG5pbW11bmVcXG5pbW11bml0eS9NXFxuaW1tdW5pemF0aW9uL1NNXFxuaW1tdW5pemUvR0RTXFxuaW1tdW5vZGVmaWNpZW5jeS9NXFxuaW1tdW5vZGVmaWNpZW50XFxuaW1tdW5vZ2xvYnVsaW4vU1xcbmltbXVub2xvZ2ljXFxuaW1tdW5vbG9naWNhbFxcbmltbXVub2xvZ2lzdC9NU1xcbmltbXVub2xvZ3kvTVxcbmltbXVyZS9EU0dcXG5pbW11dGFiaWxpdHkvTVxcbmltbXV0YWJsZVxcbmltbXV0YWJseVxcbmltcC9TTVJcXG5pbXBhY3QvU01ER1xcbmltcGFpci9TREdMXFxuaW1wYWlyZWQvVVxcbmltcGFpcm1lbnQvTVNcXG5pbXBhbGEvU01cXG5pbXBhbGUvRFNHTFxcbmltcGFsZW1lbnQvTVxcbmltcGFscGFibGVcXG5pbXBhbHBhYmx5XFxuaW1wYW5lbC9TREdcXG5pbXBhcnQvU0RHXFxuaW1wYXJ0aWFsL1lcXG5pbXBhcnRpYWxpdHkvTVxcbmltcGFzc2FibHlcXG5pbXBhc3NlL0JTTVZcXG5pbXBhc3NpYmlsaXR5L01cXG5pbXBhc3NpYmxlXFxuaW1wYXNzaWJseVxcbmltcGFzc2lvbmVkXFxuaW1wYXNzaXZlL1lQXFxuaW1wYXNzaXZlbmVzcy9NXFxuaW1wYXNzaXZpdHkvTVxcbmltcGFzdG8vTVxcbmltcGF0aWVuY2UvTVNcXG5pbXBhdGllbnMvTVxcbmltcGF0aWVudC9ZXFxuaW1wZWFjaC9aR0JMRFJTXFxuaW1wZWFjaGFibGUvVVxcbmltcGVhY2hlci9NXFxuaW1wZWFjaG1lbnQvU01cXG5pbXBlY2NhYmlsaXR5L01cXG5pbXBlY2NhYmxlXFxuaW1wZWNjYWJseVxcbmltcGVjdW5pb3VzL1BZXFxuaW1wZWN1bmlvdXNuZXNzL01cXG5pbXBlZGFuY2UvTVxcbmltcGVkZS9EU0dcXG5pbXBlZGVkL1VcXG5pbXBlZGltZW50L1NNXFxuaW1wZWRpbWVudGEvTVxcbmltcGVsL1NcXG5pbXBlbGxlZFxcbmltcGVsbGVyL01TXFxuaW1wZWxsaW5nXFxuaW1wZW5kL1NER1xcbmltcGVuZXRyYWJpbGl0eS9NXFxuaW1wZW5ldHJhYmxlXFxuaW1wZW5ldHJhYmx5XFxuaW1wZW5pdGVuY2UvTVxcbmltcGVuaXRlbnQvWVxcbmltcGVyYXRpdmUvU01ZXFxuaW1wZXJjZXB0aWJpbGl0eS9NXFxuaW1wZXJjZXB0aWJsZVxcbmltcGVyY2VwdGlibHlcXG5pbXBlcmNlcHRpdmVcXG5pbXBlcmZcXG5pbXBlcmZlY3QvU01ZUFxcbmltcGVyZmVjdGlvbi9NU1xcbmltcGVyZmVjdG5lc3MvTVxcbmltcGVyaWFsL01ZU1xcbmltcGVyaWFsaXNtL01cXG5pbXBlcmlhbGlzdC9TTVxcbmltcGVyaWFsaXN0aWNcXG5pbXBlcmlhbGlzdGljYWxseVxcbmltcGVyaWwvR1NMRFxcbmltcGVyaWxtZW50L01cXG5pbXBlcmlvdXMvUFlcXG5pbXBlcmlvdXNuZXNzL01cXG5pbXBlcmlzaGFibGVcXG5pbXBlcmlzaGFibHlcXG5pbXBlcm1hbmVuY2UvTVxcbmltcGVybWFuZW50L1lcXG5pbXBlcm1lYWJpbGl0eS9NXFxuaW1wZXJtZWFibGVcXG5pbXBlcm1lYWJseVxcbmltcGVybWlzc2libGVcXG5pbXBlcnNvbmFsL1lcXG5pbXBlcnNvbmF0ZS9HTlhEU1xcbmltcGVyc29uYXRpb24vTVxcbmltcGVyc29uYXRvci9TTVxcbmltcGVydGluZW5jZS9NU1xcbmltcGVydGluZW50L1lcXG5pbXBlcnR1cmJhYmlsaXR5L01cXG5pbXBlcnR1cmJhYmxlXFxuaW1wZXJ0dXJiYWJseVxcbmltcGVydmlvdXMvWVxcbmltcGV0aWdvL01cXG5pbXBldHVvc2l0eS9NXFxuaW1wZXR1b3VzL1lQXFxuaW1wZXR1b3VzbmVzcy9NXFxuaW1wZXR1cy9NU1xcbmltcGlldHkvU01cXG5pbXBpbmdlL0xEU0dcXG5pbXBpbmdlbWVudC9NXFxuaW1waW91cy9QWVxcbmltcGlvdXNuZXNzL01cXG5pbXBpc2gvWVBcXG5pbXBpc2huZXNzL01cXG5pbXBsYWNhYmlsaXR5L01cXG5pbXBsYWNhYmxlXFxuaW1wbGFjYWJseVxcbmltcGxhbnQvQlNHTURcXG5pbXBsYW50YXRpb24vTVxcbmltcGxhdXNpYmlsaXR5L1NNXFxuaW1wbGF1c2libGVcXG5pbXBsYXVzaWJseVxcbmltcGxlbWVudC9HQk1EUlNcXG5pbXBsZW1lbnRhYmxlL1VcXG5pbXBsZW1lbnRhdGlvbi9TTVxcbmltcGxlbWVudGVkL1VcXG5pbXBsaWNhdGUvRFNHXFxuaW1wbGljYXRpb24vTVxcbmltcGxpY2l0L1BZXFxuaW1wbGljaXRuZXNzL01cXG5pbXBsb2RlL0RTR1xcbmltcGxvcmUvRFNHXFxuaW1wbG9yaW5nL1lcXG5pbXBsb3Npb24vTVNcXG5pbXBsb3NpdmVcXG5pbXBseS9YRFNHTlxcbmltcG9saXRlL1lQXFxuaW1wb2xpdGVuZXNzL01TXFxuaW1wb2xpdGljXFxuaW1wb25kZXJhYmxlL01TXFxuaW1wb3J0L1pHQlNNRFJcXG5pbXBvcnRhbmNlL01cXG5pbXBvcnRhbnQvWVxcbmltcG9ydGF0aW9uL01TXFxuaW1wb3J0ZXIvTVxcbmltcG9ydHVuYXRlL1lcXG5pbXBvcnR1bmUvR0RTXFxuaW1wb3J0dW5pdHkvTVxcbmltcG9zZS9BRFNHXFxuaW1wb3Nlci9NU1xcbmltcG9zaW5nL1VcXG5pbXBvc2luZ2x5XFxuaW1wb3NpdGlvbi9NU1xcbmltcG9zc2liaWxpdHkvU01cXG5pbXBvc3NpYmxlL1NcXG5pbXBvc3NpYmx5XFxuaW1wb3N0L1NNXFxuaW1wb3N0b3IvU01cXG5pbXBvc3R1cmUvTVNcXG5pbXBvdGVuY2UvTVxcbmltcG90ZW5jeS9NXFxuaW1wb3RlbnQvWVxcbmltcG91bmQvREdTXFxuaW1wb3ZlcmlzaC9EU0xHXFxuaW1wb3ZlcmlzaG1lbnQvTVxcbmltcHJhY3RpY2FiaWxpdHlcXG5pbXByYWN0aWNhYmxlXFxuaW1wcmFjdGljYWJseVxcbmltcHJhY3RpY2FsL1lcXG5pbXByYWN0aWNhbGl0eS9NXFxuaW1wcmVjYXRlL0RTWEdOXFxuaW1wcmVjYXRpb24vTVxcbmltcHJlY2lzZS9QWU5cXG5pbXByZWNpc2VuZXNzL01cXG5pbXByZWNpc2lvbi9NXFxuaW1wcmVnbmFiaWxpdHkvTVxcbmltcHJlZ25hYmxlXFxuaW1wcmVnbmFibHlcXG5pbXByZWduYXRlL0dORFNcXG5pbXByZWduYXRpb24vTVxcbmltcHJlc2FyaW8vU01cXG5pbXByZXNzL01EU0dWXFxuaW1wcmVzc2VkL1VcXG5pbXByZXNzaWJpbGl0eS9NXFxuaW1wcmVzc2libGVcXG5pbXByZXNzaW9uL0JTTVxcbmltcHJlc3Npb25hYmlsaXR5L01cXG5pbXByZXNzaW9uaXNtL01cXG5pbXByZXNzaW9uaXN0L1NNXFxuaW1wcmVzc2lvbmlzdGljXFxuaW1wcmVzc2l2ZS9QWVxcbmltcHJlc3NpdmVuZXNzL01cXG5pbXByaW1hdHVyL1NNXFxuaW1wcmludC9NRFJaR1NcXG5pbXByaW50ZXIvTVxcbmltcHJpc29uL1NETEdcXG5pbXByaXNvbm1lbnQvU01cXG5pbXByb2JhYmlsaXR5L1NNXFxuaW1wcm9iYWJsZVxcbmltcHJvYmFibHlcXG5pbXByb21wdHUvU01cXG5pbXByb3Blci9ZXFxuaW1wcm9wcmlldHkvU01cXG5pbXByb3ZlL0dCRFNMXFxuaW1wcm92ZWQvVVxcbmltcHJvdmVtZW50L01TXFxuaW1wcm92aWRlbmNlL01cXG5pbXByb3ZpZGVudC9ZXFxuaW1wcm92aXNhdGlvbi9TTVxcbmltcHJvdmlzYXRpb25hbFxcbmltcHJvdmlzZS9aR0RSU1xcbmltcHJvdmlzZXIvTVxcbmltcHJ1ZGVuY2UvTVxcbmltcHJ1ZGVudC9ZXFxuaW1wdWRlbmNlL01cXG5pbXB1ZGVudC9ZXFxuaW1wdWduL1pHU0RSXFxuaW1wdWduZXIvTVxcbmltcHVsc2UvTUdOVkRTXFxuaW1wdWxzaW9uL01cXG5pbXB1bHNpdmUvUFlcXG5pbXB1bHNpdmVuZXNzL01cXG5pbXB1bHNpdml0eVxcbmltcHVuaXR5L01cXG5pbXB1cmUvUllUXFxuaW1wdXJpdHkvU01cXG5pbXB1dGF0aW9uL1NNXFxuaW1wdXRlL0JEU0dcXG5pbi9BU01cXG5pbmFjY3VyYWN5L1NcXG5pbmFjdGlvbi9NXFxuaW5hZGVxdWFjeS9TXFxuaW5hZHZlcnRlbmNlL01cXG5pbmFkdmVydGVudC9ZXFxuaW5hbGllbmFiaWxpdHkvTVxcbmluYWxpZW5hYmx5XFxuaW5hbW9yYXRhL1NNXFxuaW5hbmUvUllUXFxuaW5hbmltYXRlL1BZXFxuaW5hbmltYXRlbmVzcy9NXFxuaW5hbml0eS9TTVxcbmluYXBwcm9wcmlhdGUvWVxcbmluYXJ0aWN1bGF0ZS9ZXFxuaW5hc211Y2hcXG5pbmF1ZGlibGVcXG5pbmF1Z3VyYWwvU01cXG5pbmF1Z3VyYXRlL1hHTkRTXFxuaW5hdWd1cmF0aW9uL01cXG5pbmJvYXJkL01TXFxuaW5ib3VuZFxcbmluYm94L01TXFxuaW5icmVlZC9TXFxuaW5jL1RHRFxcbmluY2FsY3VsYWJseVxcbmluY2FuZGVzY2VuY2UvTVxcbmluY2FuZGVzY2VudC9ZXFxuaW5jYW50YXRpb24vU01cXG5pbmNhcGFjaXRhdGUvR05EU1xcbmluY2FyY2VyYXRlL1hEU0dOXFxuaW5jYXJjZXJhdGlvbi9NXFxuaW5jYXJuYWRpbmUvRFNHXFxuaW5jYXJuYXRlL0FYR05EU1xcbmluY2FybmF0aW9uL0FNXFxuaW5jZW5kaWFyeS9TTVxcbmluY2Vuc2UvTUdEU1xcbmluY2VudGl2ZSdzXFxuaW5jZW50aXZlL0VTXFxuaW5jZXB0aW9uL1NNXFxuaW5jZXNzYW50L1lcXG5pbmNlc3QvTVxcbmluY2VzdHVvdXMvUFlcXG5pbmNlc3R1b3VzbmVzcy9NXFxuaW5jaC9NRFNHXFxuaW5jaG9hdGVcXG5pbmNod29ybS9TTVxcbmluY2lkZW5jZS9TTVxcbmluY2lkZW50L1NNXFxuaW5jaWRlbnRhbC9NWVNcXG5pbmNpbmVyYXRlL0RTR05cXG5pbmNpbmVyYXRpb24vTVxcbmluY2luZXJhdG9yL01TXFxuaW5jaXBpZW5jZS9NXFxuaW5jaXBpZW50L1lcXG5pbmNpc2UvWEdOVkRTXFxuaW5jaXNpb24vTVxcbmluY2lzaXZlL1BZXFxuaW5jaXNpdmVuZXNzL01cXG5pbmNpc29yL01TXFxuaW5jaXRlbWVudC9NU1xcbmluY2l0ZXIvTVNcXG5pbmNsXFxuaW5jbGVtZW50XFxuaW5jbGluYXRpb24vRU1cXG5pbmNsaW5hdGlvbnNcXG5pbmNsaW5lJ3NcXG5pbmNsaW5lL0VHRFNcXG5pbmNsdWRlL0dEU1xcbmluY2x1c2lvbi9NU1xcbmluY2x1c2l2ZS9ZUFxcbmluY2x1c2l2ZW5lc3MvTVxcbmluY29nbml0by9NU1xcbmluY29tYnVzdGlibGVcXG5pbmNvbW1vZGUvR0RcXG5pbmNvbW1vZGlvdXNcXG5pbmNvbW11bmljYWRvXFxuaW5jb21wYXRpYmlsaXR5L1NcXG5pbmNvbXBldGVudC9NU1xcbmluY29tcGxldGUvWVxcbmluY29uY2VpdmFiaWxpdHkvTVxcbmluY29uZ3J1b3VzL1BZXFxuaW5jb25ncnVvdXNuZXNzL01cXG5pbmNvbnNvbGFibHlcXG5pbmNvbnN0YW50L1lcXG5pbmNvbnRlc3RhYmlsaXR5L01cXG5pbmNvbnRlc3RhYmx5XFxuaW5jb250aW5lbnRcXG5pbmNvbnRyb3ZlcnRpYmx5XFxuaW5jb252ZW5pZW5jZS9HRFxcbmluY29ycG9yYXRlL0FEU0dOXFxuaW5jb3Jwb3JhdGVkL1VcXG5pbmNvcnBvcmF0aW9uL0FNXFxuaW5jb3Jwb3JlYWxcXG5pbmNvcnJlY3QvWVxcbmluY29ycmlnaWJpbGl0eS9NXFxuaW5jb3JyaWdpYmxlXFxuaW5jb3JyaWdpYmx5XFxuaW5jb3JydXB0aWJseVxcbmluY3JlYXNpbmcvWVxcbmluY3JlbWVudC9TTURHXFxuaW5jcmVtZW50YWwvWVxcbmluY3JlbWVudGFsaXNtXFxuaW5jcmVtZW50YWxpc3QvU01cXG5pbmNyaW1pbmF0ZS9HTkRTXFxuaW5jcmltaW5hdGlvbi9NXFxuaW5jcmltaW5hdG9yeVxcbmluY3J1c3RhdGlvbi9TTVxcbmluY3ViYXRlL0dORFNcXG5pbmN1YmF0aW9uL01cXG5pbmN1YmF0b3IvU01cXG5pbmN1YnVzL01TXFxuaW5jdWxjYXRlL0RTR05cXG5pbmN1bGNhdGlvbi9NXFxuaW5jdWxwYXRlL0RTR1xcbmluY3VtYmVuY3kvU01cXG5pbmN1bWJlbnQvU01cXG5pbmN1bmFidWxhXFxuaW5jdW5hYnVsdW0vTVxcbmluY3VyL1NCXFxuaW5jdXJhYmxlL01TXFxuaW5jdXJhYmx5XFxuaW5jdXJpb3VzXFxuaW5jdXJyZWRcXG5pbmN1cnJpbmdcXG5pbmN1cnNpb24vTVNcXG5pbmRcXG5pbmRlYnRlZC9QXFxuaW5kZWJ0ZWRuZXNzL01cXG5pbmRlZWRcXG5pbmRlZmF0aWdhYmxlXFxuaW5kZWZhdGlnYWJseVxcbmluZGVmZWFzaWJsZVxcbmluZGVmZWFzaWJseVxcbmluZGVmaW5hYmx5XFxuaW5kZWxpYmxlXFxuaW5kZWxpYmx5XFxuaW5kZW1uaWZpY2F0aW9uL01cXG5pbmRlbW5pZnkvR0RTWE5cXG5pbmRlbW5pdHkvU01cXG5pbmRlbnRhdGlvbi9NU1xcbmluZGVudGlvbi9NXFxuaW5kZW50dXJlL0RHXFxuaW5kZXNjcmliYWJseVxcbmluZGVzdHJ1Y3RpYmx5XFxuaW5kZXRlcm1pbmFibHlcXG5pbmRldGVybWluYWN5L01cXG5pbmRldGVybWluYXRlL1lcXG5pbmRleC9aR01EUlNcXG5pbmRleGF0aW9uL1NNXFxuaW5kZXhlci9NXFxuaW5kaWNhdGUvWERTR05WXFxuaW5kaWNhdGlvbi9NXFxuaW5kaWNhdGl2ZS9TTVlcXG5pbmRpY2F0b3IvTVNcXG5pbmRpY3QvR0RTQkxcXG5pbmRpY3RtZW50L1NNXFxuaW5kaWUvU1xcbmluZGlnZW5jZS9NXFxuaW5kaWdlbm91c1xcbmluZGlnZW50L1NNWVxcbmluZGlnbmFudC9ZXFxuaW5kaWduYXRpb24vTVxcbmluZGlnby9NXFxuaW5kaXJlY3QvWVxcbmluZGlzY2lwbGluZVxcbmluZGlzY3JlZXQvWVxcbmluZGlzY3JldGlvbi9TXFxuaW5kaXNjcmltaW5hdGUvWVxcbmluZGlzcGVuc2FiaWxpdHkvTVxcbmluZGlzcGVuc2FibGUvTVNcXG5pbmRpc3BlbnNhYmx5XFxuaW5kaXNzb2x1YmlsaXR5XFxuaW5kaXNzb2x1Ymx5XFxuaW5kaXN0aW5ndWlzaGFibHlcXG5pbmRpdGUvR0RTXFxuaW5kaXVtL01cXG5pbmRpdmlkdWFsL01ZU1xcbmluZGl2aWR1YWxpc20vTVxcbmluZGl2aWR1YWxpc3QvTVNcXG5pbmRpdmlkdWFsaXN0aWNcXG5pbmRpdmlkdWFsaXN0aWNhbGx5XFxuaW5kaXZpZHVhbGl0eS9NXFxuaW5kaXZpZHVhbGl6YXRpb24vTVxcbmluZGl2aWR1YWxpemUvR0RTXFxuaW5kaXZpZHVhdGUvRFNHTlxcbmluZGl2aWR1YXRpb24vTVxcbmluZGl2aXNpYmx5XFxuaW5kb2N0cmluYXRlL0dORFNcXG5pbmRvY3RyaW5hdGlvbi9NXFxuaW5kb2xlbmNlL01cXG5pbmRvbGVudC9ZXFxuaW5kb21pdGFibGVcXG5pbmRvbWl0YWJseVxcbmluZHViaXRhYmxlXFxuaW5kdWJpdGFibHlcXG5pbmR1Y2UvRFJTWkdMXFxuaW5kdWNlbWVudC9TTVxcbmluZHVjZXIvTVxcbmluZHVjdC9ER1ZcXG5pbmR1Y3RhbmNlL01cXG5pbmR1Y3RlZS9TTVxcbmluZHVjdGlvbi9NU1xcbmluZHVjdGl2ZS9ZXFxuaW5kdWxnZS9EU0dcXG5pbmR1bGdlbmNlL1NNXFxuaW5kdWxnZW50L1lcXG5pbmR1c3RyaWFsL1lcXG5pbmR1c3RyaWFsaXNtL01cXG5pbmR1c3RyaWFsaXN0L1NNXFxuaW5kdXN0cmlhbGl6YXRpb24vTVxcbmluZHVzdHJpYWxpemUvRFNHXFxuaW5kdXN0cmlvdXMvWVBcXG5pbmR1c3RyaW91c25lc3MvTVxcbmluZHVzdHJ5L1NNXFxuaW5kd2VsbC9TR1xcbmluZWJyaWF0ZS9NR05EU1xcbmluZWJyaWF0aW9uL01cXG5pbmVkaWJsZVxcbmluZWZmYWJpbGl0eS9NXFxuaW5lZmZhYmxlXFxuaW5lZmZhYmx5XFxuaW5lbGFzdGljXFxuaW5lbGlnaWJsZS9NU1xcbmluZWxpZ2libHlcXG5pbmVsdWN0YWJsZVxcbmluZWx1Y3RhYmx5XFxuaW5lcHQvWVBcXG5pbmVwdGl0dWRlL01cXG5pbmVwdG5lc3MvTVxcbmluZXF1YWxpdHkvU1xcbmluZXJ0L1lQXFxuaW5lcnRpYS9NXFxuaW5lcnRpYWxcXG5pbmVydG5lc3MvTVxcbmluZXNjYXBhYmxlXFxuaW5lc2NhcGFibHlcXG5pbmVzdGltYWJseVxcbmluZXZpdGFiaWxpdHkvTVxcbmluZXZpdGFibGUvTVxcbmluZXZpdGFibHlcXG5pbmV4YWN0L1lcXG5pbmV4aGF1c3RpYmx5XFxuaW5leG9yYWJpbGl0eVxcbmluZXhvcmFibGVcXG5pbmV4b3JhYmx5XFxuaW5leHBlZGllbnRcXG5pbmV4cGVydC9ZXFxuaW5leHBpYWJsZVxcbmluZXhwbGljYWJseVxcbmluZXhwcmVzc2libHlcXG5pbmV4cHJlc3NpdmVcXG5pbmV4dHJpY2FibHlcXG5pbmYvWlRcXG5pbmZhbGxpYmxlXFxuaW5mYW15L1NNXFxuaW5mYW5jeS9NXFxuaW5mYW50L01TXFxuaW5mYW50aWNpZGUvTVNcXG5pbmZhbnRpbGVcXG5pbmZhbnRyeS9TTVxcbmluZmFudHJ5bWFuL01cXG5pbmZhbnRyeW1lblxcbmluZmFyY3QvTVNcXG5pbmZhcmN0aW9uL01cXG5pbmZhdHVhdGUvRFNYR05cXG5pbmZhdHVhdGlvbi9NXFxuaW5mZWN0L0FFU0RHXFxuaW5mZWN0ZWQvVVxcbmluZmVjdGlvbi9BU01cXG5pbmZlY3Rpb3VzL1BZXFxuaW5mZWN0aW91c25lc3MvTVxcbmluZmVsaWNpdG91c1xcbmluZmVyZW5jZS9TTVxcbmluZmVyZW50aWFsXFxuaW5mZXJpb3IvTVNcXG5pbmZlcmlvcml0eS9NXFxuaW5mZXJuYWwvWVxcbmluZmVybm8vTVNcXG5pbmZlcnJlZFxcbmluZmVycmluZ1xcbmluZmVzdC9HRFNcXG5pbmZlc3RhdGlvbi9NU1xcbmluZmlkZWwvTVNcXG5pbmZpZGVsaXR5L1NcXG5pbmZpbHRyYXRvci9TTVxcbmluZmluaXRlL01WXFxuaW5maW5pdGVzaW1hbC9TTVlcXG5pbmZpbml0aXZhbFxcbmluZmluaXRpdmUvTVNcXG5pbmZpbml0dWRlL01cXG5pbmZpbml0eS9TTVxcbmluZmlybVxcbmluZmlybWFyeS9TTVxcbmluZmlybWl0eS9TTVxcbmluZml4XFxuaW5mbGFtZS9EU0dcXG5pbmZsYW1tYWJsZVxcbmluZmxhbW1hdGlvbi9TTVxcbmluZmxhbW1hdG9yeVxcbmluZmxhdGFibGUvU01cXG5pbmZsYXRlL0FEU0dcXG5pbmZsYXRpb24vRU1cXG5pbmZsYXRpb25hcnlcXG5pbmZsZWN0L1NER1xcbmluZmxlY3Rpb24vTVNcXG5pbmZsZWN0aW9uYWxcXG5pbmZsaWN0L1NER1ZcXG5pbmZsaWN0aW9uL01cXG5pbmZsb3cvU01cXG5pbmZsdWVuY2UvTUdEU1xcbmluZmx1ZW5jZWQvVVxcbmluZmx1ZW50aWFsL1lcXG5pbmZsdWVuemEvTVxcbmluZm8vTVxcbmluZm9tZXJjaWFsL1NNXFxuaW5mb3JtL1pcXG5pbmZvcm1hbC9ZXFxuaW5mb3JtYW50L1NNXFxuaW5mb3JtYXRpY3NcXG5pbmZvcm1hdGlvbi9FTVxcbmluZm9ybWF0aW9uYWxcXG5pbmZvcm1hdGl2ZS9QWVxcbmluZm9ybWF0aXZlbmVzcy9NXFxuaW5mb3JtZWQvVVxcbmluZm90YWlubWVudC9NXFxuaW5mcmFcXG5pbmZyYXJlZC9NXFxuaW5mcmFzb25pY1xcbmluZnJhc3RydWN0dXJhbFxcbmluZnJhc3RydWN0dXJlL1NNXFxuaW5mcmVxdWVuY2UvTVxcbmluZnJlcXVlbnQvWVxcbmluZnJpbmdlbWVudC9NU1xcbmluZnVyaWF0ZS9HRFNcXG5pbmZ1cmlhdGluZy9ZXFxuaW5mdXNlci9TTVxcbmluZ2VuaW91cy9QWVxcbmluZ2VuaW91c25lc3MvTVxcbmluZ2VudWUvU01cXG5pbmdlbnVpdHkvTVxcbmluZ2VudW91cy9FWVxcbmluZ2VudW91c25lc3MvTVxcbmluZ2VzdC9TREdcXG5pbmdlc3Rpb24vTVxcbmluZ2xlbm9vay9TTVxcbmluZ290L1NNXFxuaW5ncmFpbi9HXFxuaW5ncmF0ZS9TTVxcbmluZ3JhdGlhdGUvR05EU1xcbmluZ3JhdGlhdGluZy9ZXFxuaW5ncmF0aWF0aW9uL01cXG5pbmdyZWRpZW50L01TXFxuaW5ncmVzcy9NU1xcbmluZ3VpbmFsXFxuaW5oYWJpdC9ER1xcbmluaGFiaXRhYmxlL1VcXG5pbmhhYml0YW50L1NNXFxuaW5oYWJpdGVkL1VcXG5pbmhhbGFudC9TTVxcbmluaGFsYXRpb24vTVNcXG5pbmhhbGF0b3IvTVNcXG5pbmhhbGVyL1NNXFxuaW5oYXJtb25pb3VzXFxuaW5oZXJlL0RTR1xcbmluaGVyZW50L1lcXG5pbmhlcml0L0VHU0RcXG5pbmhlcml0YW5jZS9FTVxcbmluaGVyaXRhbmNlc1xcbmluaGVyaXRvci9TTVxcbmluaGliaXQvR1NEXFxuaW5oaWJpdGlvbi9TTVxcbmluaGliaXRvci9TTVxcbmluaGliaXRvcnlcXG5pbmh1bWFuL1lcXG5pbmh1bWFuZS9ZXFxuaW5pbWljYWwvWVxcbmluaW1pdGFibHlcXG5pbmlxdWl0b3VzL1lcXG5pbmlxdWl0eS9TTVxcbmluaXRpYWwvU0dNRFlcXG5pbml0aWFsaXNtXFxuaW5pdGlhbGl6YXRpb25cXG5pbml0aWFsaXplL0RTR1xcbmluaXRpYWxpemVkL0FVXFxuaW5pdGlhdGUvWE1HTlZEU1xcbmluaXRpYXRlZC9VXFxuaW5pdGlhdGlvbi9NXFxuaW5pdGlhdGl2ZS9TTVxcbmluaXRpYXRvci9NU1xcbmluaXRpYXRvcnlcXG5pbml0aW9cXG5pbmplY3QvU0RHXFxuaW5qZWN0aW9uL1NNXFxuaW5qZWN0b3IvU01cXG5pbmp1bmN0aXZlXFxuaW5qdXJlL0RSU1pHXFxuaW5qdXJlZC9VXFxuaW5qdXJlci9NXFxuaW5qdXJpb3VzXFxuaW5rL01EXFxuaW5rYmxvdC9TTVxcbmlua2luZXNzL01cXG5pbmtsaW5nL1NNXFxuaW5rc3RhbmQvU01cXG5pbmt3ZWxsL01TXFxuaW5reS9SVFBcXG5pbmxhbmQvTVxcbmlubGluZVxcbmlubWF0ZS9TTVxcbmlubW9zdFxcbmlubi9TR01SSlxcbmlubmFyZHMvTVxcbmlubmF0ZS9QWVxcbmlubmF0ZW5lc3MvTVxcbmlubmVybW9zdFxcbmlubmVyc29sZS9TTVxcbmlubmVyc3ByaW5nXFxuaW5uZXJ2YXRlL0dORFNcXG5pbm5lcnZhdGlvbi9NXFxuaW5uaW5nL01cXG5pbm5pdFxcbmlubmtlZXBlci9NU1xcbmlubm9jZW5jZS9NXFxuaW5ub2NlbnQvTVlTXFxuaW5ub2N1b3VzL1BZXFxuaW5ub2N1b3VzbmVzcy9NXFxuaW5ub3ZhdGUvWERTR05WXFxuaW5ub3ZhdGlvbi9NXFxuaW5ub3ZhdG9yL01TXFxuaW5ub3ZhdG9yeVxcbmlubnVlbmRvL1NNXFxuaW5udW1lcmFibHlcXG5pbm51bWVyYXRlXFxuaW5vY3VsYXRlL0FHRFNcXG5pbm9jdWxhdGlvbi9NU1xcbmlub3BlcmF0aXZlXFxuaW5vcmRpbmF0ZS9ZXFxuaW5vcmdhbmljXFxuaW5vc2l0b2xcXG5pbnF1aXJlL1pHRFJcXG5pbnF1aXJlci9NXFxuaW5xdWlyaW5nL1lcXG5pbnF1aXJ5L1NNXFxuaW5xdWlzaXRpb24vTVNcXG5pbnF1aXNpdGlvbmFsXFxuaW5xdWlzaXRpdmUvWVBcXG5pbnF1aXNpdGl2ZW5lc3MvTVxcbmlucXVpc2l0b3IvU01cXG5pbnF1aXNpdG9yaWFsXFxuaW5ydXNoL01TXFxuaW5zYW5lL1RcXG5pbnNhdGlhYmlsaXR5L01cXG5pbnNhdGlhYmx5XFxuaW5zY3JpYmUvWkdEUlxcbmluc2NyaWJlci9NXFxuaW5zY3JpcHRpb24vTVNcXG5pbnNjcnV0YWJpbGl0eS9NXFxuaW5zY3J1dGFibGUvUFxcbmluc2NydXRhYmxlbmVzcy9NXFxuaW5zY3J1dGFibHlcXG5pbnNlYW0vU01cXG5pbnNlY3RpY2lkYWxcXG5pbnNlY3RpY2lkZS9NU1xcbmluc2VjdGl2b3JlL01TXFxuaW5zZWN0aXZvcm91c1xcbmluc2VjdXJlL1lcXG5pbnNlbWluYXRlL0RTR05cXG5pbnNlbWluYXRpb24vTVxcbmluc2Vuc2F0ZVxcbmluc2Vuc2libGVcXG5pbnNlbnNpdGl2ZS9ZXFxuaW5zZXBhcmFibGUvTVNcXG5pbnNlcnQnc1xcbmluc2VydC9BR1NEXFxuaW5zZXJ0aW9uL0FNXFxuaW5zZXJ0aW9uc1xcbmluc2V0dGluZ1xcbmluc2hvcmVcXG5pbnNpZGUvUlNNWlxcbmluc2lkZXIvTVxcbmluc2lkaW91cy9ZUFxcbmluc2lkaW91c25lc3MvTVxcbmluc2lnaHQvTVNcXG5pbnNpZ2h0ZnVsXFxuaW5zaWduaWEvTVxcbmluc2ludWF0ZS9HTlZEU1hcXG5pbnNpbnVhdGlvbi9NXFxuaW5zaW51YXRvci9TTVxcbmluc2lwaWQvUFlcXG5pbnNpcGlkaXR5L01cXG5pbnNpc3QvU0dEXFxuaW5zaXN0ZW5jZS9NXFxuaW5zaXN0ZW50L1lcXG5pbnNpc3RpbmcvWVxcbmluc29mYXJcXG5pbnNvbGUvU01cXG5pbnNvbGVuY2UvTVxcbmluc29sZW50L1lcXG5pbnNvbHVibGVcXG5pbnNvbHVibHlcXG5pbnNvbHZlbmN5L1NcXG5pbnNvbW5pYS9NXFxuaW5zb21uaWFjL1NNXFxuaW5zb211Y2hcXG5pbnNvdWNpYW5jZS9NXFxuaW5zb3VjaWFudFxcbmluc3BlY3QvQUdEU1xcbmluc3BlY3Rpb24vU01cXG5pbnNwZWN0b3IvTVNcXG5pbnNwZWN0b3JhdGUvTVNcXG5pbnNwaXJhdGlvbi9NU1xcbmluc3BpcmF0aW9uYWxcXG5pbnNwaXJhdG9yeVxcbmluc3BpcmVkL1VcXG5pbnNwaXJpbmcvVVxcbmluc3RcXG5pbnN0YWJpbGl0eS9TXFxuaW5zdGFsbC9VQlpSU0RHXFxuaW5zdGFsbGF0aW9uL01TXFxuaW5zdGFsbGVyL1VNXFxuaW5zdGFsbG1lbnQvU01cXG5pbnN0YW5jZS9HRFxcbmluc3RhbnQvTVJZU1xcbmluc3RhbnRhbmVvdXMvWVxcbmluc3RhbnRpYXRlL0RTR1xcbmluc3Rhclxcbmluc3RhdGUvQUdEU1xcbmluc3RlYWRcXG5pbnN0aWdhdGUvRFNHTlxcbmluc3RpZ2F0aW9uL01cXG5pbnN0aWdhdG9yL01TXFxuaW5zdGlsbGF0aW9uL01cXG5pbnN0aW5jdC9WTVNcXG5pbnN0aW5jdGl2ZS9ZXFxuaW5zdGluY3R1YWxcXG5pbnN0aXR1dGUvWE1aR05EUlNcXG5pbnN0aXR1dGVyL01cXG5pbnN0aXR1dGlvbi9NXFxuaW5zdGl0dXRpb25hbC9ZXFxuaW5zdGl0dXRpb25hbGl6YXRpb24vTVxcbmluc3RpdHV0aW9uYWxpemUvRFNHXFxuaW5zdHJcXG5pbnN0cnVjdC9TREdWXFxuaW5zdHJ1Y3RlZC9VXFxuaW5zdHJ1Y3Rpb24vTVNcXG5pbnN0cnVjdGlvbmFsXFxuaW5zdHJ1Y3RpdmUvWVxcbmluc3RydWN0b3IvTVNcXG5pbnN0cnVtZW50L01EU0dcXG5pbnN0cnVtZW50YWwvTVlTXFxuaW5zdHJ1bWVudGFsaXN0L1NNXFxuaW5zdHJ1bWVudGFsaXR5L01cXG5pbnN0cnVtZW50YXRpb24vTVxcbmluc3Vib3JkaW5hdGVcXG5pbnN1ZmZlcmFibGVcXG5pbnN1ZmZlcmFibHlcXG5pbnN1bGFcXG5pbnN1bGFyXFxuaW5zdWxhcml0eS9NXFxuaW5zdWxhdGUvR05EU1xcbmluc3VsYXRpb24vTVxcbmluc3VsYXRvci9NU1xcbmluc3VsaW4vTVxcbmluc3VsdC9TTURHXFxuaW5zdWx0aW5nL1lcXG5pbnN1cGVyYWJsZVxcbmluc3VwZXJhYmx5XFxuaW5zdXJhbmNlL1NNXFxuaW5zdXJlL0RSU1pHQlxcbmluc3VyZWQvU01cXG5pbnN1cmVyL01cXG5pbnN1cmdlbmNlL1NNXFxuaW5zdXJnZW5jeS9TTVxcbmluc3VyZ2VudC9NU1xcbmluc3VybW91bnRhYmx5XFxuaW5zdXJyZWN0aW9uL1NNXFxuaW5zdXJyZWN0aW9uaXN0L1NNXFxuaW50XFxuaW50YWN0XFxuaW50YWdsaW8vTVNcXG5pbnRlZ2VyL01TXFxuaW50ZWdyYWwvU01ZXFxuaW50ZWdyYXRlL0FFVk5HU0RcXG5pbnRlZ3JhdGlvbi9FQU1cXG5pbnRlZ3JhdG9yXFxuaW50ZWdyaXR5L01cXG5pbnRlZ3VtZW50L1NNXFxuaW50ZWwvTVxcbmludGVsbGVjdC9NU1xcbmludGVsbGVjdHVhbC9NWVNcXG5pbnRlbGxlY3R1YWxpc20vTVxcbmludGVsbGVjdHVhbGl6ZS9HRFNcXG5pbnRlbGxpZ2VuY2UvTVxcbmludGVsbGlnZW50L1lcXG5pbnRlbGxpZ2VudHNpYS9NXFxuaW50ZWxsaWdpYmlsaXR5L01cXG5pbnRlbGxpZ2libGUvVVxcbmludGVsbGlnaWJseS9VXFxuaW50ZW5kZWQvU01cXG5pbnRlbnNlL1lUVlJcXG5pbnRlbnNpZmljYXRpb24vTVxcbmludGVuc2lmaWVyL01cXG5pbnRlbnNpZnkvRFJTWkdOXFxuaW50ZW5zaXR5L1NcXG5pbnRlbnNpdmUvTVlQU1xcbmludGVuc2l2ZW5lc3MvTVxcbmludGVudC9TTVlQXFxuaW50ZW50aW9uL01TXFxuaW50ZW50aW9uYWwvVVlcXG5pbnRlbnRuZXNzL01cXG5pbnRlci9FU0xcXG5pbnRlcmFjdC9TR1ZEXFxuaW50ZXJhY3Rpb24vU01cXG5pbnRlcmFjdGl2ZS9ZXFxuaW50ZXJhY3Rpdml0eVxcbmludGVyYnJlZFxcbmludGVyYnJlZWQvR1NcXG5pbnRlcmNlZGUvR0RTXFxuaW50ZXJjZXB0L0dNRFNcXG5pbnRlcmNlcHRpb24vTVNcXG5pbnRlcmNlcHRvci9TTVxcbmludGVyY2Vzc2lvbi9TTVxcbmludGVyY2Vzc29yL01TXFxuaW50ZXJjZXNzb3J5XFxuaW50ZXJjaGFuZ2UvRFNNR1xcbmludGVyY2hhbmdlYWJpbGl0eVxcbmludGVyY2hhbmdlYWJsZVxcbmludGVyY2hhbmdlYWJseVxcbmludGVyY2l0eVxcbmludGVyY29sbGVnaWF0ZVxcbmludGVyY29tL1NNXFxuaW50ZXJjb21tdW5pY2F0ZS9EU0dOXFxuaW50ZXJjb21tdW5pY2F0aW9uL01cXG5pbnRlcmNvbm5lY3QvR0RTXFxuaW50ZXJjb25uZWN0aW9uL1NNXFxuaW50ZXJjb250aW5lbnRhbFxcbmludGVyY291cnNlL01cXG5pbnRlcmN1bHR1cmFsXFxuaW50ZXJkZW5vbWluYXRpb25hbFxcbmludGVyZGVwYXJ0bWVudGFsXFxuaW50ZXJkZXBlbmRlbmNlL01cXG5pbnRlcmRlcGVuZGVudC9ZXFxuaW50ZXJkaWN0L0dNRFNcXG5pbnRlcmRpY3Rpb24vTVxcbmludGVyZGlzY2lwbGluYXJ5XFxuaW50ZXJlc3QvRVNNRFxcbmludGVyZXN0ZWQvVVxcbmludGVyZXN0aW5nL1lcXG5pbnRlcmZhY2UvTUdEU1xcbmludGVyZmFpdGhcXG5pbnRlcmZlcmUvR0RTXFxuaW50ZXJmZXJlbmNlL01cXG5pbnRlcmZlcm9uL01cXG5pbnRlcmZpbGUvR0RTXFxuaW50ZXJnYWxhY3RpY1xcbmludGVyZ292ZXJubWVudGFsXFxuaW50ZXJpbS9NXFxuaW50ZXJpb3IvU01cXG5pbnRlcmpcXG5pbnRlcmplY3QvR0RTXFxuaW50ZXJqZWN0aW9uL1NNXFxuaW50ZXJsYWNlL0dEU1xcbmludGVybGFyZC9ER1NcXG5pbnRlcmxlYXZlL0RTR1xcbmludGVybGV1a2luL01cXG5pbnRlcmxpbmUvR0RTSlxcbmludGVybGluZWFyXFxuaW50ZXJsaW5pbmcvTVxcbmludGVybGluay9EU0dcXG5pbnRlcmxvY2svR01EU1xcbmludGVybG9jdXRvci9TTVxcbmludGVybG9jdXRvcnlcXG5pbnRlcmxvcGUvWkdEUlNcXG5pbnRlcmxvcGVyL01cXG5pbnRlcmx1ZGUvTUdEU1xcbmludGVybWFycmlhZ2UvU01cXG5pbnRlcm1hcnJ5L0dEU1xcbmludGVybWVkaWFyeS9TTVxcbmludGVybWVkaWF0ZS9NWVNcXG5pbnRlcm1lbnQvRU1cXG5pbnRlcm1lbnRzXFxuaW50ZXJtZXp6aVxcbmludGVybWV6em8vTVNcXG5pbnRlcm1pbmFibHlcXG5pbnRlcm1pbmdsZS9EU0dcXG5pbnRlcm1pc3Npb24vU01cXG5pbnRlcm1pdHRlbmNlXFxuaW50ZXJtaXR0ZW5jeVxcbmludGVybWl0dGVudC9ZXFxuaW50ZXJtaXgvR0RTXFxuaW50ZXJuL0dETFxcbmludGVybmFsL1NZXFxuaW50ZXJuYWxpemF0aW9uL01cXG5pbnRlcm5hbGl6ZS9HRFNcXG5pbnRlcm5hdGlvbmFsL1NNWVxcbmludGVybmF0aW9uYWxpc20vTVxcbmludGVybmF0aW9uYWxpc3QvU01cXG5pbnRlcm5hdGlvbmFsaXphdGlvblxcbmludGVybmF0aW9uYWxpemUvRFNHXFxuaW50ZXJuZWNpbmVcXG5pbnRlcm5lZS9TTVxcbmludGVybmV0XFxuaW50ZXJuaXN0L01TXFxuaW50ZXJubWVudC9NXFxuaW50ZXJuc2hpcC9NU1xcbmludGVyb2ZmaWNlXFxuaW50ZXJvcGVyYWJpbGl0eVxcbmludGVyb3BlcmFibGVcXG5pbnRlcm9wZXJhdGUvU1xcbmludGVycGVuZXRyYXRlL0RTR05cXG5pbnRlcnBlcnNvbmFsXFxuaW50ZXJwbGFuZXRhcnlcXG5pbnRlcnBsYXkvTVxcbmludGVycG9sYXRlL1hEU0dOXFxuaW50ZXJwb2xhdGlvbi9NXFxuaW50ZXJwb3NlL0dEU1xcbmludGVycG9zaXRpb24vTVxcbmludGVycHJldC9BR1ZEU1xcbmludGVycHJldGF0aW9uL0FNU1xcbmludGVycHJldGF0aXZlXFxuaW50ZXJwcmV0ZWQvVVxcbmludGVycHJldGVyL01TXFxuaW50ZXJyYWNpYWxcXG5pbnRlcnJlZC9FXFxuaW50ZXJyZWdudW0vU01cXG5pbnRlcnJlbGF0ZS9YRFNHTlxcbmludGVycmVsYXRpb24vTVxcbmludGVycmVsYXRpb25zaGlwL01TXFxuaW50ZXJyaW5nL0VcXG5pbnRlcnJvZ2F0ZS9EU0dOVlhcXG5pbnRlcnJvZ2F0aW9uL01cXG5pbnRlcnJvZ2F0aXZlL01ZU1xcbmludGVycm9nYXRvci9TTVxcbmludGVycm9nYXRvcnkvU01cXG5pbnRlcnJ1cHQvWkdNRFJTXFxuaW50ZXJydXB0ZXIvTVxcbmludGVycnVwdGlvbi9NU1xcbmludGVyc2Nob2xhc3RpY1xcbmludGVyc2VjdC9HRFNcXG5pbnRlcnNlY3Rpb24vU01cXG5pbnRlcnNlY3Rpb25hbFxcbmludGVyc2VjdGlvbmFsaXR5XFxuaW50ZXJzZXNzaW9uL1NNXFxuaW50ZXJzZXhcXG5pbnRlcnNwZXJzZS9HTkRTXFxuaW50ZXJzcGVyc2lvbi9NXFxuaW50ZXJzdGF0ZS9NU1xcbmludGVyc3RlbGxhclxcbmludGVyc3RpY2UvTVNcXG5pbnRlcnN0aXRpYWxcXG5pbnRlcnR3aW5lL0dEU1xcbmludGVydXJiYW5cXG5pbnRlcnZhbC9TTVxcbmludGVydmVuZS9HRFNcXG5pbnRlcnZlbnRpb24vU01cXG5pbnRlcnZlbnRpb25pc20vTVxcbmludGVydmVudGlvbmlzdC9TTVxcbmludGVydmlldy9aR01EUlNcXG5pbnRlcnZpZXdlZS9NU1xcbmludGVydmlld2VyL01cXG5pbnRlcnZvY2FsaWNcXG5pbnRlcndhclxcbmludGVyd2VhdmUvR1NcXG5pbnRlcndvdmVcXG5pbnRlcndvdmVuXFxuaW50ZXN0YWN5L01cXG5pbnRlc3RhdGVcXG5pbnRlc3RpbmFsXFxuaW50ZXN0aW5lL01TXFxuaW50aWZhZGFcXG5pbnRpbWFjeS9TTVxcbmludGltYXRlL01ZR05EU1hcXG5pbnRpbWF0aW9uL01cXG5pbnRpbWlkYXRlL0dORFNcXG5pbnRpbWlkYXRpbmcvWVxcbmludGltaWRhdGlvbi9NXFxuaW50b25hdGlvbi9TTVxcbmludG94aWNhbnQvU01cXG5pbnRveGljYXRlL0RTR05cXG5pbnRveGljYXRpb24vTVxcbmludHJhY3JhbmlhbFxcbmludHJhbXVyYWxcXG5pbnRyYW11c2N1bGFyXFxuaW50cmFuZXQvTVNcXG5pbnRyYW5zaWdlbmNlL01cXG5pbnRyYW5zaWdlbnQvTVlTXFxuaW50cmFzdGF0ZVxcbmludHJhdXRlcmluZVxcbmludHJhdmVub3VzL01TWVxcbmludHJlcGlkL1lcXG5pbnRyZXBpZGl0eS9NXFxuaW50cmljYWN5L1NNXFxuaW50cmljYXRlL1lcXG5pbnRyaWd1ZS9EUlNNWkdcXG5pbnRyaWd1ZXIvTVxcbmludHJpZ3VpbmcvWVxcbmludHJpbnNpY1xcbmludHJpbnNpY2FsbHlcXG5pbnRyby9TTVxcbmludHJvZHVjZS9BR0RTXFxuaW50cm9kdWN0aW9uL0FNXFxuaW50cm9kdWN0aW9uc1xcbmludHJvZHVjdG9yeVxcbmludHJvaXQvU01cXG5pbnRyb3NwZWN0L0dWRFNcXG5pbnRyb3NwZWN0aW9uL01cXG5pbnRyb3NwZWN0aXZlL1lcXG5pbnRyb3ZlcnNpb24vTVxcbmludHJvdmVydC9NRFNcXG5pbnRydWRlL0RSU1pHXFxuaW50cnVkZXIvTVxcbmludHJ1c2lvbi9TTVxcbmludHJ1c2l2ZS9ZUFxcbmludHJ1c2l2ZW5lc3MvTVxcbmludHVpdC9TREdWXFxuaW50dWl0aW9uL1NcXG5pbnR1aXRpdmUvUFlcXG5pbnR1aXRpdmVuZXNzL01cXG5pbnVuZGF0ZS9YRFNHTlxcbmludW5kYXRpb24vTVxcbmludXJlL0RTR1xcbmludmFkZS9EUlNaR1xcbmludmFkZXIvTVxcbmludmFsaWQvR01EWVNcXG5pbnZhbGlkaXNtL01cXG5pbnZhbHVhYmxlXFxuaW52YWx1YWJseVxcbmludmFyaWFudFxcbmludmFzaW9uL01TXFxuaW52YXNpdmVcXG5pbnZlY3RpdmUvTVxcbmludmVpZ2gvR0RcXG5pbnZlaWdoc1xcbmludmVpZ2xlL1pHRFJTXFxuaW52ZWlnbGVyL01cXG5pbnZlbnQvQVNHVkRcXG5pbnZlbnRpb24vQU1TXFxuaW52ZW50aXZlL1BZXFxuaW52ZW50aXZlbmVzcy9NXFxuaW52ZW50b3IvTVNcXG5pbnZlbnRvcnkvRFNNR1xcbmludmVyc2UvU01ZXFxuaW52ZXJ0L1NNRFJaR1xcbmludmVydGVyL01cXG5pbnZlc3QvQVNER0xcXG5pbnZlc3RpZ2F0ZS9HTlZEU1hcXG5pbnZlc3RpZ2F0aW9uL01cXG5pbnZlc3RpZ2F0b3IvU01cXG5pbnZlc3RpZ2F0b3J5XFxuaW52ZXN0aXR1cmUvTVNcXG5pbnZlc3RtZW50L0FFTVxcbmludmVzdG9yL1NNXFxuaW52ZXRlcmFjeS9NXFxuaW52ZXRlcmF0ZVxcbmludmlkaW91cy9ZUFxcbmludmlkaW91c25lc3MvTVxcbmludmlnaWxhdGUvR05EU1xcbmludmlnaWxhdG9yL1NcXG5pbnZpZ29yYXRlL0FEU0dcXG5pbnZpZ29yYXRpbmcvWVxcbmludmlnb3JhdGlvbi9NXFxuaW52aW5jaWJpbGl0eS9NXFxuaW52aW5jaWJseVxcbmludmlvbGFiaWxpdHkvTVxcbmludmlvbGFibHlcXG5pbnZpb2xhdGVcXG5pbnZpdGF0aW9uL1NNXFxuaW52aXRhdGlvbmFsL1NNXFxuaW52aXRlL0RTTUdcXG5pbnZpdGVkL1VcXG5pbnZpdGVlL1NNXFxuaW52aXRpbmcvWVxcbmludm9rZS9EU0dcXG5pbnZvbHVudGFyaW5lc3MvTVxcbmludm9sdW50YXJ5L1BcXG5pbnZvbHV0aW9uL01cXG5pbnZvbHZlL0xEU0dcXG5pbnZvbHZlZC9VXFxuaW52b2x2ZW1lbnQvU01cXG5pbndhcmQvU1lcXG5pb2N0bFxcbmlvZGlkZS9TTVxcbmlvZGluZS9NXFxuaW9kaXplL0RTR1xcbmlvbi9VU01cXG5pb25pY1xcbmlvbml6YXRpb24vVU1cXG5pb25pemUvVURTR1xcbmlvbml6ZXIvTVNcXG5pb25vc3BoZXJlL01TXFxuaW9ub3NwaGVyaWNcXG5pb3RhL01TXFxuaXBlY2FjL1NNXFxuaXJhc2NpYmlsaXR5L01cXG5pcmFzY2libGVcXG5pcmFzY2libHlcXG5pcmF0ZS9ZUFxcbmlyYXRlbmVzcy9NXFxuaXJlL01cXG5pcmVmdWxcXG5pcmVuaWNcXG5pcmlkZXNcXG5pcmlkZXNjZW5jZS9NXFxuaXJpZGVzY2VudC9ZXFxuaXJpZGl1bS9NXFxuaXJpcy9NU1xcbmlyay9TR0RcXG5pcmtzb21lL1lQXFxuaXJrc29tZW5lc3MvTVxcbmlyb24vTURTR1xcbmlyb25jbGFkL01TXFxuaXJvbmljXFxuaXJvbmljYWwvWVxcbmlyb25pbmcvTVxcbmlyb25tb25nZXIvU1xcbmlyb25tb25nZXJ5XFxuaXJvbnN0b25lL01cXG5pcm9ud2FyZS9NXFxuaXJvbndvb2QvTVNcXG5pcm9ud29yay9NXFxuaXJvbnkvU01cXG5pcnJhZGlhdGUvRFNHTlxcbmlycmFkaWF0aW9uL01cXG5pcnJhdGlvbmFsL1NNWVxcbmlycmF0aW9uYWxpdHkvTVxcbmlycmVjbGFpbWFibGVcXG5pcnJlY29uY2lsYWJpbGl0eS9NXFxuaXJyZWNvbmNpbGFibGVcXG5pcnJlY29uY2lsYWJseVxcbmlycmVjb3ZlcmFibGVcXG5pcnJlY292ZXJhYmx5XFxuaXJyZWRlZW1hYmxlXFxuaXJyZWRlZW1hYmx5XFxuaXJyZWR1Y2libGVcXG5pcnJlZHVjaWJseVxcbmlycmVmdXRhYmxlXFxuaXJyZWZ1dGFibHlcXG5pcnJlZ3VsYXIvTVlTXFxuaXJyZWd1bGFyaXR5L1NNXFxuaXJyZWxldmFuY2UvTVNcXG5pcnJlbGV2YW5jeS9NU1xcbmlycmVsZXZhbnQvWVxcbmlycmVsaWdpb25cXG5pcnJlbGlnaW91c1xcbmlycmVtZWRpYWJsZVxcbmlycmVtZWRpYWJseVxcbmlycmVtb3ZhYmxlXFxuaXJyZXBhcmFibGVcXG5pcnJlcGFyYWJseVxcbmlycmVwbGFjZWFibGVcXG5pcnJlcHJlc3NpYmxlXFxuaXJyZXByZXNzaWJseVxcbmlycmVwcm9hY2hhYmxlXFxuaXJyZXByb2FjaGFibHlcXG5pcnJlc2lzdGlibGVcXG5pcnJlc2lzdGlibHlcXG5pcnJlc29sdXRlL1BZTlxcbmlycmVzb2x1dGVuZXNzL01cXG5pcnJlc29sdXRpb24vTVxcbmlycmVzcGVjdGl2ZVxcbmlycmVzcG9uc2liaWxpdHkvTVxcbmlycmVzcG9uc2libGVcXG5pcnJlc3BvbnNpYmx5XFxuaXJyZXRyaWV2YWJsZVxcbmlycmV0cmlldmFibHlcXG5pcnJldmVyZW5jZS9NXFxuaXJyZXZlcmVudC9ZXFxuaXJyZXZlcnNpYmxlXFxuaXJyZXZlcnNpYmx5XFxuaXJyZXZvY2FibGVcXG5pcnJldm9jYWJseVxcbmlycmlnYWJsZVxcbmlycmlnYXRlL0RTR05cXG5pcnJpZ2F0aW9uL01cXG5pcnJpdGFiaWxpdHkvTVxcbmlycml0YWJsZVxcbmlycml0YWJseVxcbmlycml0YW50L1NNXFxuaXJyaXRhdGUvRFNYR05cXG5pcnJpdGF0aW5nL1lcXG5pcnJpdGF0aW9uL01cXG5pcnJ1cHQvREdWU1xcbmlycnVwdGlvbi9TTVxcbmlzY2hlbWlhXFxuaXNjaGVtaWNcXG5pc2luZ2xhc3MvTVxcbmlzbFxcbmlzbGFuZC9TWk1SXFxuaXNsYW5kZXIvTVxcbmlzbGUvTVNcXG5pc2xldC9TTVxcbmlzbS9DTVxcbmlzbXNcXG5pc24ndFxcbmlzb2Jhci9NU1xcbmlzb2JhcmljXFxuaXNvbGF0ZS9EU01HTlxcbmlzb2xhdGlvbi9NXFxuaXNvbGF0aW9uaXNtL01cXG5pc29sYXRpb25pc3QvU01cXG5pc29tZXIvTVNcXG5pc29tZXJpY1xcbmlzb21lcmlzbS9NXFxuaXNvbWV0cmljL1NcXG5pc29tZXRyaWNhbGx5XFxuaXNvbWV0cmljcy9NXFxuaXNvbW9ycGhpY1xcbmlzb21vcnBoaXNtXFxuaXNvc2NlbGVzXFxuaXNvdGhlcm0vU01cXG5pc290b3BlL1NNXFxuaXNvdG9waWNcXG5pc290cm9waWNcXG5pc3N1YW5jZS9NXFxuaXNzdWUvQURTTUdcXG5pc3N1ZXIvTVNcXG5pc3RobWlhblxcbmlzdGhtdXMvTVNcXG5pdCdkXFxuaXQnbGxcXG5pdC9VU01cXG5pdGFsXFxuaXRhbGljL1NNXFxuaXRhbGljaXphdGlvbi9NXFxuaXRhbGljaXplL0dEU1xcbml0YWxpY3MvTVxcbml0Y2gvTURTR1xcbml0Y2hpbmVzcy9NXFxuaXRjaHkvUlBUXFxuaXRlbS9NU1xcbml0ZW1pemF0aW9uL01cXG5pdGVtaXplL0dEU1xcbml0ZXJhdGUvQVhHTlZEU1xcbml0ZXJhdGlvbi9BTVxcbml0ZXJhdG9yL1NcXG5pdGluZXJhbnQvU01cXG5pdGluZXJhcnkvU01cXG5pdHNlbGZcXG5pdi9VXFxuaXZvcnkvU01cXG5pdnkvRFNNXFxuaXhcXG5qL0ZcXG5qYWIvU01cXG5qYWJiZWRcXG5qYWJiZXIvU01EUlpHXFxuamFiYmVyZXIvTVxcbmphYmJpbmdcXG5qYWJvdC9TTVxcbmphY2FyYW5kYS9NU1xcbmphY2svTURHU1xcbmphY2thbC9TTVxcbmphY2thc3MvTVNcXG5qYWNrYm9vdC9TTURcXG5qYWNrZGF3L01TXFxuamFja2V0L1NNRFxcbmphY2toYW1tZXIvTVNcXG5qYWNra25pZmUvTUdEU1xcbmphY2trbml2ZXNcXG5qYWNrcG90L01TXFxuamFja3JhYmJpdC9NU1xcbmphY2tzdHJhdy9NU1xcbmphY3F1YXJkL01cXG5qYWRlL01HRFNcXG5qYWRlZC9QWVxcbmphZGVkbmVzcy9NXFxuamFkZWl0ZS9NXFxuamFnL1NNXFxuamFnZ2VkL1RQUllcXG5qYWdnZWRuZXNzL01cXG5qYWdnaWVzXFxuamFndWFyL1NNXFxuamFpbC9NRFJaR1NcXG5qYWlsYmlyZC9TTVxcbmphaWxicmVhay9TTVxcbmphaWxlci9NXFxuamFpbGhvdXNlL1NcXG5qYWxhcGVuby9NU1xcbmphbG9weS9TTVxcbmphbG91c2llL01TXFxuamFtL1NNXFxuamFtYi9NU1xcbmphbWJhbGF5YS9NXFxuamFtYm9yZWUvTVNcXG5qYW1tZWRcXG5qYW1taW5nXFxuamFtbXkvUlRcXG5qYW5nbGUvRFJTTVpHXFxuamFuZ2xlci9NXFxuamFuaXRvci9TTVxcbmphbml0b3JpYWxcXG5qYXBhbi9TTVxcbmphcGFubmVkXFxuamFwYW5uaW5nXFxuamFwZS9NR0RTXFxuamFyL1NNXFxuamFyZGluaWVyZS9TTVxcbmphcmZ1bC9NU1xcbmphcmdvbi9NXFxuamFycmVkXFxuamFycmluZy9ZXFxuamFzbWluZS9TTVxcbmphc3Blci9NXFxuamF0by9NU1xcbmphdW5kaWNlL0RTTUdcXG5qYXVudC9TR01EXFxuamF1bnRpbHlcXG5qYXVudGluZXNzL01cXG5qYXVudHkvUlBUXFxuamF2YS9NXFxuamF2ZWxpbi9TTVxcbmphdy9TR01EXFxuamF3Ym9uZS9EU01HXFxuamF3YnJlYWtlci9NU1xcbmphd2xpbmUvU1xcbmpheS9TTVxcbmpheWJpcmQvU01cXG5qYXl3YWxrL0RSU1pHXFxuamF5d2Fsa2VyL01cXG5qYXl3YWxraW5nL01cXG5qYXp6L01EU0dcXG5qYXp6eS9UUlxcbmpjdFxcbmplYWxvdXMvWVxcbmplYWxvdXN5L1NNXFxuamVhbi9NU1xcbmplYW5zL01cXG5qZWVwL01TXFxuamVlci9NRFNHXFxuamVlcmluZy9NWVxcbmplZXpcXG5qZWp1bmFcXG5qZWp1bmVcXG5qZWp1bnVtL01cXG5qZWxsL0RTR1xcbmplbGxvL1NcXG5qZWxseS9HRFNNXFxuamVsbHliZWFuL01TXFxuamVsbHlmaXNoL01TXFxuamVsbHlsaWtlXFxuamVsbHlyb2xsL1NNXFxuamVtbXkvR0RTXFxuamVubmV0L01TXFxuamVubnkvU01cXG5qZW9wYXJkaXplL0dEU1xcbmplb3BhcmR5L01cXG5qZXJlbWlhZC9NU1xcbmplcmsvTURTR1xcbmplcmtpbHlcXG5qZXJraW4vTVNcXG5qZXJraW5lc3MvTVxcbmplcmt3YXRlclxcbmplcmt5L1RSTVBcXG5qZXJvYm9hbS9TXFxuamVycnlidWlsdFxcbmplcnJ5Y2FuL1NcXG5qZXJzZXkvTVNcXG5qZXN0L01EUlNaR1xcbmplc3Rlci9NXFxuamVzdGluZy9ZXFxuamV0L1NNXFxuamV0bGluZXIvU01cXG5qZXRwb3J0L01TXFxuamV0c2FtL01cXG5qZXR0ZWRcXG5qZXR0aW5nXFxuamV0dGlzb24vTURTR1xcbmpldHR5L1NNXFxuamV3ZWwvU1pHTURSXFxuamV3ZWxlci9NXFxuamV3ZWxyeS9TTVxcbmpnXFxuamliL1NHTURcXG5qaWJiZWRcXG5qaWJiaW5nXFxuamliZS9NU1xcbmppZmYvTVNcXG5qaWZmeS9TTVxcbmppZydzXFxuamlnL0FTXFxuamlnZ2VkL0FcXG5qaWdnZXInc1xcbmppZ2dlci9BU0RHXFxuamlnZ2luZy9BXFxuamlnZ2xlL0RTTUdcXG5qaWdnbHlcXG5qaWdzYXcvU01ER1xcbmppaGFkL1NNXFxuamloYWRpc3QvU01cXG5qaWx0L01EU0dcXG5qaW1teS9EU01HXFxuamltc29ud2VlZC9NXFxuamluZ2xlL0RTTUdcXG5qaW5nbHlcXG5qaW5nb2lzbS9NXFxuamluZ29pc3QvU01cXG5qaW5nb2lzdGljXFxuamluay9EU0dcXG5qaW5uXFxuamlubmkvTVxcbmppbnJpa2lzaGEvU01cXG5qaW54L01EU0dcXG5qaXRuZXkvU01cXG5qaXR0ZXJidWcvTVNcXG5qaXR0ZXJidWdnZWRcXG5qaXR0ZXJidWdnZXIvTVxcbmppdHRlcmJ1Z2dpbmdcXG5qaXR0ZXJzL01cXG5qaXR0ZXJ5L1JUXFxuaml2ZS9NR0RTXFxuam9iL1NNXFxuam9iYmVkXFxuam9iYmVyL1NNXFxuam9iYmluZ1xcbmpvYmhvbGRlci9NU1xcbmpvYmxlc3MvUFxcbmpvYmxlc3NuZXNzL01cXG5qb2JzaGFyZS9TXFxuam9ic3dvcnRoXFxuam9ic3dvcnRoc1xcbmpvY2svTVNcXG5qb2NrZXkvU0dNRFxcbmpvY2tzdHJhcC9NU1xcbmpvY29zZS9QWVxcbmpvY29zZW5lc3MvTVxcbmpvY29zaXR5L01cXG5qb2N1bGFyL1lcXG5qb2N1bGFyaXR5L01cXG5qb2N1bmQvWVxcbmpvY3VuZGl0eS9NXFxuam9kaHB1cnMvTVxcbmpvZXkvU1xcbmpvZy9TTVxcbmpvZ2dlZFxcbmpvZ2dlci9TTVxcbmpvZ2dpbmcvTVxcbmpvZ2dsZS9EU01HXFxuam9obi9NU1xcbmpvaG5ueS9TTVxcbmpvaG5ueWNha2UvTVNcXG5qb2luJ3NcXG5qb2luL0FGRFNHXFxuam9pbmVyL0ZNU1xcbmpvaW5lcnkvTVxcbmpvaW50J3NcXG5qb2ludC9FR1NEXFxuam9pbnRseS9GXFxuam9pc3QvU01cXG5qb2pvYmFcXG5qb2tlL01aR0RSU1xcbmpva2VyL01cXG5qb2tleVxcbmpva2llclxcbmpva2llc3RcXG5qb2tpbmcvWVxcbmpvbGxpZmljYXRpb24vU01cXG5qb2xsaWx5XFxuam9sbGluZXNzL01cXG5qb2xsaXR5L01cXG5qb2xseS9UR1BEUlNNXFxuam9sdC9NRFJTWkdcXG5qb2x0ZXIvTVxcbmpvbnF1aWwvU01cXG5qb3NoL01EUlNaR1xcbmpvc2hlci9NXFxuam9zdGxlL01HRFNcXG5qb3QvU01cXG5qb3R0ZWRcXG5qb3R0ZXIvTVNcXG5qb3R0aW5nL01TXFxuam91bGUvU01cXG5qb3VuY2UvTUdEU1xcbmpvdW5jeVxcbmpvdXJuYWwvTVNcXG5qb3VybmFsZXNlL01cXG5qb3VybmFsaXNtL01cXG5qb3VybmFsaXN0L1NNXFxuam91cm5hbGlzdGljXFxuam91cm5leS9aR01EUlNcXG5qb3VybmV5ZXIvTVxcbmpvdXJuZXltYW4vTVxcbmpvdXJuZXltZW5cXG5qb3Vybm8vU1xcbmpvdXN0L1NaR01EUlxcbmpvdXN0ZXIvTVxcbmpvdXN0aW5nL01cXG5qb3ZpYWwvWVxcbmpvdmlhbGl0eS9NXFxuam93bC9NU1xcbmpvd2x5L1RSXFxuam95L1NHTURcXG5qb3lmdWwvWVBcXG5qb3lmdWxsZXJcXG5qb3lmdWxsZXN0XFxuam95ZnVsbmVzcy9NXFxuam95bGVzcy9QWVxcbmpveWxlc3NuZXNzL01cXG5qb3lvdXMvWVBcXG5qb3lvdXNuZXNzL01cXG5qb3lyaWRkZW5cXG5qb3lyaWRlL1JTTVpHXFxuam95cmlkZXIvTVxcbmpveXJpZGluZy9NXFxuam95cm9kZVxcbmpveXN0aWNrL1NNXFxuanJcXG5qdWJpbGFudC9ZXFxuanViaWxhdGlvbi9NXFxuanViaWxlZS9TTVxcbmp1ZGRlci9HRFNcXG5qdWRnZSdzXFxuanVkZ2UvQURTR1xcbmp1ZGdlc2hpcC9NXFxuanVkZ21lbnQvU01cXG5qdWRnbWVudGFsL1lcXG5qdWRpY2F0b3J5L1NNXFxuanVkaWNhdHVyZS9NXFxuanVkaWNpYWwvWVxcbmp1ZGljaWFyeS9TTVxcbmp1ZGljaW91cy9JWVBcXG5qdWRpY2lvdXNuZXNzL0lNXFxuanVkby9NXFxuanVnL1NNXFxuanVnZnVsL01TXFxuanVnZ2VkXFxuanVnZ2VybmF1dC9TTVxcbmp1Z2dpbmdcXG5qdWdnbGUvTVpHRFJTXFxuanVnZ2xlci9NXFxuanVnZ2xlcnkvTVxcbmp1Z3VsYXIvU01cXG5qdWljZS9EUlNNWkdcXG5qdWljZXIvTVxcbmp1aWNpbHlcXG5qdWljaW5lc3MvTVxcbmp1aWN5L1BUUlxcbmp1aml0c3UvTVxcbmp1anViZS9NU1xcbmp1a2Vib3gvTVNcXG5qdWxlcC9TTVxcbmp1bGllbm5lXFxuanVtYmxlL01HRFNcXG5qdW1iby9TTVxcbmp1bXAvTURSU1pHXFxuanVtcGVyL01cXG5qdW1waWx5XFxuanVtcGluZXNzL01cXG5qdW1wc3VpdC9NU1xcbmp1bXB5L1RSUFxcbmp1blxcbmp1bmNvL1NNXFxuanVuY3Rpb24vRklTTVxcbmp1bmN0dXJlL0ZNU1xcbmp1bmdsZS9NU1xcbmp1bmlvci9NU1xcbmp1bmlwZXIvU01cXG5qdW5rL01EUlNaR1xcbmp1bmtlci9NXFxuanVua2V0L01EU0dcXG5qdW5rZXRlZXIvTVNcXG5qdW5raWUvTVRSU1xcbmp1bmt5YXJkL01TXFxuanVudGEvU01cXG5qdXJpZGljXFxuanVyaWRpY2FsL1lcXG5qdXJpc2RpY3Rpb24vU01cXG5qdXJpc2RpY3Rpb25hbFxcbmp1cmlzcHJ1ZGVuY2UvTVxcbmp1cmlzdC9NU1xcbmp1cmlzdGljXFxuanVyb3IvU01cXG5qdXJ5L0lTTVxcbmp1cnltYW4vTVxcbmp1cnltZW5cXG5qdXJ5d29tYW4vTVxcbmp1cnl3b21lblxcbmp1c3QvUllQVFxcbmp1c3RpY2UvSU1TXFxuanVzdGlmaWFibGUvVVxcbmp1c3RpZmlhYmx5L1VcXG5qdXN0aWZpY2F0aW9uL01cXG5qdXN0aWZpZWQvVVxcbmp1c3RpZnkvWEdEU05cXG5qdXN0bmVzcy9NXFxuanV0L1NNXFxuanV0ZS9NXFxuanV0dGVkXFxuanV0dGluZ1xcbmp1dmVuaWxlL1NNXFxuanV4dGFwb3NlL0RTR1xcbmp1eHRhcG9zaXRpb24vU01cXG5rL0lGR1NcXG5rSHpcXG5rV1xcbmtXaFxcbmthYmJhbGFoXFxua2Fib29tXFxua2FidWtpL01cXG5rYWRkaXNoL01TXFxua2FmZmVla2xhdGNoL01TXFxua2FmZmVla2xhdHNjaC9NU1xcbmthaHVuYS9TXFxua2Fpc2VyL01TXFxua2FsZS9NXFxua2FsZWlkb3Njb3BlL01TXFxua2FsZWlkb3Njb3BpY1xcbmthbGVpZG9zY29waWNhbGx5XFxua2FtaWthemUvTVNcXG5rYW5hXFxua2FuZ2Fyb28vTVNcXG5rYW5qaVxcbmthb2xpbi9NXFxua2Fwb2svTVxcbmthcHBhL1NNXFxua2FwdXRcXG5rYXJha3VsL01cXG5rYXJhb2tlL01TXFxua2FyYXQvU01cXG5rYXJhdGUvTVxcbmthcm1hL01cXG5rYXJtaWNcXG5rYXJ0L01TXFxua2F0YWthbmFcXG5rYXR5ZGlkL1NNXFxua2F5YWsvU01ER1xcbmtheWFraW5nL01cXG5rYXlvL01EU0dcXG5rYXpvby9TTVxcbmtjXFxua2ViYWIvU01cXG5rZWRnZXJlZVxcbmtlZWwvTURTR1xcbmtlZWxoYXVsL0RHU1xcbmtlZW4vTURSWVNUR1BcXG5rZWVubmVzcy9NXFxua2VlcC9NUlNaR1xcbmtlZXBlci9NXFxua2VlcGluZy9NXFxua2VlcHNha2UvTVNcXG5rZWcvU01cXG5rZWxwL01cXG5rZWx2aW4vU01cXG5rZW4vU01cXG5rZW5uZWRcXG5rZW5uZWwvU0dNRFxcbmtlbm5pbmdcXG5rZW5vL01cXG5rZXBpL01TXFxua2VwdFxcbmtlcmF0aW4vTVxcbmtlcmF0aXRpc1xcbmtlcmJzaWRlXFxua2VyY2hpZWYvU01cXG5rZXJmdWZmbGUvU1xcbmtlcm5lbC9TTVxcbmtlcm9zZW5lL01cXG5rZXN0cmVsL01TXFxua2V0Y2gvTVNcXG5rZXRjaHVwL01cXG5rZXRvXFxua2V0b2dlbmljXFxua2V0b25lL1NcXG5rZXR0bGUvU01cXG5rZXR0bGVkcnVtL1NNXFxua2V5L1NHTURcXG5rZXliaW5kaW5nL1NcXG5rZXlib2FyZC9aR1NNRFJcXG5rZXlib2FyZGVyL01cXG5rZXlib2FyZGlzdC9TTVxcbmtleWhvbGUvTVNcXG5rZXlub3RlL01aR0RSU1xcbmtleW5vdGVyL01cXG5rZXlwYWQvU01cXG5rZXlwdW5jaC9aR01EUlNcXG5rZXlwdW5jaGVyL01cXG5rZXlzdG9uZS9NU1xcbmtleXN0cm9rZS9TTVxcbmtleXdvcmQvTVNcXG5rZ1xcbmtoYWtpL1NNXFxua2hhbi9NU1xcbmtpYmJsZS9EU01HXFxua2liYnV0ei9NU1xcbmtpYmJ1dHppbVxcbmtpYml0ei9aR0RSU1xcbmtpYml0emVyL01cXG5raWJvc2gvTVxcbmtpY2svTURSU1pHXFxua2lja2JhY2svU01cXG5raWNrYmFsbC9NXFxua2lja2JveGluZ1xcbmtpY2tlci9NXFxua2lja29mZi9NU1xcbmtpY2tzdGFuZC9NU1xcbmtpY2t5L1JUXFxua2lkL1NNXFxua2lkZGVkXFxua2lkZGVyL1NNXFxua2lkZGllL1NNXFxua2lkZGluZ1xcbmtpZGRpc2hcXG5raWRkby9TTVxcbmtpZG5hcC9TXFxua2lkbmFwcGVkXFxua2lkbmFwcGVyL01TXFxua2lkbmFwcGluZy9NU1xcbmtpZG5leS9TTVxcbmtpZHNraW4vTVxcbmtpZWxiYXNhL01TXFxua2llbGJhc2lcXG5raWtlL1NcXG5raWxsL0pNRFJTWkdcXG5raWxsZGVlci9TTVxcbmtpbGxlci9NXFxua2lsbGluZy9NXFxua2lsbGpveS9TTVxcbmtpbG4vTURTR1xcbmtpbG8vTVNcXG5raWxvYnl0ZS9TTVxcbmtpbG9jb3Vsb21iL1NcXG5raWxvY3ljbGUvU01cXG5raWxvZ3JhbS9TTVxcbmtpbG9oZXJ0ei9NXFxua2lsb2pvdWxlL1NcXG5raWxvbGl0ZXIvTVNcXG5raWxvbWV0ZXIvTVNcXG5raWxvbmV3dG9uL1NcXG5raWxvcGFzY2FsL1NcXG5raWxvdG9uL1NNXFxua2lsb3ZvbHQvU1xcbmtpbG93YXR0L1NNXFxua2lsdC9NRFJTXFxua2lsdGVyL01cXG5raW1vbm8vTVNcXG5raW4vTVxcbmtpbmFzZVxcbmtpbmQnc1xcbmtpbmQvVVBSWVRcXG5raW5kYVxcbmtpbmRlcmdhcnRlbi9NU1xcbmtpbmRlcmdhcnRuZXIvU01cXG5raW5kaGVhcnRlZC9QWVxcbmtpbmRoZWFydGVkbmVzcy9NXFxua2luZGxlL0FHRFNcXG5raW5kbGluZXNzL01cXG5raW5kbGluZy9NXFxua2luZGx5L1VSVFxcbmtpbmRuZXNzL1VNXFxua2luZG5lc3Nlc1xcbmtpbmRyZWQvTVxcbmtpbmRzXFxua2luZS9TXFxua2luZW1hdGljL1NcXG5raW5lbWF0aWNzL01cXG5raW5ldGljL1NcXG5raW5ldGljYWxseVxcbmtpbmV0aWNzL01cXG5raW5mb2xrL1NNXFxua2luZm9sa3MvTVxcbmtpbmcvTVlTXFxua2luZ2RvbS9TTVxcbmtpbmdmaXNoZXIvU01cXG5raW5nbHkvUlRcXG5raW5nbWFrZXIvU1xcbmtpbmdwaW4vU01cXG5raW5nc2hpcC9NXFxua2luay9NRFNHXFxua2lua2lseVxcbmtpbmtpbmVzcy9NXFxua2lua3kvVFBSXFxua2luc2ZvbGsvTVxcbmtpbnNoaXAvTVxcbmtpbnNtYW4vTVxcbmtpbnNtZW5cXG5raW5zd29tYW4vTVxcbmtpbnN3b21lblxcbmtpb3NrL1NNXFxua2lwL1NNXFxua2lwcGVkXFxua2lwcGVyL01ER1NcXG5raXBwaW5nXFxua2lyc2NoL01TXFxua2lzbWV0L01cXG5raXNzL01EUlNCWkdcXG5raXNzZXIvTVxcbmtpc3NvZmYvU01cXG5raXNzb2dyYW0vU1xcbmtpdC9TR01EXFxua2l0Y2hlbi9TTVxcbmtpdGNoZW5ldHRlL01TXFxua2l0Y2hlbndhcmUvTVxcbmtpdGUvTVNcXG5raXRoL01cXG5raXRzY2gvTVxcbmtpdHNjaHlcXG5raXR0ZWRcXG5raXR0ZW4vTVNcXG5raXR0ZW5pc2hcXG5raXR0aW5nXFxua2l0dHkvU01cXG5raXdpL01TXFxua2l3aWZydWl0L01TXFxua2xcXG5rbGF4b24vU1xcbmtsZXB0b2NyYWN5XFxua2xlcHRvbWFuaWEvTVxcbmtsZXB0b21hbmlhYy9TTVxcbmtsdWRnZS9HRFNcXG5rbHVnZS9EU1xcbmtsdXR6L01TXFxua2x1dHppbmVzcy9NXFxua2x1dHp5L1RSUFxcbmttXFxua25cXG5rbmFjay9TWk1SXFxua25hY2tlci9HRFxcbmtuYXBzYWNrL01TXFxua25hdmUvU01cXG5rbmF2ZXJ5L01cXG5rbmF2aXNoL1lcXG5rbmVhZC9TWkdEUlxcbmtuZWFkZXIvTVxcbmtuZWUvTURTXFxua25lZWNhcC9TTVxcbmtuZWVjYXBwZWRcXG5rbmVlY2FwcGluZ1xcbmtuZWVpbmdcXG5rbmVlbC9TR1xcbmtuZWxsL1NHTURcXG5rbmVsdFxcbmtuZXdcXG5rbmlja2VyL1NcXG5rbmlja2VyYm9ja2Vycy9NXFxua25pY2tlcnMvTVxcbmtuaWNra25hY2svTVNcXG5rbmlmZS9EU01HXFxua25pZ2h0L01EWVNHXFxua25pZ2h0aG9vZC9NU1xcbmtuaWdodGxpbmVzcy9NXFxua25pc2gvTVNcXG5rbml0L01TXFxua25pdHRlZFxcbmtuaXR0ZXIvU01cXG5rbml0dGluZy9NXFxua25pdHdlYXIvTVxcbmtuaXZlc1xcbmtub2IvTVNcXG5rbm9iYmx5XFxua25vYmJ5L1RSXFxua25vY2svU1pHTURSXFxua25vY2thYm91dFxcbmtub2NrZG93bi9TTVxcbmtub2NrZXIvTVxcbmtub2Nrb2ZmL1NNXFxua25vY2tvdXQvU01cXG5rbm9ja3d1cnN0L1NNXFxua25vbGwvU01cXG5rbm90L01TXFxua25vdGhvbGUvU01cXG5rbm90dGVkXFxua25vdHRpbmdcXG5rbm90dHkvVFJcXG5rbm93L1NCXFxua25vd2luZy9VWVNcXG5rbm93bGVkZ2UvTVxcbmtub3dsZWRnZWFibGVcXG5rbm93bGVkZ2VhYmx5XFxua25vd25cXG5rbnVja2xlL0RTTUdcXG5rbnVja2xlZHVzdGVyL1NcXG5rbnVja2xlaGVhZC9NU1xcbmtudXJsL1NHTURcXG5rb2FsYS9TTVxcbmtvYW4vU1xcbmtvaGxcXG5rb2hscmFiaS9NXFxua29obHJhYmllc1xcbmtvbGEvTVNcXG5rb29rL01TXFxua29va2FidXJyYS9TTVxcbmtvb2tpbmVzcy9NXFxua29va3kvVFBSXFxua29wZWNrL01TXFxua29ybWFcXG5rb3NoZXIvRFNHXFxua293dG93L0dNRFNcXG5rcGhcXG5rcmFhbC9TTVxcbmtyYXV0L1NNIVxcbmtyaWxsL01cXG5rcm9uYS9NXFxua3JvbmUvUk1cXG5rcm9ub3JcXG5rcm9udXJcXG5rcnlwdG9uL01cXG5rdFxcbmt1Y2hlbi9TTVxcbmt1ZG9zL01cXG5rdWR6dS9TTVxcbmt1bXF1YXQvTVNcXG5rdmV0Y2gvWkdNRFJTXFxua3ZldGNoZXIvTVxcbmt3XFxubC9TRFhUR0pcXG5sYS9NXFxubGFiL1NNXFxubGFiZWwnc1xcbmxhYmVsL0FTREdcXG5sYWJlbGVkL1VcXG5sYWJpYVxcbmxhYmlhbC9TTVxcbmxhYmlsZVxcbmxhYml1bS9NXFxubGFib3IvU01EUlpHXFxubGFib3JhdG9yeS9TTVxcbmxhYm9yZXIvTVxcbmxhYm9yaW91cy9QWVxcbmxhYm9yaW91c25lc3MvTVxcbmxhYm9yc2F2aW5nXFxubGFidXJudW0vTVNcXG5sYWJ5cmludGgvTVxcbmxhYnlyaW50aGluZVxcbmxhYnlyaW50aHNcXG5sYWMvTVxcbmxhY2Unc1xcbmxhY2UvVUdEU1xcbmxhY2VyYXRlL0RTR05YXFxubGFjZXJhdGlvbi9NXFxubGFjZXdpbmcvU01cXG5sYWNld29yay9NXFxubGFjaHJ5bWFsXFxubGFjaHJ5bW9zZVxcbmxhY2svTURTR1xcbmxhY2thZGFpc2ljYWwvWVxcbmxhY2tleS9TTVxcbmxhY2tsdXN0ZXJcXG5sYWNvbmljXFxubGFjb25pY2FsbHlcXG5sYWNxdWVyL0dNRFNcXG5sYWNyb3NzZS9NXFxubGFjdGF0ZS9HTkRTXFxubGFjdGF0aW9uL01cXG5sYWN0ZWFsXFxubGFjdGljXFxubGFjdG9zZS9NXFxubGFjdW5hL01cXG5sYWN1bmFlXFxubGFjeS9SVFxcbmxhZC9TR01ETkpcXG5sYWRkZXIvR1NNRFxcbmxhZGRpZS9TTVxcbmxhZGRpc2gvUFxcbmxhZGUvU1xcbmxhZGVuL1VcXG5sYWRpbmcvTVxcbmxhZGxlL0RTTUdcXG5sYWR5L1NNXFxubGFkeWJpcmQvU01cXG5sYWR5YnVnL01TXFxubGFkeWZpbmdlci9NU1xcbmxhZHlsaWtlL1VcXG5sYWR5bG92ZS9NU1xcbmxhZHlzaGlwL01TXFxubGFldHJpbGUvTVxcbmxhZy9TWk1SXFxubGFnZXIvTVxcbmxhZ2dhcmQvTVlTXFxubGFnZ2VkXFxubGFnZ2luZy9NXFxubGFnbmlhcHBlL1NNXFxubGFnb29uL1NNXFxubGFpZC9JQVxcbmxhaW5cXG5sYWlyL01TXFxubGFpcmQvU01cXG5sYWl0eS9NXFxubGFrZS9NU1xcbmxha2Vmcm9udC9TXFxubGFrZXNpZGVcXG5sYW0vU01cXG5sYW1hL01TXFxubGFtYXNlcnkvU01cXG5sYW1iL01EU0dcXG5sYW1iYWRhL01TXFxubGFtYmFzdGUvR0RTXFxubGFtYmRhL1NNXFxubGFtYmVuY3kvTVxcbmxhbWJlbnQvWVxcbmxhbWJraW4vU01cXG5sYW1ic2tpbi9TTVxcbmxhbWJzd29vbFxcbmxhbWUvTVlaVEdEUlNQXFxubGFtZWJyYWluL01EU1xcbmxhbWVuZXNzL01cXG5sYW1lbnQvQlNNREdcXG5sYW1lbnRhYmx5XFxubGFtZW50YXRpb24vTVNcXG5sYW1pbmEvTVxcbmxhbWluYWVcXG5sYW1pbmFyXFxubGFtaW5hdGUvTUdORFNcXG5sYW1pbmF0aW9uL01cXG5sYW1tZWRcXG5sYW1taW5nXFxubGFtcC9NU1xcbmxhbXBibGFjay9NXFxubGFtcGxpZ2h0L01SWlxcbmxhbXBsaWdodGVyL01cXG5sYW1wb29uL1NHTURcXG5sYW1wcG9zdC9TTVxcbmxhbXByZXkvTVNcXG5sYW1wc2hhZGUvU01cXG5sYW5haS9TTVxcbmxhbmNlL0RSU01aR1xcbmxhbmNlci9NXFxubGFuY2V0L1NNXFxubGFuZC9NRFJTR0pcXG5sYW5kYXUvU01cXG5sYW5kZmFsbC9NU1xcbmxhbmRmaWxsL01TXFxubGFuZGhvbGRlci9TTVxcbmxhbmRob2xkaW5nL01TXFxubGFuZGluZy9NXFxubGFuZGxhZHkvU01cXG5sYW5kbGVzcy9NXFxubGFuZGxpbmUvTVNcXG5sYW5kbG9ja2VkXFxubGFuZGxvcmQvTVNcXG5sYW5kbHViYmVyL01TXFxubGFuZG1hcmsvTVNcXG5sYW5kbWFzcy9NU1xcbmxhbmRtaW5lL1NcXG5sYW5kb3duZXIvTVNcXG5sYW5kb3duZXJzaGlwXFxubGFuZG93bmluZy9TTVxcbmxhbmRzY2FwZS9NWkdEUlNcXG5sYW5kc2NhcGVyL01cXG5sYW5kc2xpZFxcbmxhbmRzbGlkZS9NR1NcXG5sYW5kc2xpcC9TXFxubGFuZHNtYW4vTVxcbmxhbmRzbWVuXFxubGFuZHdhcmQvU1xcbmxhbmUvTVNcXG5sYW5ndWFnZS9NU1xcbmxhbmd1aWQvUFlcXG5sYW5ndWlkbmVzcy9NXFxubGFuZ3Vpc2gvRFNHXFxubGFuZ3Vvci9TTVxcbmxhbmd1b3JvdXMvWVxcbmxhbmsvUllUUFxcbmxhbmtpbmVzcy9NXFxubGFua25lc3MvTVxcbmxhbmt5L1JUUFxcbmxhbm9saW4vTVxcbmxhbnRlcm4vTVNcXG5sYW50aGFudW0vTVxcbmxhbnlhcmQvTVNcXG5sYXAvU01cXG5sYXBhcm9zY29waWNcXG5sYXBhcm9zY29weVxcbmxhcGFyb3RvbXlcXG5sYXBib2FyZC9TTVxcbmxhcGRvZy9TTVxcbmxhcGVsL1NNXFxubGFwaWRhcnkvU01cXG5sYXBpbi9TTVxcbmxhcHBlZFxcbmxhcHBldC9TTVxcbmxhcHBpbmdcXG5sYXBzZS9BS0dNU0RcXG5sYXB0b3AvU01cXG5sYXB3aW5nL01TXFxubGFyYm9hcmQvU01cXG5sYXJjZW5pc3QvU01cXG5sYXJjZW5vdXNcXG5sYXJjZW55L1NNXFxubGFyY2gvTVNcXG5sYXJkL01EUlNaR1xcbmxhcmRlci9NXFxubGFyZHkvUlRcXG5sYXJnZS9SU1BNWVRcXG5sYXJnZWhlYXJ0ZWRcXG5sYXJnZW5lc3MvTVxcbmxhcmdlc3MvTVxcbmxhcmdpc2hcXG5sYXJnby9TTVxcbmxhcmlhdC9TTVxcbmxhcmsvTURTR1xcbmxhcmtzcHVyL1NNXFxubGFydmEvTVxcbmxhcnZhZVxcbmxhcnZhbFxcbmxhcnluZ2VhbFxcbmxhcnluZ2VzXFxubGFyeW5naXRpcy9NXFxubGFyeW54L01cXG5sYXNhZ25hL01TXFxubGFzY2l2aW91cy9ZUFxcbmxhc2NpdmlvdXNuZXNzL01cXG5sYXNlL1pHRFJTXFxubGFzZXIvTVxcbmxhc2gvTURTR0pcXG5sYXNoaW5nL01cXG5sYXNzL01TXFxubGFzc2llL1NNXFxubGFzc2l0dWRlL01cXG5sYXNzby9TTURHXFxubGFzdC9NRFlTR1xcbmxhc3RpbmcvWVxcbmxhdC9TXFxubGF0Y2gnc1xcbmxhdGNoL1VEU0dcXG5sYXRjaGtleS9TTVxcbmxhdGUvWVRSUFxcbmxhdGVjb21lci9NU1xcbmxhdGVuY3kvTVxcbmxhdGVuZXNzL01cXG5sYXRlbnRcXG5sYXRlcmFsL01EWVNHXFxubGF0ZXN0L01cXG5sYXRleC9NXFxubGF0aC9NRFJTWkdcXG5sYXRoZS9NXFxubGF0aGVyL0dNRFxcbmxhdGhlcnlcXG5sYXRoc1xcbmxhdGljZXNcXG5sYXRpc2hcXG5sYXRpdHVkZS9NU1xcbmxhdGl0dWRpbmFsXFxubGF0aXR1ZGluYXJpYW4vTVNcXG5sYXRyaW5lL01TXFxubGF0dGUvUlNNXFxubGF0dGVyL01ZXFxubGF0dGljZS9NRFNcXG5sYXR0aWNld29yay9TTVxcbmxhdWQvTURTR0JcXG5sYXVkYWJseVxcbmxhdWRhbnVtL01cXG5sYXVkYXRvcnlcXG5sYXVnaC9CTURHXFxubGF1Z2hhYmx5XFxubGF1Z2hpbmcvTVlcXG5sYXVnaGluZ3N0b2NrL1NNXFxubGF1Z2hzXFxubGF1Z2h0ZXIvTVxcbmxhdW5jaC9BR01EU1xcbmxhdW5jaGVyL1NNXFxubGF1bmNocGFkL1NNXFxubGF1bmRlci9EUlpHU1xcbmxhdW5kZXJlci9NXFxubGF1bmRlcmV0dGUvU01cXG5sYXVuZHJlc3MvTVNcXG5sYXVuZHJvbWF0L01TXFxubGF1bmRyeS9TTVxcbmxhdW5kcnltYW4vTVxcbmxhdW5kcnltZW5cXG5sYXVuZHJ5d29tYW4vTVxcbmxhdW5kcnl3b21lblxcbmxhdXJlYXRlL01TXFxubGF1cmVhdGVzaGlwL01cXG5sYXVyZWwvU01cXG5sYXYvU0dEXFxubGF2YS9NXFxubGF2YWdlL01cXG5sYXZhbGllcmUvU01cXG5sYXZhdG9yaWFsXFxubGF2YXRvcnkvU01cXG5sYXZlL1NcXG5sYXZlbmRlci9TTVxcbmxhdmlzaC9QVEdEUlNZXFxubGF2aXNobmVzcy9NXFxubGF3L1NNXFxubGF3YnJlYWtlci9TTVxcbmxhd2JyZWFraW5nL01cXG5sYXdmdWwvVVBZXFxubGF3ZnVsbmVzcy9VTVxcbmxhd2dpdmVyL01TXFxubGF3bGVzcy9QWVxcbmxhd2xlc3NuZXNzL01cXG5sYXdtYWtlci9NU1xcbmxhd21ha2luZy9NXFxubGF3bWFuL01cXG5sYXdtZW5cXG5sYXduL01TXFxubGF3bm1vd2VyL1NNXFxubGF3cmVuY2l1bS9NXFxubGF3c3VpdC9NU1xcbmxhd3llci9TTVxcbmxheC9UUllQXFxubGF4YXRpdmUvTVNcXG5sYXhpdHkvTVxcbmxheG5lc3MvTVxcbmxheS9BSUNTR01cXG5sYXlhYm91dC9TXFxubGF5YXdheS9NXFxubGF5ZXIvQ1NNXFxubGF5ZXJlZFxcbmxheWVyaW5nL01cXG5sYXlldHRlL01TXFxubGF5bWFuL01cXG5sYXltZW5cXG5sYXlvZmYvU01cXG5sYXlvdXQvU01cXG5sYXlvdmVyL01TXFxubGF5cGVvcGxlXFxubGF5cGVyc29uL01TXFxubGF5dXAvU01cXG5sYXl3b21hbi9NXFxubGF5d29tZW5cXG5sYXplL01HRFNcXG5sYXppbHlcXG5sYXppbmVzcy9NXFxubGF6eS9EUlNUR1BcXG5sYXp5Ym9uZXMvTVxcbmxiL1NcXG5sYndcXG5sZWEvU01cXG5sZWFjaC9EU0dcXG5sZWFkL01ETlJTWkdcXG5sZWFkZXIvTVxcbmxlYWRlcmxlc3NcXG5sZWFkZXJzaGlwL1NNXFxubGVhZGluZy9NXFxubGVhZi9NRFNHXFxubGVhZmFnZS9NXFxubGVhZmxlc3NcXG5sZWFmbGV0L0dNRFNcXG5sZWFmc3RhbGsvTVNcXG5sZWFmeS9SVFxcbmxlYWd1ZS9EU01HXFxubGVhay9NRFNHXFxubGVha2FnZS9NU1xcbmxlYWtpbmVzcy9NXFxubGVha3kvUFJUXFxubGVhbi9NRFJTVEdKUFxcbmxlYW5pbmcvTVxcbmxlYW5uZXNzL01cXG5sZWFwL01EUlNaR1xcbmxlYXBlci9NXFxubGVhcGZyb2cvTVNcXG5sZWFwZnJvZ2dlZFxcbmxlYXBmcm9nZ2luZ1xcbmxlYXB0XFxubGVhcm4vQVVHRFNcXG5sZWFybmFiaWxpdHlcXG5sZWFybmFibGVcXG5sZWFybmVkbHlcXG5sZWFybmVyL01TXFxubGVhcm5pbmcnc1xcbmxlYXNlL0FEU01HXFxubGVhc2ViYWNrL1NNXFxubGVhc2Vob2xkL01SU1pcXG5sZWFzZWhvbGRlci9NXFxubGVhc2VyL1NNXFxubGVhc2gnc1xcbmxlYXNoL1VEU0dcXG5sZWFzdC9NXFxubGVhc3R3aXNlXFxubGVhdGhlci9NU1xcbmxlYXRoZXJldHRlL01cXG5sZWF0aGVybmVjay9NU1xcbmxlYXRoZXJ5XFxubGVhdmUvRFJTTVpHSlxcbmxlYXZlbi9TR01EXFxubGVhdmVuZWQvVVxcbmxlYXZlbmluZy9NXFxubGVhdmVyL01cXG5sZWF2aW5ncy9NXFxubGVjaC9NRFJTWkdcXG5sZWNoZXIvTVxcbmxlY2hlcm91cy9QWVxcbmxlY2hlcm91c25lc3MvTVxcbmxlY2hlcnkvTVxcbmxlY2l0aGluL01cXG5sZWN0ZXJuL01TXFxubGVjdHVyZS9NWkdEUlNcXG5sZWN0dXJlci9NXFxubGVjdHVyZXNoaXAvU01cXG5sZWRnZS9SU01aXFxubGVkZ2VyL01cXG5sZWUvUlNNWlxcbmxlZWNoL01EU0dcXG5sZWVrL01TXFxubGVlci9NREdcXG5sZWVyaW5lc3MvTVxcbmxlZXJ5L1JQVFxcbmxlZXdhcmQvU01cXG5sZWV3YXkvTVxcbmxlZnQvTVJTVFxcbmxlZnRpc20vTVxcbmxlZnRpc3QvU01cXG5sZWZ0bW9zdFxcbmxlZnRvdmVyL1NNXFxubGVmdHdhcmQvU1xcbmxlZnR5L1NNXFxubGVnL1NNXFxubGVnYWN5L1NNXFxubGVnYWwvU01ZXFxubGVnYWxlc2UvTVxcbmxlZ2FsaXNtL01TXFxubGVnYWxpc3RpY1xcbmxlZ2FsaXN0aWNhbGx5XFxubGVnYWxpdHkvU01cXG5sZWdhbGl6YXRpb24vTVxcbmxlZ2FsaXplL0dEU1xcbmxlZ2F0ZS9DWE1OU1xcbmxlZ2F0ZWUvTVNcXG5sZWdhdGlvbidzL0FDXFxubGVnYXRvL1NNXFxubGVnZW5kL1NNXFxubGVnZW5kYXJpbHlcXG5sZWdlbmRhcnlcXG5sZWdlcmRlbWFpbi9NXFxubGVnZ2VkXFxubGVnZ2luZXNzL01cXG5sZWdnaW5nL01TXFxubGVnZ3kvUlBUXFxubGVnaG9ybi9NU1xcbmxlZ2liaWxpdHkvTVxcbmxlZ2libGVcXG5sZWdpYmx5XFxubGVnaW9uL1NNXFxubGVnaW9uYXJ5L1NNXFxubGVnaW9ubmFpcmUvU01cXG5sZWdpc2xhdGUvRFNHTlZcXG5sZWdpc2xhdGlvbi9NXFxubGVnaXNsYXRpdmUvWVxcbmxlZ2lzbGF0b3IvTVNcXG5sZWdpc2xhdHVyZS9TTVxcbmxlZ2l0XFxubGVnaXRpbWFjeS9NXFxubGVnaXRpbWF0ZS9EU1lHXFxubGVnaXRpbWF0aXplL0dEU1xcbmxlZ2l0aW1pemF0aW9uL01cXG5sZWdpdGltaXplL0RTR1xcbmxlZ2xlc3NcXG5sZWdtYW4vTVxcbmxlZ21lblxcbmxlZ3Jvb20vU01cXG5sZWd1bWUvTVNcXG5sZWd1bWlub3VzXFxubGVnd2FybWVyL1NcXG5sZWd3b3JrL01cXG5sZWkvU01cXG5sZWlzdXJlL0RNWVxcbmxlaXN1cmVsaW5lc3MvTVxcbmxlaXN1cmV3ZWFyL01cXG5sZWl0bW90aWYvTVNcXG5sZWl0bW90aXYvTVNcXG5sZW1tYS9TXFxubGVtbWUvSkdcXG5sZW1taW5nL01cXG5sZW1vbi9TTVxcbmxlbW9uYWRlL1NNXFxubGVtb25ncmFzc1xcbmxlbW9ueVxcbmxlbXVyL1NNXFxubGVuZC9SU1pHXFxubGVuZGVyL01cXG5sZW5ndGgvTU5YXFxubGVuZ3RoZW4vR0RcXG5sZW5ndGhpbHlcXG5sZW5ndGhpbmVzcy9NXFxubGVuZ3Roc1xcbmxlbmd0aHdpc2VcXG5sZW5ndGh5L1BSVFxcbmxlbmllbmNlL01cXG5sZW5pZW5jeS9NXFxubGVuaWVudC9ZXFxubGVuaXRpdmVcXG5sZW5zL01TXFxubGVudFxcbmxlbnRpbC9NU1xcbmxlbnRvXFxubGVvbmluZVxcbmxlb3BhcmQvU01cXG5sZW9wYXJkZXNzL01TXFxubGVvdGFyZC9TTVxcbmxlcGVyL1NNXFxubGVwcmVjaGF1bi9NU1xcbmxlcHJvc3kvTVxcbmxlcHJvdXNcXG5sZXB0YVxcbmxlcHRvbi9NU1xcbmxlc2JpYW4vU01cXG5sZXNiaWFuaXNtL01cXG5sZXNpb24vTVNcXG5sZXNzL01OUlhcXG5sZXNzZWUvTVNcXG5sZXNzZW4vR0RcXG5sZXNzb24vTVNcXG5sZXNzb3IvTVNcXG5sZXQvSVNNXFxubGV0ZG93bi9TTVxcbmxldGhhbC9ZXFxubGV0aGFyZ2ljXFxubGV0aGFyZ2ljYWxseVxcbmxldGhhcmd5L01cXG5sZXR0ZXIvWkdNRFJTXFxubGV0dGVyYm9tYi9TXFxubGV0dGVyYm94L1NcXG5sZXR0ZXJlZC9VXFxubGV0dGVyZXIvTVxcbmxldHRlcmhlYWQvTVNcXG5sZXR0ZXJpbmcvTVxcbmxldHRlcnByZXNzL01cXG5sZXR0aW5nL1NcXG5sZXR0dWNlL01TXFxubGV0dXAvU01cXG5sZXVjaW5lXFxubGV1Y290b215L1NcXG5sZXVrZW1pYS9NXFxubGV1a2VtaWMvU01cXG5sZXVrb2N5dGUvTVNcXG5sZXZlZS9TTVxcbmxldmVsL1BTWkdNRFJZXFxubGV2ZWxlci9NXFxubGV2ZWxoZWFkZWQvUFxcbmxldmVsaGVhZGVkbmVzcy9NXFxubGV2ZWxuZXNzL01cXG5sZXZlci9TR01EXFxubGV2ZXJhZ2Unc1xcbmxldmVyYWdlL0NEU0dcXG5sZXZpYXRoYW4vTVNcXG5sZXZpZXIvTVxcbmxldml0YXRlL0RTR05cXG5sZXZpdGF0aW9uL01cXG5sZXZpdHkvTVxcbmxldnkvRFJTTVpHXFxubGV3ZC9SWVBUXFxubGV3ZG5lc3MvTVxcbmxleGVyL1NcXG5sZXhpY2FsXFxubGV4aWNvZ3JhcGhlci9NU1xcbmxleGljb2dyYXBoaWNcXG5sZXhpY29ncmFwaGljYWxcXG5sZXhpY29ncmFwaHkvTVxcbmxleGljb24vU01cXG5sZXhpc1xcbmxnXFxubGlhYmlsaXRpZXNcXG5saWFiaWxpdHkvQU1cXG5saWFibGUvQVxcbmxpYWlzZS9HRFNcXG5saWFpc29uL01TXFxubGlhci9NU1xcbmxpYi9NXFxubGliYXRpb24vU01cXG5saWJiZXIvTVNcXG5saWJlbC9TWkdNRFJcXG5saWJlbGVyL01cXG5saWJlbG91c1xcbmxpYmVyYWwvTVlQU1xcbmxpYmVyYWxpc20vTVxcbmxpYmVyYWxpdHkvTVxcbmxpYmVyYWxpemF0aW9uL1NNXFxubGliZXJhbGl6ZS9HRFNcXG5saWJlcmFsbmVzcy9NXFxubGliZXJhdGUvQ0RTR05cXG5saWJlcmF0aW9uL0NNXFxubGliZXJhdG9yL01TXFxubGliZXJ0YXJpYW4vU01cXG5saWJlcnRpbmUvTVNcXG5saWJlcnR5L1NNXFxubGliaWRpbmFsXFxubGliaWRpbm91c1xcbmxpYmlkby9NU1xcbmxpYnJhcmlhbi9NU1xcbmxpYnJhcmlhbnNoaXBcXG5saWJyYXJ5L1NNXFxubGlicmV0dGlzdC9NU1xcbmxpYnJldHRvL1NNXFxubGljZVxcbmxpY2Vuc2UvTUdEU1xcbmxpY2Vuc2VkL1VcXG5saWNlbnNlZS9NU1xcbmxpY2VudGlhdGUvU01cXG5saWNlbnRpb3VzL1lQXFxubGljZW50aW91c25lc3MvTVxcbmxpY2hlbi9NU1xcbmxpY2l0L1lcXG5saWNrL01ESlNHXFxubGlja2luZy9NXFxubGljb3JpY2UvU01cXG5saWQvU01cXG5saWRkZWRcXG5saWRsZXNzXFxubGlkby9NU1xcbmxpZS9EU01cXG5saWVkL01SXFxubGllZi9SVFxcbmxpZWdlL1NNXFxubGllbi9NU1xcbmxpZXUvTVxcbmxpZXV0ZW5hbmN5L01cXG5saWV1dGVuYW50L01TXFxubGlmZS9NWlJcXG5saWZlYmVsdC9TXFxubGlmZWJsb29kL01cXG5saWZlYm9hdC9NU1xcbmxpZmVidW95L01TXFxubGlmZWZvcm1zXFxubGlmZWd1YXJkL1NNXFxubGlmZWxlc3MvWVBcXG5saWZlbGVzc25lc3MvTVxcbmxpZmVsaWtlXFxubGlmZWxpbmUvTVNcXG5saWZlbG9uZ1xcbmxpZmVyL01cXG5saWZlc2F2ZXIvU01cXG5saWZlc2F2aW5nL01cXG5saWZlc3Bhbi9TXFxubGlmZXN0eWxlL1NNXFxubGlmZXRpbWUvTVNcXG5saWZld29yay9NU1xcbmxpZnQvTURSU1pHXFxubGlmdGVyL01cXG5saWZ0b2ZmL1NNXFxubGlnYW1lbnQvTVNcXG5saWdhdGUvR05EU1xcbmxpZ2F0aW9uL01cXG5saWdhdHVyZS9NR0RTXFxubGlnaHQncy9DXFxubGlnaHQvQ0FTVEdEXFxubGlnaHRlZC9VXFxubGlnaHRlbi9TRFJaR1xcbmxpZ2h0ZW5lci9NXFxubGlnaHRlci9TTVxcbmxpZ2h0ZmFjZS9NRFxcbmxpZ2h0aGVhZGVkXFxubGlnaHRoZWFydGVkL1lQXFxubGlnaHRoZWFydGVkbmVzcy9NXFxubGlnaHRob3VzZS9NU1xcbmxpZ2h0aW5nJ3NcXG5saWdodGx5XFxubGlnaHRuZXNzL01cXG5saWdodG5pbmcvTURTXFxubGlnaHRwcm9vZlxcbmxpZ2h0c2hpcC9NU1xcbmxpZ2h0d2VpZ2h0L1NNXFxubGlnbmVvdXNcXG5saWduaW5cXG5saWduaXRlL01cXG5saWlcXG5saWthYmlsaXR5L01cXG5saWthYmxlL1BcXG5saWthYmxlbmVzcy9NXFxubGlrZS9FTUdEU1RcXG5saWtlbGlob29kL1VNXFxubGlrZWxpaG9vZHNcXG5saWtlbGluZXNzL1VNXFxubGlrZWx5L1VQUlRcXG5saWtlbi9TR0RcXG5saWtlbmVzcy9VTVxcbmxpa2VuZXNzZXNcXG5saWtlclxcbmxpa2V3aXNlXFxubGlraW5nL01cXG5saWxhYy9TTVxcbmxpbGxpcHV0aWFuXFxubGlsby9TXFxubGlsdC9NRFNHXFxubGlseS9TTVxcbmxpbWIvTVNcXG5saW1iZXIvVURTR1xcbmxpbWJlcm5lc3MvTVxcbmxpbWJsZXNzXFxubGltYm8vU01cXG5saW1lL01HRFNcXG5saW1lYWRlL1NNXFxubGltZWxpZ2h0L01cXG5saW1lcmljay9TTVxcbmxpbWVzY2FsZVxcbmxpbWVzdG9uZS9NXFxubGltZXkvU1xcbmxpbWl0J3NcXG5saW1pdC9DU1pHRFJcXG5saW1pdGF0aW9uL0NNXFxubGltaXRhdGlvbnNcXG5saW1pdGVkL1VcXG5saW1pdGVyJ3NcXG5saW1pdGluZy9TXFxubGltaXRsZXNzL1BcXG5saW1pdGxlc3NuZXNzL01cXG5saW1uL0RTR1xcbmxpbW8vTVNcXG5saW1vdXNpbmUvTVNcXG5saW1wL01EUllTUFRHXFxubGltcGV0L01TXFxubGltcGlkL1lQXFxubGltcGlkaXR5L01cXG5saW1waWRuZXNzL01cXG5saW1wbmVzcy9NXFxubGlteS9SVFxcbmxpbmFnZS9NXFxubGluY2hwaW4vU01cXG5saW5kZW4vTVNcXG5saW5lL01aR0RSU0pcXG5saW5lYWdlL01TXFxubGluZWFsL1lcXG5saW5lYW1lbnQvU01cXG5saW5lYXIvWVxcbmxpbmVhcml0eS9NXFxubGluZWJhY2tlci9NU1xcbmxpbmVkL1VcXG5saW5lZmVlZFxcbmxpbmVtYW4vTVxcbmxpbmVtZW5cXG5saW5lbi9TTVxcbmxpbmVucy9NXFxubGluZXIvTVxcbmxpbmVzbWFuL01cXG5saW5lc21lblxcbmxpbmV1cC9NU1xcbmxpbmcvTVxcbmxpbmdlci9aR0pEUlNcXG5saW5nZXJlci9NXFxubGluZ2VyaWUvTVxcbmxpbmdlcmluZy9ZXFxubGluZ28vTVxcbmxpbmdvZXNcXG5saW5ndWFsXFxubGluZ3VpbmUvTVxcbmxpbmd1aXN0L1NNXFxubGluZ3Vpc3RpYy9TXFxubGluZ3Vpc3RpY2FsbHlcXG5saW5ndWlzdGljcy9NXFxubGluaW1lbnQvU01cXG5saW5pbmcvTVxcbmxpbmsvTURSU0dcXG5saW5rYWdlL01TXFxubGlua21hblxcbmxpbmttZW5cXG5saW5rdXAvTVNcXG5saW5uZXQvTVNcXG5saW5vXFxubGlub2xldW0vTVxcbmxpbnNlZWQvTVxcbmxpbnQnc1xcbmxpbnQvQ0RHXFxubGludGVsL01TXFxubGludHNcXG5saW50eS9UUlxcbmxpb24vTVNcXG5saW9uZXNzL01TXFxubGlvbmhlYXJ0ZWRcXG5saW9uaXphdGlvbi9NXFxubGlvbml6ZS9HRFNcXG5saXAvU01cXG5saXBpZC9TTVxcbmxpcG9zdWN0aW9uL01cXG5saXBwZWRcXG5saXBweVxcbmxpcHJlYWQvR1JTXFxubGlwcmVhZGVyL01cXG5saXByZWFkaW5nL01cXG5saXBzdGljay9NRFNHXFxubGlxXFxubGlxdWVmYWN0aW9uL01cXG5saXF1ZWZ5L0RTR1xcbmxpcXVldXIvU01cXG5saXF1aWQvTVNcXG5saXF1aWRhdGUvWEdORFNcXG5saXF1aWRhdGlvbi9NXFxubGlxdWlkYXRvci9NU1xcbmxpcXVpZGl0eS9NXFxubGlxdWlkaXplL1pHRFJTXFxubGlxdWlkaXplci9NXFxubGlxdW9yL01ER1NcXG5saXJhL01cXG5saXJlXFxubGlzbGUvTVxcbmxpc3AvTURSU1pHXFxubGlzcGVyL01cXG5saXNzb21lXFxubGlzdC9NRE5TSlhHXFxubGlzdGVkL1VcXG5saXN0ZW4vQk1EUlpHXFxubGlzdGVuZXIvTVxcbmxpc3RlcmlhXFxubGlzdGluZy9NXFxubGlzdGxlc3MvWVBcXG5saXN0bGVzc25lc3MvTVxcbmxpdC9aUlxcbmxpdGFueS9TTVxcbmxpdGNoaS9NU1xcbmxpdGVcXG5saXRlci9NXFxubGl0ZXJhY3kvTVxcbmxpdGVyYWwvU01ZUFxcbmxpdGVyYWxuZXNzL01cXG5saXRlcmFyaW5lc3MvTVxcbmxpdGVyYXJ5L1BcXG5saXRlcmF0ZS9TTVlcXG5saXRlcmF0aS9NXFxubGl0ZXJhdHVyZS9NXFxubGl0aGUvUlBZVFxcbmxpdGhlbmVzcy9NXFxubGl0aGVzb21lXFxubGl0aGl1bS9NXFxubGl0aG9ncmFwaC9NRFJaR1xcbmxpdGhvZ3JhcGhlci9NXFxubGl0aG9ncmFwaGljXFxubGl0aG9ncmFwaGljYWxseVxcbmxpdGhvZ3JhcGhzXFxubGl0aG9ncmFwaHkvTVxcbmxpdGhvc3BoZXJlL1NNXFxubGl0aWdhbnQvU01cXG5saXRpZ2F0ZS9EU0dOXFxubGl0aWdhdGlvbi9NXFxubGl0aWdhdG9yL01TXFxubGl0aWdpb3VzL1BcXG5saXRpZ2lvdXNuZXNzL01cXG5saXRtdXMvTVxcbmxpdG90ZXMvTVxcbmxpdHRlci9NRFJTWkdcXG5saXR0ZXJhdGV1ci9NU1xcbmxpdHRlcmJ1Zy9NU1xcbmxpdHRlcmVyL01cXG5saXR0bGUvTVRSUFxcbmxpdHRsZW5lc3MvTVxcbmxpdHRvcmFsL1NNXFxubGl0dXJnaWNhbC9ZXFxubGl0dXJnaXN0L1NNXFxubGl0dXJneS9TTVxcbmxpdmFiaWxpdHkvTVxcbmxpdmFibGUvVVxcbmxpdmUvQVRHRFNCXFxubGl2ZWxpaG9vZC9TTVxcbmxpdmVsaW5lc3MvTVxcbmxpdmVsb25nL1NcXG5saXZlbHkvUFJUXFxubGl2ZW4vU0dEXFxubGl2ZXInc1xcbmxpdmVyL1NcXG5saXZlcmllZFxcbmxpdmVyaXNoXFxubGl2ZXJ3b3J0L01TXFxubGl2ZXJ3dXJzdC9NXFxubGl2ZXJ5L0NTTVxcbmxpdmVyeW1hbi9DTVxcbmxpdmVyeW1lbi9DXFxubGl2ZXN0b2NrL01cXG5saXZld2FyZVxcbmxpdmlkL1lcXG5saXZpbmcvTVNcXG5saXgvS1xcbmxpemFyZC9NU1xcbmxsXFxubGxhbWEvU01cXG5sbGFuby9TTVxcbmxvXFxubG9hZCdzXFxubG9hZC9BVUdTRFxcbmxvYWRhYmxlXFxubG9hZGVyL01TXFxubG9hZGluZydzXFxubG9hZi9NRFJTWkdcXG5sb2FmZXIvTVxcbmxvYW0vTVxcbmxvYW15L1RSXFxubG9hbi9NRFJTWkdcXG5sb2FuZXIvTVxcbmxvYW5zaGFya2luZy9NXFxubG9hbndvcmQvTVNcXG5sb2F0aC9KWkdEUlNcXG5sb2F0aGVcXG5sb2F0aGVyL01cXG5sb2F0aGluZy9NXFxubG9hdGhzb21lL1BZXFxubG9hdGhzb21lbmVzcy9NXFxubG9hdmVzXFxubG9iL1NNRFxcbmxvYmFyXFxubG9iYmVkXFxubG9iYmVyL01TXFxubG9iYmluZ1xcbmxvYmJ5L0dEU01cXG5sb2JieWlzdC9NU1xcbmxvYmUvTVNcXG5sb2JvdG9taXplL0RTR1xcbmxvYm90b215L1NNXFxubG9ic3Rlci9NU1xcbmxvY2FsL1NNWVxcbmxvY2FsZS9NU1xcbmxvY2FsaXR5L1NNXFxubG9jYWxpemF0aW9uL01cXG5sb2NhbGl6ZS9EU0dcXG5sb2NhdGUvRUFHTkRTXFxubG9jYXRpb24ncy9BXFxubG9jYXRpb24vRVNNXFxubG9jYXRvci9NU1xcbmxvY2F2b3JlL1NNXFxubG9jaVxcbmxvY2svTURSU0JaR1xcbmxvY2tlci9NXFxubG9ja2V0L01TXFxubG9ja2phdy9NXFxubG9ja291dC9NU1xcbmxvY2tzbWl0aC9NXFxubG9ja3NtaXRoc1xcbmxvY2tzdGVwL01cXG5sb2NrdXAvTVNcXG5sb2NvL1NcXG5sb2NvbW90aW9uL01cXG5sb2NvbW90aXZlL01TXFxubG9jb3dlZWQvU01cXG5sb2N1bS9TXFxubG9jdXMvTVxcbmxvY3VzdC9TTVxcbmxvY3V0aW9uL01TXFxubG9kZS9NU1xcbmxvZGVzdGFyL01TXFxubG9kZXN0b25lL01TXFxubG9kZ2UvRFJTSk1aR1xcbmxvZGdlci9NXFxubG9kZ2luZy9NXFxubG9kZ2luZ3MvTVxcbmxvZnQvTURTR1xcbmxvZnRpbHlcXG5sb2Z0aW5lc3MvTVxcbmxvZnR5L1BSVFxcbmxvZy9TTVxcbmxvZ2FuYmVycnkvU01cXG5sb2dhcml0aG0vU01cXG5sb2dhcml0aG1pY1xcbmxvZ2Jvb2svU01cXG5sb2dlL01TXFxubG9nZ2VkXFxubG9nZ2VyL1NNXFxubG9nZ2VyaGVhZC9TTVxcbmxvZ2dpYS9TTVxcbmxvZ2dpbmcvTVxcbmxvZ2ljL01cXG5sb2dpY2FsL1lcXG5sb2dpY2FsaXR5L01cXG5sb2dpY2lhbi9NU1xcbmxvZ2luL1NNXFxubG9naXN0aWMvU1xcbmxvZ2lzdGljYWwvWVxcbmxvZ2lzdGljcy9NXFxubG9namFtL1NNXFxubG9nby9NU1xcbmxvZ29mZi9TTVxcbmxvZ29uL1NNXFxubG9nb3R5cGUvU01cXG5sb2dvdXQvU01cXG5sb2dyb2xsaW5nL01cXG5sb2d5L1JUXFxubG9pbi9NU1xcbmxvaW5jbG90aC9NXFxubG9pbmNsb3Roc1xcbmxvaXRlci9aR1NEUlxcbmxvaXRlcmVyL01cXG5sb2l0ZXJpbmcvTVxcbmxvbGNhdC9TTVxcbmxvbGwvRFNHXFxubG9sbGlwb3AvU01cXG5sb2xsb3AvR1NEXFxubG9sbHkvU1xcbmxvbGx5Z2FnL1NcXG5sb2xseWdhZ2dlZFxcbmxvbGx5Z2FnZ2luZ1xcbmxvbmUvWVpSXFxubG9uZWxpbmVzcy9NXFxubG9uZWx5L1BUUlxcbmxvbmVyL01cXG5sb25lc29tZS9ZUFxcbmxvbmVzb21lbmVzcy9NXFxubG9uZydzXFxubG9uZy9LRFNUR1xcbmxvbmdib2F0L01TXFxubG9uZ2Jvdy9NU1xcbmxvbmdlclxcbmxvbmdldml0eS9NXFxubG9uZ2hhaXIvTVNcXG5sb25naGFuZC9NXFxubG9uZ2hvcm4vTVNcXG5sb25naG91c2UvU1xcbmxvbmdpbmcvTVlTXFxubG9uZ2lzaFxcbmxvbmdpdHVkZS9NU1xcbmxvbmdpdHVkaW5hbC9ZXFxubG9uZ3Nob3JlbWFuL01cXG5sb25nc2hvcmVtZW5cXG5sb25nc2lnaHRlZFxcbmxvbmdzdGFuZGluZ1xcbmxvbmd0aW1lXFxubG9uZ3VldXIvU01cXG5sb25nd2F5c1xcbmxvb1xcbmxvb2ZhaC9NXFxubG9vZmFoc1xcbmxvb2svTURSU1pHXFxubG9va2FsaWtlL01TXFxubG9va2VyL01cXG5sb29rb3V0L01TXFxubG9va3VwXFxubG9vbS9NRFNHXFxubG9vbi9NU1xcbmxvb25pZS9NXFxubG9vbnkvUlNNVFxcbmxvb3AvTURTR1xcbmxvb3Bob2xlL01TXFxubG9vcHkvUlRcXG5sb29zL05SWFxcbmxvb3NlL1VEU1RHXFxubG9vc2VseVxcbmxvb3Nlbi9VR1NEXFxubG9vc2VuZXNzL01cXG5sb290L01EUlNaR1xcbmxvb3Rlci9NXFxubG9vdGluZy9NXFxubG9wL1NcXG5sb3BlL01HRFNcXG5sb3BwZWRcXG5sb3BwaW5nXFxubG9wc2lkZWQvWVBcXG5sb3BzaWRlZG5lc3MvTVxcbmxvcXVhY2lvdXMvUFlcXG5sb3F1YWNpb3VzbmVzcy9NXFxubG9xdWFjaXR5L01cXG5sb3JkL01EWVNHXFxubG9yZGxpbmVzcy9NXFxubG9yZGx5L1RQUlxcbmxvcmRzaGlwL1NNXFxubG9yZS9NXFxubG9yZ25ldHRlL1NNXFxubG9yaXMvTVNcXG5sb3JuXFxubG9ycnkvU01cXG5sb3NlL1pHUlNKXFxubG9zZXIvTVxcbmxvc2luZy9NXFxubG9zcy9NU1xcbmxvc3NsZXNzXFxubG9zdFxcbmxvdC9TTVxcbmxvdGlvbi9TTVxcbmxvdHRlcnkvU01cXG5sb3R0by9NXFxubG90dXMvTVNcXG5sb3VjaGVcXG5sb3VkL1JZVFBcXG5sb3VkaGFpbGVyL1NNXFxubG91ZG1vdXRoL01EXFxubG91ZG1vdXRoc1xcbmxvdWRuZXNzL01cXG5sb3Vkc3BlYWtlci9NU1xcbmxvdWdoXFxubG91Z2hzXFxubG91bmdlL01aR0RSU1xcbmxvdW5nZXIvTVxcbmxvdXIvRFNHXFxubG91c2Unc1xcbmxvdXNlL0NEU0dcXG5sb3VzaWx5XFxubG91c2luZXNzL01cXG5sb3VzeS9UUFJcXG5sb3V0L01TXFxubG91dGlzaC9QWVxcbmxvdXZlci9NRFNcXG5sb3ZhYmxlbmVzcy9NXFxubG92YWJseVxcbmxvdmUvTVlaR0RSU0JcXG5sb3ZlYmlyZC9TTVxcbmxvdmVjaGlsZC9NXFxubG92ZWQvVVxcbmxvdmVsZXNzXFxubG92ZWxpbmVzcy9NXFxubG92ZWxvcm5cXG5sb3ZlbHkvUlNNVFBcXG5sb3ZlbWFraW5nL01cXG5sb3Zlci9NXFxubG92ZXNpY2tcXG5sb3ZleS9TXFxubG92aW5nL1lcXG5sb3cvU1pUR01EUllQXFxubG93Ym9yblxcbmxvd2JveS9NU1xcbmxvd2Jyb3cvU01cXG5sb3dkb3duL01cXG5sb3dlci9HRFxcbmxvd2VyY2FzZS9NXFxubG93ZXJtb3N0XFxubG93aXNoXFxubG93bGFuZC9TWk1SXFxubG93bGFuZGVyL01cXG5sb3dsaWZlL1NNXFxubG93bGluZXNzL01cXG5sb3dseS9UUFJcXG5sb3duZXNzL01cXG5sb3gvTVxcbmxveWFsL0VUWVxcbmxveWFsZXJcXG5sb3lhbGlzbS9NXFxubG95YWxpc3QvU01cXG5sb3lhbHRpZXNcXG5sb3lhbHR5L0VNXFxubG96ZW5nZS9TTVxcbmx0ZFxcbmx1YXUvTVNcXG5sdWJiZXIvTVlTXFxubHViZS9NR0RTXFxubHVicmljYW50L1NNXFxubHVicmljYXRlL0RTR05cXG5sdWJyaWNhdGlvbi9NXFxubHVicmljYXRvci9NU1xcbmx1YnJpY2lvdXMvWVxcbmx1YnJpY2l0eS9NXFxubHVjaWQvUFlcXG5sdWNpZGl0eS9NXFxubHVjaWRuZXNzL01cXG5sdWNrL01EU0dcXG5sdWNraWx5L1VcXG5sdWNraW5lc3MvVU1cXG5sdWNrbGVzc1xcbmx1Y2t5L1VQVFJcXG5sdWNyYXRpdmUvWVBcXG5sdWNyYXRpdmVuZXNzL01cXG5sdWNyZS9NXFxubHVjdWJyYXRlL0dORFNcXG5sdWN1YnJhdGlvbi9NXFxubHVkaWNyb3VzL1lQXFxubHVkaWNyb3VzbmVzcy9NXFxubHVkb1xcbmx1ZmYvRFNHXFxubHVnL1NNXFxubHVnZS9TXFxubHVnZ2FnZS9NXFxubHVnZ2VkXFxubHVnZ2VyL01TXFxubHVnZ2luZ1xcbmx1Z2hvbGUvU1xcbmx1Z3NhaWwvU01cXG5sdWd1YnJpb3VzL1lQXFxubHVndWJyaW91c25lc3MvTVxcbmx1a2V3YXJtL1lQXFxubHVrZXdhcm1uZXNzL01cXG5sdWxsL01EU0dcXG5sdWxsYWJ5L1NNXFxubHVsdS9TXFxubHVtYmFnby9NXFxubHVtYmFyXFxubHVtYmVyL01EUlpHU1xcbmx1bWJlcmVyL01cXG5sdW1iZXJpbmcvTVxcbmx1bWJlcmphY2svU01cXG5sdW1iZXJtYW4vTVxcbmx1bWJlcm1lblxcbmx1bWJlcnlhcmQvU01cXG5sdW1lblxcbmx1bWluYXJ5L1NNXFxubHVtaW5lc2NlbmNlL01cXG5sdW1pbmVzY2VudFxcbmx1bWlub3NpdHkvTVxcbmx1bWlub3VzL1lcXG5sdW1tb3gvTVNcXG5sdW1wL01ETlNHXFxubHVtcGVjdG9teS9TXFxubHVtcGVucHJvbGV0YXJpYXRcXG5sdW1waW5lc3MvTVxcbmx1bXBpc2hcXG5sdW1weS9UUlBcXG5sdW5hY3kvU01cXG5sdW5hclxcbmx1bmF0aWMvU01cXG5sdW5jaC9HTURTXFxubHVuY2hib3gvU1xcbmx1bmNoZW9uL1NNXFxubHVuY2hlb25ldHRlL1NNXFxubHVuY2hyb29tL01TXFxubHVuY2h0aW1lL01TXFxubHVuZy9NRFNHXFxubHVuZ2UvU01cXG5sdW5nZmlzaC9NU1xcbmx1bmdmdWwvU1xcbmx1bmtoZWFkL01TXFxubHVwaW5lL01TXFxubHVwdXMvTVxcbmx1cmNoL0dNRFNcXG5sdXJlL01HRFNcXG5sdXJneVxcbmx1cmlkL1BZXFxubHVyaWRuZXNzL01cXG5sdXJrL0RSU1pHXFxubHVzY2lvdXMvUFlcXG5sdXNjaW91c25lc3MvTVxcbmx1c2gvTVJTWVBUXFxubHVzaG5lc3MvTVxcbmx1c3QvTURSU0dcXG5sdXN0ZXIvTVxcbmx1c3Rlcmxlc3NcXG5sdXN0ZnVsL1lcXG5sdXN0aWx5XFxubHVzdGluZXNzL01cXG5sdXN0cm91cy9ZXFxubHVzdHkvUFRSXFxubHV0YW5pc3QvU01cXG5sdXRlL01TXFxubHV0ZW5pc3QvU01cXG5sdXRldGl1bS9NXFxubHV4XFxubHV4dXJpYW5jZS9NXFxubHV4dXJpYW50L1lcXG5sdXh1cmlhdGUvRFNHTlxcbmx1eHVyaWF0aW9uL01cXG5sdXh1cmlvdXMvUFlcXG5sdXh1cmlvdXNuZXNzL01cXG5sdXh1cnkvU01cXG5sdmlcXG5sdmlpXFxubHhpXFxubHhpaVxcbmx4aXZcXG5seGl4XFxubHh2aVxcbmx4dmlpXFxubHljZXVtL01TXFxubHljaGdhdGUvU1xcbmx5ZS9NR1xcbmx5aW5nL01cXG5seW1waC9NXFxubHltcGhhdGljL1NNXFxubHltcGhvY3l0ZS9TTVxcbmx5bXBob2lkXFxubHltcGhvbWEvU01cXG5seW5jaC9KWkdEUlNcXG5seW5jaGVyL01cXG5seW5jaGluZy9NXFxubHlueC9NU1xcbmx5cmUvTVNcXG5seXJlYmlyZC9NU1xcbmx5cmljL1NNXFxubHlyaWNhbC9ZXFxubHlyaWNpc20vTVxcbmx5cmljaXN0L1NNXFxubHlzb3NvbWFsXFxubHlzb3NvbWVzXFxubS9LQVNcXG5tYSdhbVxcbm1hL1NNSFxcbm1hYy9TR01EXFxubWFjYWJyZVxcbm1hY2FkYW0vTVxcbm1hY2FkYW1pYS9TTVxcbm1hY2FkYW1pemUvR0RTXFxubWFjYXF1ZS9NU1xcbm1hY2Fyb25pL01TXFxubWFjYXJvb24vTVNcXG5tYWNhdy9TTVxcbm1hY2UvTVNcXG5tYWNlcmF0ZS9EU0dOXFxubWFjZXJhdGlvbi9NXFxubWFjaC9NXFxubWFjaGV0ZS9TTVxcbm1hY2hpbmF0ZS9HTkRTWFxcbm1hY2hpbmF0aW9uL01cXG5tYWNoaW5lL0RTTUdCXFxubWFjaGluZXJ5L01cXG5tYWNoaW5pc3QvTVNcXG5tYWNoaXNtby9NXFxubWFjaG8vTVxcbm1hY2tlcmVsL1NNXFxubWFja2luYXcvU01cXG5tYWNraW50b3NoL01TXFxubWFjcmFtZS9NXFxubWFjcm8vU01cXG5tYWNyb2Jpb3RpYy9TXFxubWFjcm9iaW90aWNzL01cXG5tYWNyb2Nvc20vU01cXG5tYWNyb2Vjb25vbWljL1NcXG5tYWNyb2Vjb25vbWljcy9NXFxubWFjcm9sb2d5L1NcXG5tYWNyb24vTVNcXG5tYWNyb3BoYWdlc1xcbm1hY3Jvc2NvcGljXFxubWFkL1NNWVBcXG5tYWRhbS9TTVxcbm1hZGFtZS9NXFxubWFkY2FwL01TXFxubWFkZGVuL0RHU1xcbm1hZGRlbmluZy9ZXFxubWFkZGVyL01TXFxubWFkZGVzdFxcbm1hZGRpbmdcXG5tYWRlL0FVXFxubWFkZW1vaXNlbGxlL01TXFxubWFkaG91c2UvU01cXG5tYWRtYW4vTVxcbm1hZG1lblxcbm1hZG5lc3MvTVxcbm1hZHJhcy9NU1xcbm1hZHJhc2EvU01cXG5tYWRyYXNhaC9NXFxubWFkcmFzYWhzXFxubWFkcmFzc2EvU01cXG5tYWRyaWdhbC9TTVxcbm1hZHdvbWFuL01cXG5tYWR3b21lblxcbm1hZWxzdHJvbS9TTVxcbm1hZXN0cm8vU01cXG5tYWZpYS9TTVxcbm1hZmlvc2lcXG5tYWZpb3NvL01cXG5tYWcvU01cXG5tYWdhemluZS9TTVxcbm1hZ2UvTVNcXG5tYWdlbnRhL01cXG5tYWdnb3QvTVNcXG5tYWdnb3R5XFxubWFnaS9NXFxubWFnaWMvU01cXG5tYWdpY2FsL1lcXG5tYWdpY2lhbi9TTVxcbm1hZ2lja2VkXFxubWFnaWNraW5nXFxubWFnaXN0ZXJpYWwvWVxcbm1hZ2lzdHJhY3kvTVxcbm1hZ2lzdHJhdGUvU01cXG5tYWdtYS9NXFxubWFnbmFuaW1pdHkvTVxcbm1hZ25hbmltb3VzL1lcXG5tYWduYXRlL1NNXFxubWFnbmVzaWEvTVxcbm1hZ25lc2l1bS9NXFxubWFnbmV0L01TXFxubWFnbmV0aWNcXG5tYWduZXRpY2FsbHlcXG5tYWduZXRpc20vTVxcbm1hZ25ldGl0ZS9NXFxubWFnbmV0aXphYmxlXFxubWFnbmV0aXphdGlvbi9DTVxcbm1hZ25ldGl6ZS9DR0RTXFxubWFnbmV0by9TTVxcbm1hZ25ldG9tZXRlci9TTVxcbm1hZ25ldG9zcGhlcmVcXG5tYWduaWZpY2F0aW9uL01cXG5tYWduaWZpY2VuY2UvTVxcbm1hZ25pZmljZW50L1lcXG5tYWduaWZpZXIvTVxcbm1hZ25pZnkvWkdYRFJTTlxcbm1hZ25pbG9xdWVuY2UvTVxcbm1hZ25pbG9xdWVudFxcbm1hZ25pdHVkZS9TTVxcbm1hZ25vbGlhL01TXFxubWFnbm9uXFxubWFnbnVtL01TXFxubWFncGllL01TXFxubWFndXMvTVxcbm1haGFyYWphaC9NXFxubWFoYXJhamFoc1xcbm1haGFyYW5pL1NNXFxubWFoYXJpc2hpL1NNXFxubWFoYXRtYS9TTVxcbm1haG9nYW55L1NNXFxubWFob3V0L01TXFxubWFpZC9NTlNYXFxubWFpZGVuL01ZXFxubWFpZGVuaGFpci9NXFxubWFpZGVuaGVhZC9TTVxcbm1haWRlbmhvb2QvTVxcbm1haWRzZXJ2YW50L1NNXFxubWFpbC9KTURSU1pHXFxubWFpbGJhZy9TTVxcbm1haWxib21iL0dTRFxcbm1haWxib3gvTVNcXG5tYWlsZXIvTVxcbm1haWxpbmcvTVxcbm1haWxsb3QvU01cXG5tYWlsbWFuL01cXG5tYWlsbWVuXFxubWFpbHNob3QvU1xcbm1haW0vRFNHXFxubWFpbi9NWVNcXG5tYWluZnJhbWUvU01cXG5tYWlubGFuZC9NU1xcbm1haW5saW5lL01HRFNcXG5tYWlubWFzdC9NU1xcbm1haW5zYWlsL01TXFxubWFpbnNwcmluZy9NU1xcbm1haW5zdGF5L01TXFxubWFpbnN0cmVhbS9TTURHXFxubWFpbnRhaW4vWkdCRFJTXFxubWFpbnRhaW5hYmlsaXR5XFxubWFpbnRhaW5hYmxlL1VcXG5tYWludGFpbmVkL1VcXG5tYWludGVuYW5jZS9NXFxubWFpbnRvcC9TTVxcbm1haXNvbmV0dGUvTVNcXG5tYWl6ZS9TTVxcbm1hamVzdGljXFxubWFqZXN0aWNhbGx5XFxubWFqZXN0eS9TTVxcbm1ham9saWNhL01cXG5tYWpvci9TR01EWVxcbm1ham9yZG9tby9NU1xcbm1ham9yZXR0ZS9NU1xcbm1ham9yaXRhcmlhbi9TTVxcbm1ham9yaXRhcmlhbmlzbVxcbm1ham9yaXR5L1NNXFxubWFrZSdzL0FcXG5tYWtlL1VBR1NcXG5tYWtlb3Zlci9NU1xcbm1ha2VyL1NNXFxubWFrZXNoaWZ0L1NNXFxubWFrZXVwL01TXFxubWFrZXdlaWdodC9TXFxubWFraW5nL01TXFxubWFraW5ncy9NXFxubWFsYWNoaXRlL01cXG5tYWxhZGp1c3RlZFxcbm1hbGFkanVzdG1lbnQvTVxcbm1hbGFkbWluaXN0cmF0aW9uXFxubWFsYWRyb2l0L1BZXFxubWFsYWRyb2l0bmVzcy9NXFxubWFsYWR5L1NNXFxubWFsYWlzZS9NXFxubWFsYW11dGUvTVNcXG5tYWxhcHJvcGlzbS9TTVxcbm1hbGFyaWEvTVxcbm1hbGFyaWFsXFxubWFsYXJrZXkvTVxcbm1hbGF0aGlvbi9NXFxubWFsY29udGVudC9NU1xcbm1hbGUvTVBTXFxubWFsZWRpY3Rpb24vU01cXG5tYWxlZmFjdGlvbi9NXFxubWFsZWZhY3Rvci9TTVxcbm1hbGVmaWNcXG5tYWxlZmljZW5jZS9NXFxubWFsZWZpY2VudFxcbm1hbGVuZXNzL01cXG5tYWxldm9sZW5jZS9NXFxubWFsZXZvbGVudC9ZXFxubWFsZmVhc2FuY2UvTVxcbm1hbGZvcm1hdGlvbi9TTVxcbm1hbGZvcm1lZFxcbm1hbGZ1bmN0aW9uL01EU0dcXG5tYWxpY2UvTVxcbm1hbGljaW91cy9QWVxcbm1hbGljaW91c25lc3MvTVxcbm1hbGlnbi9EU0dcXG5tYWxpZ25hbmN5L1NNXFxubWFsaWduYW50L1lcXG5tYWxpZ25pdHkvTVxcbm1hbGluZ2VyL1pHU0RSXFxubWFsaW5nZXJlci9NXFxubWFsbC9NU1xcbm1hbGxhcmQvU01cXG5tYWxsZWFiaWxpdHkvTVxcbm1hbGxlYWJsZVxcbm1hbGxldC9NU1xcbm1hbGxvdy9NU1xcbm1hbG5vdXJpc2hlZFxcbm1hbG51dHJpdGlvbi9NXFxubWFsb2NjbHVzaW9uL01cXG5tYWxvZG9yb3VzXFxubWFscHJhY3RpY2UvU01cXG5tYWx0L01EU0dcXG5tYWx0ZWQvTVNcXG5tYWx0b3NlL01cXG5tYWx0cmVhdC9HTERTXFxubWFsdHJlYXRtZW50L01cXG5tYWx0eS9UUlxcbm1hbHdhcmUvTVxcbm1hbS9TXFxubWFtYS9NU1xcbm1hbWJhL1NNXFxubWFtYm8vU0dNRFxcbm1hbW1hL01cXG5tYW1tYWwvTVNcXG5tYW1tYWxpYW4vTVNcXG5tYW1tYXJ5XFxubWFtbW9ncmFtL01TXFxubWFtbW9ncmFwaHkvTVxcbm1hbW1vbi9NXFxubWFtbW90aC9NXFxubWFtbW90aHNcXG5tYW1teS9TTVxcbm1hbidzL0ZcXG5tYW4vVVNZXFxubWFuYWNsZS9EU01HXFxubWFuYWdlL1pHRFJTTFxcbm1hbmFnZWFiaWxpdHkvTVxcbm1hbmFnZWFibGUvVVxcbm1hbmFnZW1lbnQvTVNcXG5tYW5hZ2VyL01cXG5tYW5hZ2VyZXNzL1NcXG5tYW5hZ2VyaWFsXFxubWFuYW5hL01TXFxubWFuYXRlZS9TTVxcbm1hbmRhbGEvU01cXG5tYW5kYW11cy9NU1xcbm1hbmRhcmluL01TXFxubWFuZGF0ZS9EU01HXFxubWFuZGF0b3J5XFxubWFuZGlibGUvTVNcXG5tYW5kaWJ1bGFyXFxubWFuZG9saW4vTVNcXG5tYW5kcmFrZS9NU1xcbm1hbmRyZWwvU01cXG5tYW5kcmlsbC9NU1xcbm1hbmUvTURTXFxubWFuZWdlL01cXG5tYW5ldXZlci9NREdTQkpcXG5tYW5ldXZlcmFiaWxpdHkvTVxcbm1hbmZ1bC9ZXFxubWFuZ2EvTVxcbm1hbmdhbmVzZS9NXFxubWFuZ2UvRFJNWlxcbm1hbmdlci9NXFxubWFuZ2V0b3V0L1NcXG5tYW5naW5lc3MvTVxcbm1hbmdsZS9NWkdEUlNcXG5tYW5nby9NXFxubWFuZ29lc1xcbm1hbmdyb3ZlL01TXFxubWFuZ3kvVFJQXFxubWFuaGFuZGxlL0dEU1xcbm1hbmhvbGUvU01cXG5tYW5ob29kL01cXG5tYW5odW50L1NNXFxubWFuaWEvU01cXG5tYW5pYWMvTVNcXG5tYW5pYWNhbC9ZXFxubWFuaWMvU01cXG5tYW5pY2FsbHlcXG5tYW5pY3VyZS9NR0RTXFxubWFuaWN1cmlzdC9NU1xcbm1hbmlmZXN0L01EWVNHXFxubWFuaWZlc3RhdGlvbi9TTVxcbm1hbmlmZXN0by9TTVxcbm1hbmlmb2xkL0dNRFNcXG5tYW5pa2luL1NNXFxubWFuaWxhL01cXG5tYW5pb2MvTVNcXG5tYW5pcHVsYWJsZVxcbm1hbmlwdWxhdGUvWEdOVkRTXFxubWFuaXB1bGF0aW9uL01cXG5tYW5pcHVsYXRpdmUvWVxcbm1hbmlwdWxhdG9yL01TXFxubWFua2luZC9NXFxubWFua3lcXG5tYW5saWtlXFxubWFubGluZXNzL01cXG5tYW5seS9VVFJcXG5tYW5uYS9NXFxubWFubmVkL1VcXG5tYW5uZXF1aW4vU01cXG5tYW5uZXIvTURZU1xcbm1hbm5lcmlzbS9TTVxcbm1hbm5lcmx5L1VcXG5tYW5uaW5nL1VcXG5tYW5uaXNoL1lQXFxubWFubmlzaG5lc3MvTVxcbm1hbm9tZXRlci9TTVxcbm1hbm9yL1NNXFxubWFub3JpYWxcXG5tYW5wb3dlci9NXFxubWFucXVlXFxubWFuc2FyZC9NU1xcbm1hbnNlL1NYTU5cXG5tYW5zZXJ2YW50L01cXG5tYW5zaW9uL01cXG5tYW5zbGF1Z2h0ZXIvTVxcbm1hbnRhL1NNXFxubWFudGVsL01TXFxubWFudGVscGllY2UvU01cXG5tYW50ZWxzaGVsZlxcbm1hbnRlbHNoZWx2ZXNcXG5tYW50ZXNcXG5tYW50aWxsYS9TTVxcbm1hbnRpcy9NU1xcbm1hbnRpc3NhL1NNXFxubWFudGxlJ3NcXG5tYW50bGUvRUdEU1xcbm1hbnRyYS9NU1xcbm1hbnVhbC9NWVNcXG5tYW51ZmFjdHVyZS9EUlNNWkdcXG5tYW51ZmFjdHVyZXIvTVxcbm1hbnVmYWN0dXJpbmcvTVxcbm1hbnVtaXNzaW9uL1NNXFxubWFudW1pdC9TXFxubWFudW1pdHRlZFxcbm1hbnVtaXR0aW5nXFxubWFudXJlL01HRFNcXG5tYW51c2NyaXB0L01TXFxubWFueS9NXFxubWFwJ3NcXG5tYXAvQVNcXG5tYXBsZS9TTVxcbm1hcG1ha2VyL1NNXFxubWFwcGVkL0FcXG5tYXBwZXIvTVNcXG5tYXBwaW5nL1NcXG5tYXIvU1xcbm1hcmFib3UvTVNcXG5tYXJhYm91dC9TTVxcbm1hcmFjYS9NU1xcbm1hcmFzY2hpbm8vTVNcXG5tYXJhdGhvbi9TTVJaXFxubWFyYXRob25lci9NXFxubWFyYXVkL1pHRFJTXFxubWFyYXVkZXIvTVxcbm1hcmJsZS9NR0RTXFxubWFyYmxlaXplL0dEU1xcbm1hcmJsaW5nL01cXG5tYXJjaC9aR01EUlNcXG5tYXJjaGVyL01cXG5tYXJjaGlvbmVzcy9NU1xcbm1hcmUvTVNcXG5tYXJnYXJpbmUvTVxcbm1hcmdhcml0YS9NU1xcbm1hcmdlXFxubWFyZ2luL01TXFxubWFyZ2luYWwvWVNcXG5tYXJnaW5hbGlhL01cXG5tYXJnaW5hbGl6YXRpb24vTVxcbm1hcmdpbmFsaXplL0dEU1xcbm1hcmlhL01cXG5tYXJpYWNoaS9NU1xcbm1hcmlnb2xkL01TXFxubWFyaWp1YW5hL01cXG5tYXJpbWJhL1NNXFxubWFyaW5hL01TXFxubWFyaW5hZGUvRFNNR1xcbm1hcmluYXJhL01cXG5tYXJpbmF0ZS9EU0dOXFxubWFyaW5hdGlvbi9NXFxubWFyaW5lL01aUlNcXG5tYXJpbmVyL01cXG5tYXJpb25ldHRlL01TXFxubWFyaXRhbC9ZXFxubWFyaXRpbWVcXG5tYXJqb3JhbS9NXFxubWFyay9BTURTR1xcbm1hcmtkb3duL1NNXFxubWFya2VkL1VcXG5tYXJrZWRseVxcbm1hcmtlci9NU1xcbm1hcmtldC9NRFJaR0JTXFxubWFya2V0YWJpbGl0eS9NXFxubWFya2V0YWJsZS9VXFxubWFya2V0ZWVyL1NNXFxubWFya2V0ZXIvTVxcbm1hcmtldGluZy9NXFxubWFya2V0cGxhY2UvU01cXG5tYXJraW5nL1NNXFxubWFya2thL01cXG5tYXJra2FhXFxubWFya3NtYW4vTVxcbm1hcmtzbWFuc2hpcC9NXFxubWFya3NtZW5cXG5tYXJrdXAvTVNcXG5tYXJsL01cXG5tYXJsaW4vTVNcXG5tYXJsaW5lc3Bpa2UvU01cXG5tYXJtYWxhZGUvTVxcbm1hcm1vcmVhbFxcbm1hcm1vc2V0L1NNXFxubWFybW90L01TXFxubWFyb29uL01ER1NcXG5tYXJxdWUvTVNcXG5tYXJxdWVlL1NNXFxubWFycXVlc3MvTVNcXG5tYXJxdWV0cnkvTVxcbm1hcnF1aXMvTVNcXG5tYXJxdWlzZS9NXFxubWFycXVpc2V0dGUvTVxcbm1hcnJlZC9VXFxubWFycmlhZ2UvQVNNXFxubWFycmlhZ2VhYmlsaXR5L01cXG5tYXJyaWFnZWFibGVcXG5tYXJyaWVkL1NNXFxubWFycmluZ1xcbm1hcnJvdy9NU1xcbm1hcnJ5L0FHRFNcXG5tYXJzaC9NU1xcbm1hcnNoYWwvU01ER1xcbm1hcnNobGFuZC9TTVxcbm1hcnNobWFsbG93L1NNXFxubWFyc2h5L1JUXFxubWFyc3VwaWFsL01TXFxubWFydC9NTlNYXFxubWFydGVuL01cXG5tYXJ0ZW5zaXRlXFxubWFydGlhbC9ZXFxubWFydGlhbi9TXFxubWFydGluL01TXFxubWFydGluZXQvTVNcXG5tYXJ0aW5nYWxlL01TXFxubWFydGluaS9TTVxcbm1hcnR5ci9NREdTXFxubWFydHlyZG9tL01cXG5tYXJ2ZWwvTURHU1xcbm1hcnZlbG91cy9ZXFxubWFyemlwYW4vTVxcbm1hc2NcXG5tYXNjYXJhL0dNRFNcXG5tYXNjb3QvTVNcXG5tYXNjdWxpbmUvU01cXG5tYXNjdWxpbml0eS9NXFxubWFzZXIvU01cXG5tYXNoL01EUlNaR1xcbm1hc2hlci9NXFxubWFzaHVwL01TXFxubWFzaydzXFxubWFzay9VRFNHXFxubWFza2VyL01TXFxubWFzb2NoaXNtL01cXG5tYXNvY2hpc3QvU01cXG5tYXNvY2hpc3RpY1xcbm1hc29jaGlzdGljYWxseVxcbm1hc29uL1NNXFxubWFzb25pY1xcbm1hc29ucnkvTVxcbm1hc3F1ZS9NU1xcbm1hc3F1ZXJhZGUvRFJTTVpHXFxubWFzcXVlcmFkZXIvTVxcbm1hc3MvTURTR1ZcXG5tYXNzYWNyZS9NR0RTXFxubWFzc2FnZS9EU01HXFxubWFzc2V1ci9TTVxcbm1hc3NldXNlL01TXFxubWFzc2lmL01TXFxubWFzc2l2ZS9QWVxcbm1hc3NpdmVuZXNzL01cXG5tYXN0L01EU1xcbm1hc3RlY3RvbXkvU01cXG5tYXN0ZXInc1xcbm1hc3Rlci9BREdTXFxubWFzdGVyY2xhc3MvU1xcbm1hc3RlcmZ1bC9ZXFxubWFzdGVybHlcXG5tYXN0ZXJtaW5kL1NHTURcXG5tYXN0ZXJwaWVjZS9NU1xcbm1hc3RlcnN0cm9rZS9TTVxcbm1hc3RlcndvcmsvTVNcXG5tYXN0ZXJ5L01cXG5tYXN0aGVhZC9NU1xcbm1hc3RpYy9NXFxubWFzdGljYXRlL0dORFNcXG5tYXN0aWNhdGlvbi9NXFxubWFzdGlmZi9TTVxcbm1hc3RpdGlzXFxubWFzdG9kb24vU01cXG5tYXN0b2lkL1NNXFxubWFzdHVyYmF0ZS9HTkRTXFxubWFzdHVyYmF0aW9uL01cXG5tYXN0dXJiYXRvcnlcXG5tYXQvU1pHTURSXFxubWF0YWRvci9TTVxcbm1hdGNoL0FNU1xcbm1hdGNoYm9vay9TTVxcbm1hdGNoYm94L01TXFxubWF0Y2hlZC9VXFxubWF0Y2hpbmdcXG5tYXRjaGxlc3NcXG5tYXRjaGxvY2svU01cXG5tYXRjaG1ha2VyL01TXFxubWF0Y2htYWtpbmcvTVxcbm1hdGNoc3RpY2svTVNcXG5tYXRjaHdvb2QvTVxcbm1hdGUvTVNcXG5tYXRlcmlhbC9TTVlcXG5tYXRlcmlhbGlzbS9NXFxubWF0ZXJpYWxpc3QvU01cXG5tYXRlcmlhbGlzdGljXFxubWF0ZXJpYWxpc3RpY2FsbHlcXG5tYXRlcmlhbGl6YXRpb24vTVxcbm1hdGVyaWFsaXplL0RTR1xcbm1hdGVyaWVsL01cXG5tYXRlcm5hbC9ZXFxubWF0ZXJuaXR5L01cXG5tYXRleS9TXFxubWF0aGVtYXRpY2FsL1lcXG5tYXRoZW1hdGljaWFuL1NNXFxubWF0aGVtYXRpY3MvTVxcbm1hdGluZWUvU01cXG5tYXRpbmcvTVxcbm1hdGlucy9NXFxubWF0cmlhcmNoL01cXG5tYXRyaWFyY2hhbFxcbm1hdHJpYXJjaHNcXG5tYXRyaWFyY2h5L1NNXFxubWF0cmljZXNcXG5tYXRyaWNpZGFsXFxubWF0cmljaWRlL01TXFxubWF0cmljdWxhdGUvRFNHTlxcbm1hdHJpY3VsYXRpb24vTVxcbm1hdHJpbW9uaWFsXFxubWF0cmltb255L01cXG5tYXRyaXgvTVxcbm1hdHJvbi9NWVNcXG5tYXR0ZS9EUlNNWkdcXG5tYXR0ZXIvTURHXFxubWF0dGluZy9NXFxubWF0dG9jay9TTVxcbm1hdHRyZXNzL01TXFxubWF0dXJhdGUvR05EU1xcbm1hdHVyYXRpb24vTVxcbm1hdHVyZS9ZVEdEUlNcXG5tYXR1cml0eS9TTVxcbm1hdHpvL1NNSFxcbm1hdHpvaC9NXFxubWF0em9oc1xcbm1hdHpvdFxcbm1hdWRsaW5cXG5tYXVsL01EUlNaR1xcbm1hdWxlci9NXFxubWF1bmRlci9TREdcXG5tYXVzb2xldW0vU01cXG5tYXV2ZS9NXFxubWF2ZW4vU01cXG5tYXZlcmljay9TTVxcbm1hdy9TTVxcbm1hd2tpc2gvUFlcXG5tYXdraXNobmVzcy9NXFxubWF4L0dNRFNcXG5tYXhpL01TXFxubWF4aWxsYS9NXFxubWF4aWxsYWVcXG5tYXhpbGxhcnlcXG5tYXhpbS9TTVxcbm1heGltYVxcbm1heGltYWwvWVxcbm1heGltaXphdGlvbi9NXFxubWF4aW1pemUvR0RTXFxubWF4aW11bS9TTVxcbm1heS9NXFxubWF5YmUvU01cXG5tYXlkYXkvTVNcXG5tYXlmbG93ZXIvTVNcXG5tYXlmbHkvU01cXG5tYXloZW0vTVxcbm1heW4ndFxcbm1heW8vTVxcbm1heW9ubmFpc2UvTVxcbm1heW9yL1NNXFxubWF5b3JhbFxcbm1heW9yYWx0eS9NXFxubWF5b3Jlc3MvTVNcXG5tYXlwb2xlL1NNXFxubWF5c3RcXG5tYXplL01TXFxubWF6dXJrYS9NU1xcbm1kc2VcXG5tZS9EU0hcXG5tZWFkL01cXG5tZWFkb3cvTVNcXG5tZWFkb3dsYXJrL01TXFxubWVhZ2VyL1BZXFxubWVhZ2VybmVzcy9NXFxubWVhbC9NU1xcbm1lYWxpbmVzcy9NXFxubWVhbHRpbWUvU01cXG5tZWFseS9UUFJcXG5tZWFseWJ1Zy9TTVxcbm1lYWx5bW91dGhlZFxcbm1lYW4vTVJZSlBTVEdcXG5tZWFuZGVyL1NNREpHXFxubWVhbmRlcmluZ3MvTVxcbm1lYW5pZS9NXFxubWVhbmluZy9NXFxubWVhbmluZ2Z1bC9QWVxcbm1lYW5pbmdmdWxuZXNzL01cXG5tZWFuaW5nbGVzcy9ZUFxcbm1lYW5pbmdsZXNzbmVzcy9NXFxubWVhbm5lc3MvTVxcbm1lYW50L1VcXG5tZWFudGltZS9NXFxubWVhbndoaWxlL01cXG5tZWFueS9TTVxcbm1lYXNcXG5tZWFzbGVzL01cXG5tZWFzbHkvUlRcXG5tZWFzdXJhYmxlXFxubWVhc3VyYWJseVxcbm1lYXN1cmUnc1xcbm1lYXN1cmUvQURTR1xcbm1lYXN1cmVkL1VcXG5tZWFzdXJlbGVzc1xcbm1lYXN1cmVtZW50L01TXFxubWVhdC9NU1xcbm1lYXRiYWxsL01TXFxubWVhdGhlYWQvTVNcXG5tZWF0aW5lc3MvTVxcbm1lYXRsZXNzXFxubWVhdGxvYWYvTVxcbm1lYXRsb2F2ZXNcXG5tZWF0cGFja2luZy9NXFxubWVhdHkvVFBSXFxubWVjY2EvU01cXG5tZWNoYW5pYy9NU1xcbm1lY2hhbmljYWwvWVxcbm1lY2hhbmljcy9NXFxubWVjaGFuaXNtL1NNXFxubWVjaGFuaXN0aWNcXG5tZWNoYW5pc3RpY2FsbHlcXG5tZWNoYW5pemF0aW9uL01cXG5tZWNoYW5pemUvRFNHXFxubWVkYWwvU01cXG5tZWRhbGlzdC9NU1xcbm1lZGFsbGlvbi9TTVxcbm1lZGRsZS9aR0RSU1xcbm1lZGRsZXIvTVxcbm1lZGRsZXNvbWVcXG5tZWRpYS9TTVxcbm1lZGlhbC9BWVxcbm1lZGlhbi9NU1xcbm1lZGlhdGUvQURTR05cXG5tZWRpYXRlZC9VXFxubWVkaWF0aW9uL0FNXFxubWVkaWF0b3IvTVNcXG5tZWRpYy9TTVxcbm1lZGljYWlkL01cXG5tZWRpY2FsL1NNWVxcbm1lZGljYW1lbnQvTVxcbm1lZGljYXJlL01cXG5tZWRpY2F0ZS9HTlhEU1xcbm1lZGljYXRpb24vTVxcbm1lZGljaW5hbC9ZXFxubWVkaWNpbmUvTVNcXG5tZWRpY28vTVNcXG5tZWRpZXZhbFxcbm1lZGlldmFsaXN0L01TXFxubWVkaW9jcmVcXG5tZWRpb2NyaXR5L1NNXFxubWVkaXRhdGUvRFNHTlZYXFxubWVkaXRhdGlvbi9NXFxubWVkaXRhdGl2ZS9ZXFxubWVkaXVtL01TXFxubWVkbGV5L01TXFxubWVkdWxsYS9TTVxcbm1lZHVzYVxcbm1lZHVzYWVcXG5tZWVkL01cXG5tZWVrL1JZUFRcXG5tZWVrbmVzcy9NXFxubWVlcnNjaGF1bS9TTVxcbm1lZXQvTUpTR1xcbm1lZXRpbmcvTVxcbm1lZXRpbmdob3VzZS9TTVxcbm1lZXR1cC9NU1xcbm1lZy9TXFxubWVnYVxcbm1lZ2FiaXQvU01cXG5tZWdhYnVja3MvTVxcbm1lZ2FieXRlL01TXFxubWVnYWNodXJjaC9NU1xcbm1lZ2FjeWNsZS9TTVxcbm1lZ2FkZWF0aC9NXFxubWVnYWRlYXRoc1xcbm1lZ2FncmFtL1NcXG5tZWdhaGVydHovTVxcbm1lZ2Fqb3VsZS9TXFxubWVnYWxpdGgvTVxcbm1lZ2FsaXRoaWNcXG5tZWdhbGl0aHNcXG5tZWdhbG9tYW5pYS9NXFxubWVnYWxvbWFuaWFjL1NNXFxubWVnYWxvcG9saXMvTVNcXG5tZWdhbWV0ZXIvU1xcbm1lZ2FwYXNjYWwvU1xcbm1lZ2FwaG9uZS9EU01HXFxubWVnYXBpeGVsL1NNXFxubWVnYXN0YXIvU1xcbm1lZ2F0b24vU01cXG5tZWdhd2F0dC9NU1xcbm1laFxcbm1laW9zaXMvTVxcbm1laW90aWNcXG5tZWxhbWluZS9NXFxubWVsYW5jaG9saWEvTVxcbm1lbGFuY2hvbGljL1NcXG5tZWxhbmNob2x5L01cXG5tZWxhbmdlL01TXFxubWVsYW5pbi9NXFxubWVsYW5vbWEvU01cXG5tZWxkL01EU0dcXG5tZWxlZS9TTVxcbm1lbGlvcmF0ZS9HTlZEU1xcbm1lbGlvcmF0aW9uL01cXG5tZWxsaWZsdW91cy9QWVxcbm1lbGxpZmx1b3VzbmVzcy9NXFxubWVsbG93L1BUR0RSWVNcXG5tZWxsb3duZXNzL01cXG5tZWxvZGljXFxubWVsb2RpY2FsbHlcXG5tZWxvZGlvdXMvWVBcXG5tZWxvZGlvdXNuZXNzL01cXG5tZWxvZHJhbWEvTVNcXG5tZWxvZHJhbWF0aWMvU1xcbm1lbG9kcmFtYXRpY2FsbHlcXG5tZWxvZHJhbWF0aWNzL01cXG5tZWxvZHkvU01cXG5tZWxvbi9TTVxcbm1lbHQnc1xcbm1lbHQvQURTR1xcbm1lbHRkb3duL1NNXFxubWVtYmVyJ3NcXG5tZW1iZXIvRUFTXFxubWVtYmVyc2hpcC9TTVxcbm1lbWJyYW5lL1NNXFxubWVtYnJhbm91c1xcbm1lbWUvTVNcXG5tZW1lbnRvL01TXFxubWVtby9NU1xcbm1lbW9pci9NU1xcbm1lbW9yYWJpbGlhL01cXG5tZW1vcmFiaWxpdHkvTVxcbm1lbW9yYWJsZS9VXFxubWVtb3JhYmx5XFxubWVtb3JhbmR1bS9NU1xcbm1lbW9yaWFsL1NNXFxubWVtb3JpYWxpemUvRFNHXFxubWVtb3JpemF0aW9uL01cXG5tZW1vcml6ZS9EU0dcXG5tZW1vcnkvU01cXG5tZW1zYWhpYi9TXFxubWVuL01cXG5tZW5hY2UvTUdEU1xcbm1lbmFjaW5nL1lcXG5tZW5hZ2UvTVNcXG5tZW5hZ2VyaWUvTVNcXG5tZW5kL01EUlNaR1xcbm1lbmRhY2lvdXMvWVxcbm1lbmRhY2l0eS9NXFxubWVuZGVsZXZpdW0vTVxcbm1lbmRlci9NXFxubWVuZGljYW5jeS9NXFxubWVuZGljYW50L1NNXFxubWVuZGluZy9NXFxubWVuZm9say9NU1xcbm1lbmZvbGtzL01cXG5tZW5oYWRlbi9NXFxubWVuaWFsL01ZU1xcbm1lbmluZ2VhbFxcbm1lbmluZ2VzXFxubWVuaW5naXRpcy9NXFxubWVuaW54L01cXG5tZW5pc2NpXFxubWVuaXNjdXMvTVxcbm1lbm9wYXVzYWxcXG5tZW5vcGF1c2UvTVxcbm1lbm9yYWgvTVxcbm1lbm9yYWhzXFxubWVuc2NoL01TXFxubWVuc2VydmFudHNcXG5tZW5zZXMvTVxcbm1lbnN0cnVhbFxcbm1lbnN0cnVhdGUvR05EU1xcbm1lbnN0cnVhdGlvbi9NXFxubWVuc3VyYWJsZVxcbm1lbnN1cmF0aW9uL01cXG5tZW5zd2Vhci9NXFxubWVudGFsL1lcXG5tZW50YWxpc3QvU01cXG5tZW50YWxpdHkvU01cXG5tZW50aG9sL01cXG5tZW50aG9sYXRlZFxcbm1lbnRpb24vR1NNRFxcbm1lbnRpb25lZC9VXFxubWVudG9yL01EU0dcXG5tZW50b3JzaGlwXFxubWVudS9NU1xcbm1lb3cvTURTR1xcbm1lcmNhbnRpbGVcXG5tZXJjYW50aWxpc20vTVxcbm1lcmNlbmFyeS9TTVxcbm1lcmNlci9NU1xcbm1lcmNlcml6ZS9HRFNcXG5tZXJjaGFuZGlzZS9NWkdEUlNcXG5tZXJjaGFuZGlzZXIvTVxcbm1lcmNoYW5kaXNpbmcvTVxcbm1lcmNoYW50L01CU1xcbm1lcmNoYW50bWFuL01cXG5tZXJjaGFudG1lblxcbm1lcmNpZnVsL1VZXFxubWVyY2lsZXNzL1BZXFxubWVyY2lsZXNzbmVzcy9NXFxubWVyY3VyaWFsL1lcXG5tZXJjdXJpY1xcbm1lcmN1cnkvTVxcbm1lcmN5L1NNXFxubWVyZS9NWVRTXFxubWVyZXRyaWNpb3VzL1lQXFxubWVyZXRyaWNpb3VzbmVzcy9NXFxubWVyZ2Fuc2VyL01TXFxubWVyZ2UvRFJTWkdcXG5tZXJnZXIvTVxcbm1lcmlkaWFuL01TXFxubWVyaW5ndWUvTVNcXG5tZXJpbm8vTVNcXG5tZXJpdC9DU01cXG5tZXJpdGVkL1VcXG5tZXJpdGluZ1xcbm1lcml0bGVzc1xcbm1lcml0b2NyYWN5L1NNXFxubWVyaXRvY3JhdGljXFxubWVyaXRvcmlvdXMvUFlcXG5tZXJpdG9yaW91c25lc3MvTVxcbm1lcm1haWQvU01cXG5tZXJtYW4vTVxcbm1lcm1lblxcbm1lcnJpbHlcXG5tZXJyaW1lbnQvTVxcbm1lcnJpbmVzcy9NXFxubWVycnkvVFJQXFxubWVycnltYWtlci9NU1xcbm1lcnJ5bWFraW5nL01cXG5tZXNhL01TXFxubWVzY2FsL01TXFxubWVzY2FsaW5cXG5tZXNjYWxpbmUvTVxcbm1lc2RhbWVzXFxubWVzZGVtb2lzZWxsZXNcXG5tZXNoL01EU0dcXG5tZXNtZXJpY1xcbm1lc21lcmlzbS9NXFxubWVzbWVyaXplL1pHRFJTXFxubWVzbWVyaXplci9NXFxubWVzb21vcnBoL01cXG5tZXNvbW9ycGhzXFxubWVzb24vU01cXG5tZXNvc3BoZXJlL1NNXFxubWVzcXVpdGUvU01cXG5tZXNzL01EU0dcXG5tZXNzYWdlL01HRFNcXG5tZXNzZWlnbmV1cnNcXG5tZXNzZW5nZXIvU01cXG5tZXNzaWFoL01cXG5tZXNzaWFoc1xcbm1lc3NpYW5pY1xcbm1lc3NpZXVyc1xcbm1lc3NpbHlcXG5tZXNzaW5lc3MvTVxcbm1lc3NtYXRlL1NNXFxubWVzc3kvUFRSXFxubWVzdGl6by9NU1xcbm1ldFxcbm1ldGFcXG5tZXRhYm9saWNcXG5tZXRhYm9saWNhbGx5XFxubWV0YWJvbGlzbS9TTVxcbm1ldGFib2xpdGUvU01cXG5tZXRhYm9saXplL0RTR1xcbm1ldGFjYXJwYWwvU01cXG5tZXRhY2FycGlcXG5tZXRhY2FycHVzL01cXG5tZXRhZGF0YVxcbm1ldGFsL1NNRFxcbm1ldGFsYW5ndWFnZS9NU1xcbm1ldGFsbGljXFxubWV0YWxsdXJnaWNcXG5tZXRhbGx1cmdpY2FsXFxubWV0YWxsdXJnaXN0L01TXFxubWV0YWxsdXJneS9NXFxubWV0YWx3b3JrL01SWkdcXG5tZXRhbHdvcmtlci9NXFxubWV0YWx3b3JraW5nL01cXG5tZXRhbW9ycGhpY1xcbm1ldGFtb3JwaGlzbS9NXFxubWV0YW1vcnBob3NlL0dEU1xcbm1ldGFtb3JwaG9zaXMvTVxcbm1ldGFwaG9yL01TXFxubWV0YXBob3JpY1xcbm1ldGFwaG9yaWNhbC9ZXFxubWV0YXBoeXNpY2FsL1lcXG5tZXRhcGh5c2ljcy9NXFxubWV0YXN0YXNlc1xcbm1ldGFzdGFzaXMvTVxcbm1ldGFzdGFzaXplL0RTR1xcbm1ldGFzdGF0aWNcXG5tZXRhdGFyc2FsL01TXFxubWV0YXRhcnNpXFxubWV0YXRhcnN1cy9NXFxubWV0YXRoZXNlc1xcbm1ldGF0aGVzaXMvTVxcbm1ldGUvTVpHRFJTXFxubWV0ZW1wc3ljaG9zZXNcXG5tZXRlbXBzeWNob3Npcy9NXFxubWV0ZW9yL01TXFxubWV0ZW9yaWNcXG5tZXRlb3JpY2FsbHlcXG5tZXRlb3JpdGUvU01cXG5tZXRlb3JvaWQvU01cXG5tZXRlb3JvbG9naWNcXG5tZXRlb3JvbG9naWNhbFxcbm1ldGVvcm9sb2dpc3QvU01cXG5tZXRlb3JvbG9neS9NXFxubWV0ZXIvR01EXFxubWV0Zm9ybWluXFxubWV0aGFkb25lL01cXG5tZXRoYW1waGV0YW1pbmUvTVxcbm1ldGhhbmUvTVxcbm1ldGhhbm9sL01cXG5tZXRoaW5rc1xcbm1ldGhvZC9NU1xcbm1ldGhvZGljYWwvWVBcXG5tZXRob2RpY2FsbmVzcy9NXFxubWV0aG9kb2xvZ2ljYWwvWVxcbm1ldGhvZG9sb2d5L1NNXFxubWV0aG90cmV4YXRlXFxubWV0aG91Z2h0XFxubWV0aHNcXG5tZXRoeWwvTVxcbm1ldGljdWxvdXMvWVBcXG5tZXRpY3Vsb3VzbmVzcy9NXFxubWV0aWVyL01TXFxubWV0cmljL1NcXG5tZXRyaWNhbC9ZXFxubWV0cmljYXRlL0dORFNcXG5tZXRyaWNhdGlvbi9NXFxubWV0cmljaXplL0dEU1xcbm1ldHJvL1NNXFxubWV0cm9ub21lL01TXFxubWV0cm9wb2xpcy9NU1xcbm1ldHJvcG9saXRhblxcbm1ldHRsZS9NXFxubWV0dGxlc29tZVxcbm1ldy9TR01EXFxubWV3bC9EU0dcXG5tZXdzL01cXG5tZXp6YW5pbmUvTVNcXG5tZXp6by9TTVxcbm1mZ1xcbm1mci9TXFxubWdcXG5tZ3JcXG5taS9NTlhcXG5taWFzbWEvTVNcXG5taWMvU1xcbm1pY2EvTVxcbm1pY2VcXG5taWNrL1NcXG5taWNrZXkvTVNcXG5taWNyby9TTVxcbm1pY3JvYWdncmVzc2lvbi9TTVxcbm1pY3JvYmUvTVNcXG5taWNyb2JpYWxcXG5taWNyb2Jpb2xvZ2ljYWxcXG5taWNyb2Jpb2xvZ2lzdC9NU1xcbm1pY3JvYmlvbG9neS9NXFxubWljcm9icmV3ZXJ5L1NNXFxubWljcm9jaGlwL01TXFxubWljcm9jaXJjdWl0L1NNXFxubWljcm9jb2RlXFxubWljcm9jb21wdXRlci9NU1xcbm1pY3JvY29zbS9NU1xcbm1pY3JvY29zbWljXFxubWljcm9kb3QvU01cXG5taWNyb2Vjb25vbWljcy9NXFxubWljcm9lbGVjdHJvbmljL1NcXG5taWNyb2VsZWN0cm9uaWNzL01cXG5taWNyb2ZpYmVyL01TXFxubWljcm9maWNoZS9NXFxubWljcm9maWxtL0dNRFNcXG5taWNyb2ZpbmFuY2VcXG5taWNyb2Zsb3BwaWVzXFxubWljcm9ncm9vdmUvU01cXG5taWNyb2xpZ2h0L01TXFxubWljcm9sb2FuL01TXFxubWljcm9tYW5hZ2UvWkdEUlNMXFxubWljcm9tYW5hZ2VtZW50L01cXG5taWNyb21hbmFnZXIvTVxcbm1pY3JvbWV0ZW9yaXRlL1NNXFxubWljcm9tZXRlci9NU1xcbm1pY3Jvbi9NU1xcbm1pY3Jvb3JnYW5pc20vTVNcXG5taWNyb3Bob25lL1NNXFxubWljcm9wbGFzdGljc1xcbm1pY3JvcHJvY2Vzc29yL01TXFxubWljcm9zY29wZS9TTVxcbm1pY3Jvc2NvcGljXFxubWljcm9zY29waWNhbC9ZXFxubWljcm9zY29weS9NXFxubWljcm9zZWNvbmQvTVNcXG5taWNyb3N1cmdlcnkvTVxcbm1pY3Jvd2F2ZS9EU01HQlxcbm1pY3Jvd2F2ZWFibGVcXG5taWRcXG5taWRhaXIvTVxcbm1pZGRheS9NXFxubWlkZGVuL01TXFxubWlkZGxlL01HU1xcbm1pZGRsZWJyb3cvU01cXG5taWRkbGVtYW4vTVxcbm1pZGRsZW1lblxcbm1pZGRsZW1vc3RcXG5taWRkbGV3ZWlnaHQvTVNcXG5taWRkeS9TTVxcbm1pZGZpZWxkL1JaXFxubWlkZ2UvU01cXG5taWRnZXQvTVNcXG5taWRpL01TXFxubWlkbGFuZC9NU1xcbm1pZGxpZmUvTVxcbm1pZG1vc3RcXG5taWRuaWdodC9NXFxubWlkcG9pbnQvTVNcXG5taWRyaWIvTVNcXG5taWRyaWZmL01TXFxubWlkc2VjdGlvbi9NU1xcbm1pZHNoaXBtYW4vTVxcbm1pZHNoaXBtZW5cXG5taWRzaGlwc1xcbm1pZHNpemVcXG5taWRzdC9NXFxubWlkc3RyZWFtL01cXG5taWRzdW1tZXIvTVxcbm1pZHRlcm0vTVNcXG5taWR0b3duL01cXG5taWR3YXkvTVNcXG5taWR3ZWVrL01TXFxubWlkd2lmZS9NR0RTXFxubWlkd2lmZXJ5L1NNXFxubWlkd2ludGVyL01cXG5taWR3aXZlc1xcbm1pZHllYXIvTVNcXG5taWVuL01cXG5taWZmL0RTR1xcbm1pZ2h0J3ZlXFxubWlnaHQvTVxcbm1pZ2h0aWx5XFxubWlnaHRpbmVzcy9NXFxubWlnaHRuJ3RcXG5taWdodHkvVFJQXFxubWlnbm9uZXR0ZS9TTVxcbm1pZ3JhaW5lL01TXFxubWlncmFudC9NU1xcbm1pZ3JhdGUvQUdEU1xcbm1pZ3JhdGlvbi9TTVxcbm1pZ3JhdG9yeVxcbm1pa2Fkby9NU1xcbm1pa2UvTUdEU1xcbm1pbC9TWk1SXFxubWlsYWR5L1NNXFxubWlsY2hcXG5taWxkL01SWVRQXFxubWlsZGV3L1NNREdcXG5taWxkbmVzcy9NXFxubWlsZS9NU1xcbm1pbGVhZ2UvU01cXG5taWxlcG9zdC9NU1xcbm1pbGVyL01cXG5taWxlc3RvbmUvTVNcXG5taWxmL01TXFxubWlsaWV1L1NNXFxubWlsaXRhbmN5L01cXG5taWxpdGFudC9NWVNcXG5taWxpdGFyaWx5XFxubWlsaXRhcmlzbS9NXFxubWlsaXRhcmlzdC9TTVxcbm1pbGl0YXJpc3RpY1xcbm1pbGl0YXJpemF0aW9uL0NNXFxubWlsaXRhcml6ZS9DRFNHXFxubWlsaXRhcnkvTVxcbm1pbGl0YXRlL0dEU1xcbm1pbGl0aWEvU01cXG5taWxpdGlhbWFuL01cXG5taWxpdGlhbWVuXFxubWlsay9NRFJTWkdcXG5taWxrZXIvTVxcbm1pbGtpbmVzcy9NXFxubWlsa21haWQvTVNcXG5taWxrbWFuL01cXG5taWxrbWVuXFxubWlsa3NoYWtlL1NNXFxubWlsa3NvcC9NU1xcbm1pbGt3ZWVkL1NNXFxubWlsa3kvUlRQXFxubWlsbC9NRFJTWkdKXFxubWlsbGFnZS9NXFxubWlsbGVubmlhXFxubWlsbGVubmlhbC9NXFxubWlsbGVubml1bS9NU1xcbm1pbGxlci9NXFxubWlsbGV0L01cXG5taWxsaWFyZC9NU1xcbm1pbGxpYmFyL01TXFxubWlsbGlncmFtL01TXFxubWlsbGlsaXRlci9NU1xcbm1pbGxpbWV0ZXIvTVNcXG5taWxsaW5lci9NU1xcbm1pbGxpbmVyeS9NXFxubWlsbGluZy9NXFxubWlsbGlvbi9IU01cXG5taWxsaW9uYWlyZS9TTVxcbm1pbGxpb25haXJlc3MvU1xcbm1pbGxpb250aC9NXFxubWlsbGlvbnRoc1xcbm1pbGxpcGVkZS9TTVxcbm1pbGxpc2Vjb25kL1NNXFxubWlsbHBvbmQvU01cXG5taWxscmFjZS9TTVxcbm1pbGxzdG9uZS9TTVxcbm1pbGxzdHJlYW0vTVNcXG5taWxsd3JpZ2h0L1NNXFxubWlsb21ldGVyL1NcXG5taWxxdWV0b2FzdC9TTVxcbm1pbHQvTURTR1xcbm1pbWUvTUdEU1xcbm1pbWVvZ3JhcGgvR01EXFxubWltZW9ncmFwaHNcXG5taW1ldGljXFxubWltaWMvU01cXG5taW1pY2tlZFxcbm1pbWlja2VyL1NNXFxubWltaWNraW5nXFxubWltaWNyeS9TTVxcbm1pbW9zYS9TTVxcbm1pblxcbm1pbmFyZXQvTVNcXG5taW5hdG9yeVxcbm1pbmNlL0RSU01aR1xcbm1pbmNlbWVhdC9NXFxubWluY2VyL01cXG5taW5kJ3NcXG5taW5kL0FEUlNaR1xcbm1pbmRib2dnbGluZ2x5XFxubWluZGVkL1BcXG5taW5kZnVsL1lQXFxubWluZGZ1bG5lc3MvTVxcbm1pbmRsZXNzL1lQXFxubWluZGxlc3NuZXNzL01cXG5taW5kc2V0L01TXFxubWluZS9NWkdORFJTWFxcbm1pbmVmaWVsZC9TTVxcbm1pbmVyL01cXG5taW5lcmFsL01TXFxubWluZXJhbG9naWNhbFxcbm1pbmVyYWxvZ2lzdC9NU1xcbm1pbmVyYWxvZ3kvTVxcbm1pbmVzdHJvbmUvTVxcbm1pbmVzd2VlcGVyL1NNXFxubWluZ2xlL0RTR1xcbm1pbmd5XFxubWluaS9NU1xcbm1pbmlhdHVyZS9NU1xcbm1pbmlhdHVyaXN0L01TXFxubWluaWF0dXJpemF0aW9uL01cXG5taW5pYXR1cml6ZS9HRFNcXG5taW5pYmFyL1NcXG5taW5pYmlrZS9TTVxcbm1pbmlidXMvTVNcXG5taW5pY2FiL1NcXG5taW5pY2FtL01TXFxubWluaWNvbXB1dGVyL1NNXFxubWluaWZsb3BwaWVzXFxubWluaW0vU01cXG5taW5pbWFcXG5taW5pbWFsL1lcXG5taW5pbWFsaXNtL01cXG5taW5pbWFsaXN0L01TXFxubWluaW1pemF0aW9uL01cXG5taW5pbWl6ZS9EU0dcXG5taW5pbXVtL01TXFxubWluaW5nL01cXG5taW5pb24vTVxcbm1pbmlzZXJpZXMvTVxcbm1pbmlza2lydC9NU1xcbm1pbmlzdGVyL1NHTURcXG5taW5pc3RlcmlhbFxcbm1pbmlzdHJhbnQvTVNcXG5taW5pc3RyYXRpb24vTVNcXG5taW5pc3RyeS9TTVxcbm1pbml2YW4vTVNcXG5taW5rL01TXFxubWlubmVzaW5nZXIvTVNcXG5taW5ub3cvU01cXG5taW5vci9TTURHXFxubWlub3JpdHkvU01cXG5taW5veGlkaWwvTVxcbm1pbnN0ZXIvTVNcXG5taW5zdHJlbC9TTVxcbm1pbnN0cmVsc3kvTVxcbm1pbnQvTURSU1pHXFxubWludGFnZS9NXFxubWludGVyL01cXG5taW50eS9SVFxcbm1pbnVlbmQvTVNcXG5taW51ZXQvU01cXG5taW51cy9NU1xcbm1pbnVzY3VsZS9NU1xcbm1pbnV0ZS9QRFJTTVlUR1xcbm1pbnV0ZW1hbi9NXFxubWludXRlbWVuXFxubWludXRlbmVzcy9NXFxubWludXRpYS9NXFxubWludXRpYWVcXG5taW54L01TXFxubWlyYWNsZS9NU1xcbm1pcmFjdWxvdXMvWVxcbm1pcmFnZS9TTVxcbm1pcmUvTUdEU1xcbm1pcnJvci9HU01EXFxubWlydGgvTVxcbm1pcnRoZnVsL1BZXFxubWlydGhmdWxuZXNzL01cXG5taXJ0aGxlc3MvWVxcbm1pcnkvUlRcXG5taXNhZGRyZXNzL0RTR1xcbm1pc2FkdmVudHVyZS9NU1xcbm1pc2FsaWduZWRcXG5taXNhbGlnbm1lbnQvTVxcbm1pc2FsbGlhbmNlL01TXFxubWlzYW50aHJvcGUvU01cXG5taXNhbnRocm9waWNcXG5taXNhbnRocm9waWNhbGx5XFxubWlzYW50aHJvcGlzdC9NU1xcbm1pc2FudGhyb3B5L01cXG5taXNhcHBsaWNhdGlvbi9NXFxubWlzYXBwbHkvRFNHTlhcXG5taXNhcHByZWhlbmQvR1NEXFxubWlzYXBwcmVoZW5zaW9uL01TXFxubWlzYXBwcm9wcmlhdGUvWERTR05cXG5taXNhcHByb3ByaWF0aW9uL01cXG5taXNiZWdvdHRlblxcbm1pc2JlaGF2ZS9HRFNcXG5taXNiZWhhdmlvci9NXFxubWlzY1xcbm1pc2NhbGN1bGF0ZS9EU1hHTlxcbm1pc2NhbGN1bGF0aW9uL01cXG5taXNjYWxsL0RTR1xcbm1pc2NhcnJpYWdlL01TXFxubWlzY2FycnkvR0RTXFxubWlzY2FzdC9TR1xcbm1pc2NlZ2VuYXRpb24vTVxcbm1pc2NlbGxhbmVvdXMvWVxcbm1pc2NlbGxhbnkvU01cXG5taXNjaGFuY2UvU01cXG5taXNjaGllZi9NXFxubWlzY2hpZXZvdXMvWVBcXG5taXNjaGlldm91c25lc3MvTVxcbm1pc2NpYmlsaXR5L01cXG5taXNjaWJsZVxcbm1pc2NsYXNzaWZpZWRcXG5taXNjb21tdW5pY2F0aW9uL1NcXG5taXNjb25jZWl2ZS9HRFNcXG5taXNjb25jZXB0aW9uL1NNXFxubWlzY29uZHVjdC9NREdTXFxubWlzY29uc3RydWN0aW9uL01TXFxubWlzY29uc3RydWUvR0RTXFxubWlzY291bnQvTURTR1xcbm1pc2NyZWFudC9TTVxcbm1pc2N1ZS9EU01HXFxubWlzZGVhbC9HTVNcXG5taXNkZWFsdFxcbm1pc2RlZWQvTVNcXG5taXNkZW1lYW5vci9NU1xcbm1pc2RpYWdub3NlL0dEU1xcbm1pc2RpYWdub3Npcy9NXFxubWlzZGlkXFxubWlzZGlyZWN0L1NER1xcbm1pc2RpcmVjdGlvbi9NXFxubWlzZG8vSkdcXG5taXNkb2VzXFxubWlzZG9pbmcvTVxcbm1pc2RvbmVcXG5taXNlci9TQk1ZXFxubWlzZXJhYmxlbmVzcy9NXFxubWlzZXJhYmx5XFxubWlzZXJsaW5lc3MvTVxcbm1pc2VyeS9TTVxcbm1pc2ZlYXNhbmNlL01cXG5taXNmZWF0dXJlL1NcXG5taXNmaWxlL0dEU1xcbm1pc2ZpcmUvTUdEU1xcbm1pc2ZpdC9TTVxcbm1pc2ZpdHRlZFxcbm1pc2ZpdHRpbmdcXG5taXNmb3J0dW5lL1NNXFxubWlzZ2l2aW5nL01TXFxubWlzZ292ZXJuL1NER0xcXG5taXNnb3Zlcm5tZW50L01cXG5taXNndWlkYW5jZS9NXFxubWlzZ3VpZGUvRFNHXFxubWlzZ3VpZGVkL1lcXG5taXNoYW5kbGUvRFNHXFxubWlzaGFwL1NNXFxubWlzaGVhci9HU1xcbm1pc2hlYXJkXFxubWlzaGl0L1NcXG5taXNoaXR0aW5nXFxubWlzaG1hc2gvTVNcXG5taXNpZGVudGlmeS9HRFNcXG5taXNpbmZvcm0vREdTXFxubWlzaW5mb3JtYXRpb24vTVxcbm1pc2ludGVycHJldC9TR0RcXG5taXNpbnRlcnByZXRhdGlvbi9TTVxcbm1pc2p1ZGdlL0RTR1xcbm1pc2p1ZGdtZW50L1NNXFxubWlzbGFiZWwvR1NEXFxubWlzbGFpZFxcbm1pc2xheS9HU1xcbm1pc2xlYWQvR1NcXG5taXNsZWFkaW5nL1lcXG5taXNsZWRcXG5taXNtYW5hZ2UvTEdEU1xcbm1pc21hbmFnZW1lbnQvTVxcbm1pc21hdGNoL0dNRFNcXG5taXNuYW1lL0dEU1xcbm1pc25vbWVyL01TXFxubWlzb2dhbWlzdC9NU1xcbm1pc29nYW15L01cXG5taXNvZ3luaXN0L1NNXFxubWlzb2d5bmlzdGljXFxubWlzb2d5bm91c1xcbm1pc29neW55L01cXG5taXNwbGFjZS9HTERTXFxubWlzcGxhY2VtZW50L01cXG5taXNwbGF5L0dNRFNcXG5taXNwcmludC9HTURTXFxubWlzcHJpc2lvbi9NXFxubWlzcHJvbm91bmNlL0RTR1xcbm1pc3Byb251bmNpYXRpb24vU01cXG5taXNxdW90YXRpb24vTVNcXG5taXNxdW90ZS9NR0RTXFxubWlzcmVhZC9HSlNcXG5taXNyZWFkaW5nL01cXG5taXNyZW1lbWJlci9HRFNcXG5taXNyZXBvcnQvTURHU1xcbm1pc3JlcHJlc2VudC9HRFNcXG5taXNyZXByZXNlbnRhdGlvbi9NU1xcbm1pc3J1bGUvTUdEU1xcbm1pc3Mnc1xcbm1pc3MvRURTR1ZcXG5taXNzYWwvRVNNXFxubWlzc2VkL1VcXG5taXNzaGFwZS9HRFNcXG5taXNzaGFwZW5cXG5taXNzaWxlL01TXFxubWlzc2lsZXJ5L01cXG5taXNzaW9uL0FNU1xcbm1pc3Npb25hcnkvU01cXG5taXNzaW9uZXIvU01cXG5taXNzaXZlL01TXFxubWlzc3BlYWsvR1NcXG5taXNzcGVsbC9HREpTXFxubWlzc3BlbGxpbmcvTVxcbm1pc3NwZW5kL0dTXFxubWlzc3BlbnRcXG5taXNzcG9rZVxcbm1pc3Nwb2tlblxcbm1pc3N0YXRlL0dEU0xcXG5taXNzdGF0ZW1lbnQvU01cXG5taXNzdGVwL01TXFxubWlzc3VzL01TXFxubWlzdCdzXFxubWlzdC9DRFJTWkdcXG5taXN0YWthYmxlL1VcXG5taXN0YWtlL0JNR1NcXG5taXN0YWtlbi9ZXFxubWlzdGVyJ3NcXG5taXN0aWx5XFxubWlzdGltZS9HRFNcXG5taXN0aW5lc3MvTVxcbm1pc3RsZXRvZS9NXFxubWlzdG9va1xcbm1pc3RyYWwvTVNcXG5taXN0cmFuc2xhdGVkXFxubWlzdHJlYXQvTERHU1xcbm1pc3RyZWF0bWVudC9NXFxubWlzdHJlc3MvTVNcXG5taXN0cmlhbC9NU1xcbm1pc3RydXN0L01EU0dcXG5taXN0cnVzdGZ1bC9ZXFxubWlzdHkvUFJUXFxubWlzdHlwZS9HU1xcbm1pc3VuZGVyc3RhbmQvU0dKXFxubWlzdW5kZXJzdGFuZGluZy9NXFxubWlzdW5kZXJzdG9vZFxcbm1pc3VzZS9EU01HXFxubWl0ZS9NWlJTXFxubWl0ZXIvTURHXFxubWl0aWdhdGUvRFNHTlxcbm1pdGlnYXRlZC9VXFxubWl0aWdhdGlvbi9NXFxubWl0b2Nob25kcmlhXFxubWl0b2Nob25kcmlhbFxcbm1pdG9jaG9uZHJpb25cXG5taXRvc2VzXFxubWl0b3Npcy9NXFxubWl0b3RpY1xcbm1pdHJhbFxcbm1pdHQvTU5TWFxcbm1pdHRlbi9NXFxubWl0enZhaFxcbm1peC9aR01EUlNCXFxubWl4ZWQvVVxcbm1peGVyL01cXG5taXh0dXJlL1NNXFxubWl6emVuL01TXFxubWl6emVubWFzdC9TTVxcbm1rYXlcXG5ta3NcXG5tbFxcbm1tXFxubW5lbW9uaWMvTVNcXG5tbmVtb25pY2FsbHlcXG5tby9DS0hTXFxubW9hbi9NRFJTWkdcXG5tb2FuZXIvTVxcbm1vYXQvTURTXFxubW9iJ3NcXG5tb2IvQ1NcXG5tb2JiZWQvQ1xcbm1vYmJpbmcvQ1xcbm1vYmlsZS9NU1xcbm1vYmlsaXR5L01cXG5tb2JpbGl6YXRpb24vQ01cXG5tb2JpbGl6YXRpb25zXFxubW9iaWxpemUvQ0RTR1xcbm1vYmlsaXplci9TTVxcbm1vYnN0ZXIvU01cXG5tb2NjYXNpbi9TTVxcbm1vY2hhL1NNXFxubW9jay9EUlNaR1xcbm1vY2tlci9NXFxubW9ja2VyeS9TTVxcbm1vY2tpbmcvWVxcbm1vY2tpbmdiaXJkL1NNXFxubW9kL1NUTVxcbm1vZGFsL1NNXFxubW9kYWxpdHkvU1xcbm1vZGRlZFxcbm1vZGRpbmdcXG5tb2RlL01TXFxubW9kZWwvWkdTSk1EUlxcbm1vZGVsZXIvTVxcbm1vZGVsaW5nL01cXG5tb2RlbS9TTVxcbm1vZGVyYXRlL01ZR05QRFNcXG5tb2RlcmF0ZW5lc3MvTVxcbm1vZGVyYXRpb24vTVxcbm1vZGVyYXRvci9TTVxcbm1vZGVybi9NWVBTXFxubW9kZXJuaXNtL01cXG5tb2Rlcm5pc3QvU01cXG5tb2Rlcm5pc3RpY1xcbm1vZGVybml0eS9NXFxubW9kZXJuaXphdGlvbi9NXFxubW9kZXJuaXplL0RSU1pHXFxubW9kZXJuaXplci9NXFxubW9kZXJubmVzcy9NXFxubW9kZXN0L1lcXG5tb2Rlc3R5L01cXG5tb2RpY3VtL1NNXFxubW9kaWZpYWJsZVxcbm1vZGlmaWNhdGlvbi9NXFxubW9kaWZpZWQvVVxcbm1vZGlmaWVyL01cXG5tb2RpZnkvRFJTWFpHTlxcbm1vZGlzaC9ZUFxcbm1vZGlzaG5lc3MvTVxcbm1vZHVsYXJcXG5tb2R1bGFyaXphdGlvblxcbm1vZHVsYXRlL0NHTkRTXFxubW9kdWxhdGlvbi9DTVxcbm1vZHVsYXRpb25zXFxubW9kdWxhdG9yL01TXFxubW9kdWxlL01TXFxubW9kdWxvXFxubW9kdWx1c1xcbm1vZ2d5XFxubW9ndWwvU01cXG5tb2hhaXIvTVxcbm1vaVxcbm1vaWV0eS9TTVxcbm1vaWwvTURTR1xcbm1vaXJlL1NNXFxubW9pc3QvWFRQTlJZXFxubW9pc3Rlbi9EUlpHXFxubW9pc3RlbmVyL01cXG5tb2lzdG5lc3MvTVxcbm1vaXN0dXJlL01cXG5tb2lzdHVyaXplL1pHRFJTXFxubW9pc3R1cml6ZXIvTVxcbm1vbGFyL1NNXFxubW9sYXNzZXMvTVxcbm1vbGQvTURSSlNaR1xcbm1vbGRib2FyZC9TTVxcbm1vbGRlci9HTURcXG5tb2xkaW5lc3MvTVxcbm1vbGRpbmcvTVxcbm1vbGR5L1RQUlxcbm1vbGUvTVNcXG5tb2xlY3VsYXJcXG5tb2xlY3VsYXJpdHkvTVxcbm1vbGVjdWxlL1NNXFxubW9sZWhpbGwvU01cXG5tb2xlc2tpbi9NXFxubW9sZXN0L0RSWkdTXFxubW9sZXN0YXRpb24vTVxcbm1vbGVzdGVkL1VcXG5tb2xlc3Rlci9NXFxubW9sbC9NU1xcbm1vbGxpZmljYXRpb24vTVxcbm1vbGxpZnkvRFNOR1xcbm1vbGx1c2Nhblxcbm1vbGx1c2svU01cXG5tb2xseS9TTVxcbm1vbGx5Y29kZGxlL0RTTUdcXG5tb2x0L01ETlJTWkdcXG5tb2x0ZXIvTVxcbm1vbHliZGVudW0vTVxcbm1vbS9TTVxcbm1vbWVudC9NU1xcbm1vbWVudGFcXG5tb21lbnRhcmlseVxcbm1vbWVudGFyaW5lc3MvTVxcbm1vbWVudGFyeS9QXFxubW9tZW50b3VzL1BZXFxubW9tZW50b3VzbmVzcy9NXFxubW9tZW50dW0vTVxcbm1vbW15L1NNXFxubW9uYWRcXG5tb25hcmNoL01cXG5tb25hcmNoaWNcXG5tb25hcmNoaWNhbFxcbm1vbmFyY2hpc20vTVxcbm1vbmFyY2hpc3QvTVNcXG5tb25hcmNoaXN0aWNcXG5tb25hcmNoc1xcbm1vbmFyY2h5L1NNXFxubW9uYXN0ZXJ5L1NNXFxubW9uYXN0aWMvTVNcXG5tb25hc3RpY2FsL1lcXG5tb25hc3RpY2lzbS9NXFxubW9uYXVyYWxcXG5tb25ldGFyaWx5XFxubW9uZXRhcmlzbS9NXFxubW9uZXRhcmlzdC9NU1xcbm1vbmV0YXJ5XFxubW9uZXRpemF0aW9uL0NcXG5tb25ldGl6ZS9DR0RTXFxubW9uZXkvU01EXFxubW9uZXliYWcvTVNcXG5tb25leWJveC9TXFxubW9uZXlsZW5kZXIvU01cXG5tb25leW1ha2VyL1NNXFxubW9uZXltYWtpbmcvTVxcbm1vbmdlci9NREdTXFxubW9uZ29sL1NcXG5tb25nb2xpc20vTVxcbm1vbmdvbG9pZC9NU1xcbm1vbmdvb3NlL01TXFxubW9uZ3JlbC9TTVxcbm1vbmllc1xcbm1vbmlrZXIvU01cXG5tb25pc20vTVxcbm1vbmlzdC9NU1xcbm1vbml0aW9uL1NNXFxubW9uaXRvci9TTURHXFxubW9uaXRvcnlcXG5tb25rL01TXFxubW9ua2V5L01ER1NcXG5tb25rZXlzaGluZS9TTVxcbm1vbmtpc2hcXG5tb25rc2hvb2QvU01cXG5tb25vL01cXG5tb25vY2hyb21hdGljXFxubW9ub2Nocm9tZS9NU1xcbm1vbm9jbGUvRFNNXFxubW9ub2Nsb25hbFxcbm1vbm9jb3R5bGVkb24vU01cXG5tb25vY290eWxlZG9ub3VzXFxubW9ub2N1bGFyXFxubW9ub2RpY1xcbm1vbm9kaXN0L1NNXFxubW9ub2R5L1NNXFxubW9ub2dhbWlzdC9NU1xcbm1vbm9nYW1vdXMvWVxcbm1vbm9nYW15L01cXG5tb25vZ3JhbS9TTVxcbm1vbm9ncmFtbWVkXFxubW9ub2dyYW1taW5nXFxubW9ub2dyYXBoL01cXG5tb25vZ3JhcGhzXFxubW9ub2xpbmd1YWwvTVNcXG5tb25vbGl0aC9NXFxubW9ub2xpdGhpY1xcbm1vbm9saXRoc1xcbm1vbm9sb2dpc3QvU01cXG5tb25vbG9ndWUvU01cXG5tb25vbWFuaWEvTVxcbm1vbm9tYW5pYWMvTVNcXG5tb25vbWFuaWFjYWxcXG5tb25vbWVyL1NNXFxubW9ub251Y2xlb3Npcy9NXFxubW9ub3Bob25pY1xcbm1vbm9wbGFuZS9TTVxcbm1vbm9wb2xpc3QvU01cXG5tb25vcG9saXN0aWNcXG5tb25vcG9saXphdGlvbi9NXFxubW9ub3BvbGl6ZS9EUlNaR1xcbm1vbm9wb2xpemVyL01cXG5tb25vcG9seS9TTVxcbm1vbm9yYWlsL01TXFxubW9ub3N5bGxhYmljXFxubW9ub3N5bGxhYmxlL01TXFxubW9ub3RoZWlzbS9NXFxubW9ub3RoZWlzdC9TTVxcbm1vbm90aGVpc3RpY1xcbm1vbm90b25lL01TXFxubW9ub3RvbmljXFxubW9ub3RvbmljYWxseVxcbm1vbm90b25vdXMvUFlcXG5tb25vdG9ub3VzbmVzcy9NXFxubW9ub3RvbnkvTVxcbm1vbm91bnNhdHVyYXRlZFxcbm1vbm94aWRlL01TXFxubW9uc2VpZ25ldXIvTVxcbm1vbnNpZXVyL01cXG5tb25zaWdub3IvU01cXG5tb25zb29uL1NNXFxubW9uc29vbmFsXFxubW9uc3Rlci9TTVxcbm1vbnN0cmFuY2UvQVNNXFxubW9uc3Ryb3NpdHkvU01cXG5tb25zdHJvdXMvWVxcbm1vbnRhZ2UvU01cXG5tb250aC9NWVxcbm1vbnRobHkvU01cXG5tb250aHNcXG5tb251bWVudC9NU1xcbm1vbnVtZW50YWwvWVxcbm1vby9TR01EXFxubW9vY2gvWkdNRFJTXFxubW9vY2hlci9NXFxubW9vZC9NU1xcbm1vb2RpbHlcXG5tb29kaW5lc3MvTVxcbm1vb2R5L1RQUlxcbm1vb24vTURTR1xcbm1vb25iZWFtL01TXFxubW9vbmxlc3NcXG5tb29ubGlnaHQvU01EUlpHXFxubW9vbmxpZ2h0ZXIvTVxcbm1vb25saWdodGluZy9NXFxubW9vbmxpdFxcbm1vb25zY2FwZS9TTVxcbm1vb25zaGluZS9NWlJTXFxubW9vbnNoaW5lci9NXFxubW9vbnNob3QvTVNcXG5tb29uc3RvbmUvTVNcXG5tb29uc3RydWNrXFxubW9vbndhbGsvTVNcXG5tb29yL01ESlNHXFxubW9vcmhlbi9TXFxubW9vcmluZy9NXFxubW9vcmxhbmQvTVNcXG5tb29zZS9NXFxubW9vdC9EU0dcXG5tb3AvU1pHTURSXFxubW9wZS9NU1xcbm1vcGVkL1NNXFxubW9wZXIvTVxcbm1vcGV5XFxubW9waWVyXFxubW9waWVzdFxcbm1vcGlzaFxcbm1vcHBlZFxcbm1vcHBldC9NU1xcbm1vcHBpbmdcXG5tb3JhaW5lL1NNXFxubW9yYWwvU01ZXFxubW9yYWxlL01cXG5tb3JhbGlzbVxcbm1vcmFsaXN0L01TXFxubW9yYWxpc3RpY1xcbm1vcmFsaXN0aWNhbGx5XFxubW9yYWxpdGllc1xcbm1vcmFsaXR5L1VNXFxubW9yYWxpemF0aW9uL0NNXFxubW9yYWxpemUvQ0dEU1xcbm1vcmFsaXplci9NU1xcbm1vcmFzcy9NU1xcbm1vcmF0b3JpdW0vU01cXG5tb3JheS9TTVxcbm1vcmJpZC9ZUFxcbm1vcmJpZGl0eS9NXFxubW9yYmlkbmVzcy9NXFxubW9yZGFuY3kvTVxcbm1vcmRhbnQvU01ZXFxubW9yZS9NU1xcbm1vcmVpc2hcXG5tb3JlbC9TTVxcbm1vcmVvdmVyXFxubW9yZXMvTVxcbm1vcmd1ZS9NU1xcbm1vcmlidW5kXFxubW9ybi9NSlNHXFxubW9ybmluZy9NXFxubW9yb2Njby9NXFxubW9yb24vU01cXG5tb3JvbmljXFxubW9yb25pY2FsbHlcXG5tb3Jvc2UvWVBcXG5tb3Jvc2VuZXNzL01cXG5tb3JwaC9HRFxcbm1vcnBoZW1lL01TXFxubW9ycGhlbWljXFxubW9ycGhpYS9NXFxubW9ycGhpbmUvTVxcbm1vcnBoaW5nL01cXG5tb3JwaG9sb2dpY2FsXFxubW9ycGhvbG9neS9NXFxubW9ycGhzXFxubW9ycm93L01TXFxubW9yc2VsL01TXFxubW9ydGFsL01ZU1xcbm1vcnRhbGl0eS9NXFxubW9ydGFyL01EU0dcXG5tb3J0YXJib2FyZC9TTVxcbm1vcnRnYWdlJ3NcXG5tb3J0Z2FnZS9BR0RTXFxubW9ydGdhZ2VlL01TXFxubW9ydGdhZ29yL01TXFxubW9ydGljaWFuL01TXFxubW9ydGlmaWNhdGlvbi9NXFxubW9ydGlmeS9OR0RTXFxubW9ydGlzZS9EU01HXFxubW9ydHVhcnkvU01cXG5tb3NhaWMvTVNcXG5tb3NleS9TR0RcXG5tb3NoL0RTR1xcbm1vc3F1ZS9NU1xcbm1vc3F1aXRvL01cXG5tb3NxdWl0b2VzXFxubW9zcy9NU1xcbm1vc3NiYWNrL1NNXFxubW9zc3kvVFJcXG5tb3N0L01ZXFxubW90L1NNXFxubW90ZSdzXFxubW90ZS9LQ1hTVk5cXG5tb3RlbC9TTVxcbm1vdGV0L1NNXFxubW90aC9NXFxubW90aGJhbGwvR01EU1xcbm1vdGhlci9NRFlTR1xcbm1vdGhlcmJvYXJkL1NNXFxubW90aGVyZnVja2VyL01TIVxcbm1vdGhlcmZ1Y2tpbmcvIVxcbm1vdGhlcmhvb2QvTVxcbm1vdGhlcmxhbmQvTVNcXG5tb3RoZXJsZXNzXFxubW90aGVybGluZXNzL01cXG5tb3Roc1xcbm1vdGlmL1NNXFxubW90aWxlL1NcXG5tb3RpbGl0eS9NXFxubW90aW9uL0tDTVxcbm1vdGlvbmVkXFxubW90aW9uaW5nXFxubW90aW9ubGVzcy9ZUFxcbm1vdGlvbmxlc3NuZXNzL01cXG5tb3RpdmF0ZS9DRFNHXFxubW90aXZhdGVkL1VcXG5tb3RpdmF0aW9uL1NNXFxubW90aXZhdGlvbmFsXFxubW90aXZhdG9yL1NNXFxubW90aXZlL01TXFxubW90aXZlbGVzc1xcbm1vdGxleS9NU1xcbm1vdGxpZXJcXG5tb3RsaWVzdFxcbm1vdG9jcm9zcy9NU1xcbm1vdG9yL1NHTURcXG5tb3RvcmJpa2UvTUdEU1xcbm1vdG9yYm9hdC9NU1xcbm1vdG9yY2FkZS9NU1xcbm1vdG9yY2FyL1NNXFxubW90b3JjeWNsZS9EU01HXFxubW90b3JjeWNsaXN0L01TXFxubW90b3Jpc3QvU01cXG5tb3Rvcml6YXRpb24vTVxcbm1vdG9yaXplL0RTR1xcbm1vdG9ybWFuL01cXG5tb3Rvcm1lblxcbm1vdG9ybW91dGgvTVxcbm1vdG9ybW91dGhzXFxubW90b3J3YXkvU01cXG5tb3R0bGUvR0RTXFxubW90dG8vTVxcbm1vdHRvZXNcXG5tb3VlL01TXFxubW91bmQvU0dNRFxcbm1vdW50L0VBU0dNRFxcbm1vdW50YWJsZVxcbm1vdW50YWluL1NNXFxubW91bnRhaW5lZXIvU01ER1xcbm1vdW50YWluZWVyaW5nL01cXG5tb3VudGFpbm91c1xcbm1vdW50YWluc2lkZS9TTVxcbm1vdW50YWludG9wL1NNXFxubW91bnRlYmFuay9NU1xcbm1vdW50ZWQvVVxcbm1vdW50ZXIvTVNcXG5tb3VudGluZy9TTVxcbm1vdXJuL1NaR0RSXFxubW91cm5lZC9VXFxubW91cm5lci9NXFxubW91cm5mdWwvWVBcXG5tb3VybmZ1bG5lc3MvTVxcbm1vdXJuaW5nL01cXG5tb3VzZS9EUlNNWkdcXG5tb3VzZXIvTVxcbm1vdXNldHJhcC9TTVxcbm1vdXNldHJhcHBlZFxcbm1vdXNldHJhcHBpbmdcXG5tb3VzaW5lc3MvTVxcbm1vdXNzYWthL1NcXG5tb3Vzc2UvTUdEU1xcbm1vdXN5L1BUUlxcbm1vdXRoL0dNRFxcbm1vdXRoZmVlbFxcbm1vdXRoZnVsL01TXFxubW91dGhpbmVzcy9NXFxubW91dGhwaWVjZS9NU1xcbm1vdXRoc1xcbm1vdXRod2FzaC9NU1xcbm1vdXRod2F0ZXJpbmdcXG5tb3V0aHkvUFRSXFxubW91dG9uL01cXG5tb3ZhYmxlL1NNXFxubW92ZS9BTVpHRFJTQlxcbm1vdmVkL1VcXG5tb3ZlbWVudC9TTVxcbm1vdmVyL0FNXFxubW92aWUvU01cXG5tb3ZpZWdvZXIvU01cXG5tb3ZpbmcvWVxcbm1vdy9TWkdNRFJcXG5tb3dlci9NXFxubW94aWUvTVxcbm1venphcmVsbGEvTVxcbm1wXFxubXBnXFxubXBoXFxubXRcXG5tdGdcXG5tdGdlXFxubXUvU01cXG5tdWNoL01cXG5tdWNpbGFnZS9NXFxubXVjaWxhZ2lub3VzXFxubXVjay9NRFNHXFxubXVja3Jha2UvRFJTWkdcXG5tdWNrcmFrZXIvTVxcbm11Y2t5L1RSXFxubXVjb3VzXFxubXVjdXMvTVxcbm11ZC9NXFxubXVkZGlseVxcbm11ZGRpbmVzcy9NXFxubXVkZGxlL01HRFNcXG5tdWRkbGVoZWFkZWRcXG5tdWRkeS9QVEdEUlNcXG5tdWRmbGFwL1NcXG5tdWRmbGF0L01TXFxubXVkZ3VhcmQvU01cXG5tdWRwYWNrL1NcXG5tdWRyb29tL01TXFxubXVkc2xpZGUvTVNcXG5tdWRzbGluZ2VyL1NNXFxubXVkc2xpbmdpbmcvTVxcbm11ZW5zdGVyL01cXG5tdWVzbGlcXG5tdWV6emluL01TXFxubXVmZi9NRFNHXFxubXVmZmluL01TXFxubXVmZmxlL1pHRFJTXFxubXVmZmxlci9NXFxubXVmdGkvU01cXG5tdWcvU01cXG5tdWdmdWwvTVNcXG5tdWdnZWRcXG5tdWdnZXIvTVNcXG5tdWdnaW5lc3MvTVxcbm11Z2dpbmcvTVNcXG5tdWdnaW5zXFxubXVnZ2xlL01TXFxubXVnZ3kvUFRSXFxubXVnc2hvdC9NU1xcbm11Z3d1bXAvTVNcXG5tdWphaGVkZGluXFxubXVrbHVrL01TXFxubXVsYXR0by9NXFxubXVsYXR0b2VzXFxubXVsYmVycnkvU01cXG5tdWxjaC9HTURTXFxubXVsY3QvU0dNRFxcbm11bGUvTVNcXG5tdWxlc2tpbm5lci9NU1xcbm11bGV0ZWVyL01TXFxubXVsaXNoL1BZXFxubXVsaXNobmVzcy9NXFxubXVsbC9EU0dcXG5tdWxsYWgvTVxcbm11bGxhaHNcXG5tdWxsZWluL01cXG5tdWxsZXQvTVNcXG5tdWxsaWdhbi9TTVxcbm11bGxpZ2F0YXdueS9NXFxubXVsbGlvbi9TTURcXG5tdWx0aVxcbm11bHRpY2VsbHVsYXJcXG5tdWx0aWNoYW5uZWxcXG5tdWx0aWNvbG9yZWRcXG5tdWx0aWN1bHR1cmFsXFxubXVsdGljdWx0dXJhbGlzbS9NXFxubXVsdGlkaW1lbnNpb25hbFxcbm11bHRpZGlzY2lwbGluYXJ5XFxubXVsdGlmYWNldGVkXFxubXVsdGlmYW1pbHlcXG5tdWx0aWZhcmlvdXMvUFlcXG5tdWx0aWZhcmlvdXNuZXNzL01cXG5tdWx0aWZvcm1cXG5tdWx0aWdyYWluXFxubXVsdGlsYXRlcmFsL1lcXG5tdWx0aWxheWVyZWRcXG5tdWx0aWxldmVsXFxubXVsdGlsaW5ndWFsXFxubXVsdGlsaW5ndWFsaXNtL01cXG5tdWx0aW1lZGlhL01cXG5tdWx0aW1pbGxpb25haXJlL1NNXFxubXVsdGluYXRpb25hbC9TTVxcbm11bHRpcGFydFxcbm11bHRpcGFydHlcXG5tdWx0aXBsYXllci9NXFxubXVsdGlwbGUvTVNcXG5tdWx0aXBsZXgvWkdNRFJTXFxubXVsdGlwbGV4ZXIvTVxcbm11bHRpcGxpY2FuZC9NU1xcbm11bHRpcGxpY2F0aW9uL01cXG5tdWx0aXBsaWNhdGl2ZVxcbm11bHRpcGxpY2l0eS9TTVxcbm11bHRpcGxpZXIvTVxcbm11bHRpcGx5L05aR0RSU1hcXG5tdWx0aXByb2Nlc3NpbmdcXG5tdWx0aXByb2Nlc3Nvci9TTVxcbm11bHRpcHVycG9zZVxcbm11bHRpcmFjaWFsXFxubXVsdGlzdGFnZVxcbm11bHRpc3RvcnlcXG5tdWx0aXRhc2svR1NcXG5tdWx0aXRhc2tpbmcvTVxcbm11bHRpdHVkZS9TTVxcbm11bHRpdHVkaW5vdXNcXG5tdWx0aXZhcmlhdGVcXG5tdWx0aXZlcnNlL1NNXFxubXVsdGl2aXRhbWluL01TXFxubXVsdGl5ZWFyXFxubXVtXFxubXVtYmxlL01aR0RSU1xcbm11bWJsZXIvTVxcbm11bWJsZXR5cGVnL01cXG5tdW1tZXIvTVNcXG5tdW1tZXJ5L01cXG5tdW1taWZpY2F0aW9uL01cXG5tdW1taWZ5L0dORFNcXG5tdW1teS9TTVxcbm11bXBzL01cXG5tdW5cXG5tdW5jaC9HRFNcXG5tdW5jaGllL1NcXG5tdW5jaGllcy9NXFxubXVuY2hraW4vU01cXG5tdW5kYW5lL1NZXFxubXVuZy9EU0dcXG5tdW5pY2lwYWwvU01ZXFxubXVuaWNpcGFsaXR5L1NNXFxubXVuaWZpY2VuY2UvTVxcbm11bmlmaWNlbnQvWVxcbm11bml0aW9uL01ER1NcXG5tdXJhbC9TTVxcbm11cmFsaXN0L1NNXFxubXVyZGVyL1pHTURSU1xcbm11cmRlcmVyL01cXG5tdXJkZXJlc3MvTVNcXG5tdXJkZXJvdXMvWVxcbm11cmsvTVNcXG5tdXJraWx5XFxubXVya2luZXNzL01cXG5tdXJreS9QVFJcXG5tdXJtdXIvWkdKTURSU1xcbm11cm11cmVyL01cXG5tdXJtdXJpbmcvTVxcbm11cm11cm91c1xcbm11cnJhaW4vTVxcbm11c2NhdC9NU1xcbm11c2NhdGVsL1NNXFxubXVzY2xlL01HRFNcXG5tdXNjbGVib3VuZFxcbm11c2NsZW1hblxcbm11c2NsZW1lblxcbm11c2NseVxcbm11c2N1bGFyL1lcXG5tdXNjdWxhcml0eS9NXFxubXVzY3VsYXR1cmUvTVxcbm11c2N1bG9za2VsZXRhbFxcbm11c2UvTUdEU0pcXG5tdXNldHRlL01TXFxubXVzZXVtL01TXFxubXVzaC9NRFJTWkdcXG5tdXNoaW5lc3MvTVxcbm11c2hyb29tL0dTTURcXG5tdXNoeS9QVFJcXG5tdXNpYy9TTVxcbm11c2ljYWwvTVlTXFxubXVzaWNhbGUvTVNcXG5tdXNpY2FsaXR5L01cXG5tdXNpY2lhbi9TTVlcXG5tdXNpY2lhbnNoaXAvTVxcbm11c2ljb2xvZ2ljYWxcXG5tdXNpY29sb2dpc3QvTVNcXG5tdXNpY29sb2d5L01cXG5tdXNpbmcvTVlcXG5tdXNrL01cXG5tdXNrZWcvTVNcXG5tdXNrZWxsdW5nZS9NU1xcbm11c2tldC9NU1xcbm11c2tldGVlci9NU1xcbm11c2tldHJ5L01cXG5tdXNraWUvTVxcbm11c2tpbmVzcy9NXFxubXVza21lbG9uL1NNXFxubXVza294L01OXFxubXVza3JhdC9NU1xcbm11c2t5L1BUUlNcXG5tdXNsaW4vTVxcbm11c3MvTURTR1xcbm11c3NlbC9NU1xcbm11c3N5L1RSXFxubXVzdCd2ZVxcbm11c3QvTVJTWlxcbm11c3RhY2hlL01EU1xcbm11c3RhY2hpby9TTURcXG5tdXN0YW5nL01TXFxubXVzdGFyZC9NXFxubXVzdGVyL0dNRFxcbm11c3RpbHlcXG5tdXN0aW5lc3MvTVxcbm11c3RuJ3RcXG5tdXN0eS9QVFJcXG5tdXRhYmlsaXR5L01cXG5tdXRhYmx5XFxubXV0YWdlbi9NU1xcbm11dGFnZW5pY1xcbm11dGFudC9NU1xcbm11dGF0ZS9YR05WRFNcXG5tdXRhdGlvbi9NXFxubXV0YXRpb25hbFxcbm11dGUvTVlUR0RSU1BCXFxubXV0ZW5lc3MvTVxcbm11dGlsYXRlL0RTR05YXFxubXV0aWxhdGlvbi9NXFxubXV0aWxhdG9yL1NNXFxubXV0aW5lZXIvU01cXG5tdXRpbm91cy9ZXFxubXV0aW55L0dEU01cXG5tdXR0L01TXFxubXV0dGVyL1pHSk1EUlNcXG5tdXR0ZXJlci9NXFxubXV0dGVyaW5nL01cXG5tdXR0b24vTVxcbm11dHRvbmNob3BzL01cXG5tdXR0b255XFxubXV0dWFsL1lcXG5tdXR1YWxpdHkvTVxcbm11dW11dS9NU1xcbm11emFrXFxubXV6emlseVxcbm11enpsZS9EU01HXFxubXV6enkvUFxcbm15XFxubXljb2xvZ2lzdC9TTVxcbm15Y29sb2d5L01cXG5teWVsaXRpcy9NXFxubXluYS9NU1xcbm15b2NhcmRpYWxcXG5teW9jYXJkaXVtXFxubXlvcGlhL01cXG5teW9waWNcXG5teW9waWNhbGx5XFxubXlyaWFkL1NNXFxubXlybWlkb24vTVNcXG5teXJyaC9NXFxubXlydGxlL1NNXFxubXlzXFxubXlzZWxmXFxubXlzdGVyaW91cy9QWVxcbm15c3RlcmlvdXNuZXNzL01cXG5teXN0ZXJ5L1NNXFxubXlzdGljL1NNXFxubXlzdGljYWwvWVxcbm15c3RpY2lzbS9NXFxubXlzdGlmaWNhdGlvbi9DTVxcbm15c3RpZnkvQ0RTR05cXG5teXN0aXF1ZS9NXFxubXl0aC9NXFxubXl0aGljXFxubXl0aGljYWxcXG5teXRob2xvZ2ljYWxcXG5teXRob2xvZ2lzdC9TTVxcbm15dGhvbG9naXplL0RTR1xcbm15dGhvbG9neS9TTVxcbm15dGhzXFxubXl4b21hdG9zaXNcXG5uL0lLVEhcXG5uYWFuL1NcXG5uYWIvU1xcbm5hYmJlZFxcbm5hYmJpbmdcXG5uYWJvYi9TTVxcbm5hY2VsbGUvU01cXG5uYWNoby9TTVxcbm5hY3JlL01cXG5uYWNyZW91c1xcbm5hZGlyL1NNXFxubmFlXFxubmFmZi9SVFxcbm5hZy9TTVxcbm5hZ2dlZFxcbm5hZ2dlci9NU1xcbm5hZ2dpbmdcXG5uYWd3YXJlXFxubmFoXFxubmFpYWQvU01cXG5uYWlmL01TXFxubmFpbC9NRFNHXFxubmFpbGJydXNoL01TXFxubmFpdmUvUllUXFxubmFpdmV0ZS9NXFxubmFpdmV0eS9NXFxubmFrZWQvUFlcXG5uYWtlZG5lc3MvTVxcbm5hbWUnc1xcbm5hbWUvQUdEU1xcbm5hbWVhYmxlL1VcXG5uYW1lZC9VXFxubmFtZWxlc3MvWVxcbm5hbWVseVxcbm5hbWVwbGF0ZS9NU1xcbm5hbWVzYWtlL1NNXFxubmFubnkvU01cXG5uYW5vYm90L1NcXG5uYW5vbWV0ZXIvU1xcbm5hbm9zZWNvbmQvU01cXG5uYW5vdGVjaG5vbG9neS9TTVxcbm5hbm90dWJlXFxubmFwL1NNXFxubmFwYWxtL01EU0dcXG5uYXBlL01TXFxubmFwaHRoYS9NXFxubmFwaHRoYWxlbmUvTVxcbm5hcGtpbi9NU1xcbm5hcGxlc3NcXG5uYXBvbGVvbi9TTVxcbm5hcHBlZFxcbm5hcHBlci9NU1xcbm5hcHBpbmdcXG5uYXBweS9UUlNNXFxubmFyYy9NU1xcbm5hcmNpc3Npc20vTVxcbm5hcmNpc3Npc3QvTVNcXG5uYXJjaXNzaXN0aWNcXG5uYXJjaXNzdXMvTVxcbm5hcmNvbGVwc3kvTVxcbm5hcmNvbGVwdGljXFxubmFyY29zZXNcXG5uYXJjb3Npcy9NXFxubmFyY290aWMvU01cXG5uYXJjb3RpemF0aW9uL01cXG5uYXJjb3RpemUvR0RTXFxubmFya1xcbm5hcmt5XFxubmFycmF0ZS9HTlZEU1hcXG5uYXJyYXRpb24vTVxcbm5hcnJhdGl2ZS9TTVxcbm5hcnJhdG9yL1NNXFxubmFycm93L1BUR01EUllTXFxubmFycm93bmVzcy9NXFxubmFyd2hhbC9NU1xcbm5hcnlcXG5uYXNhbC9TTVlcXG5uYXNhbGl0eS9NXFxubmFzYWxpemF0aW9uL01cXG5uYXNhbGl6ZS9EU0dcXG5uYXNjZW5jZS9BTVxcbm5hc2NlbnQvQVxcbm5hc3RpbHlcXG5uYXN0aW5lc3MvTVxcbm5hc3R1cnRpdW0vU01cXG5uYXN0eS9QVFJcXG5uYXRhbFxcbm5hdGNoXFxubmF0aW9uL01TXFxubmF0aW9uYWwvTVlTXFxubmF0aW9uYWxpc20vTVxcbm5hdGlvbmFsaXN0L1NNXFxubmF0aW9uYWxpc3RpY1xcbm5hdGlvbmFsaXN0aWNhbGx5XFxubmF0aW9uYWxpdHkvU01cXG5uYXRpb25hbGl6YXRpb24vTVNcXG5uYXRpb25hbGl6ZS9DRFNHXFxubmF0aW9uaG9vZC9NXFxubmF0aW9ud2lkZVxcbm5hdGl2ZS9NU1xcbm5hdGl2aXR5L1NNXFxubmF0bFxcbm5hdHRlci9HTURTXFxubmF0dGlseVxcbm5hdHRpbmVzcy9NXFxubmF0dHkvUFRSXFxubmF0dXJhbCdzXFxubmF0dXJhbC9VUFlcXG5uYXR1cmFsaXNtL01cXG5uYXR1cmFsaXN0L1NNXFxubmF0dXJhbGlzdGljXFxubmF0dXJhbGl6YXRpb24vTVxcbm5hdHVyYWxpemUvRFNHXFxubmF0dXJhbG5lc3MvVU1cXG5uYXR1cmFsc1xcbm5hdHVyZSdzXFxubmF0dXJlL0NTXFxubmF0dXJpc21cXG5uYXR1cmlzdC9TXFxubmF1Z2h0L01TXFxubmF1Z2h0aWx5XFxubmF1Z2h0aW5lc3MvTVxcbm5hdWdodHkvUFRSXFxubmF1c2VhL01cXG5uYXVzZWFtXFxubmF1c2VhdGUvR0RTXFxubmF1c2VhdGluZy9ZXFxubmF1c2VvdXMvUFlcXG5uYXVzZW91c25lc3MvTVxcbm5hdXRpY2FsL1lcXG5uYXV0aWx1cy9NU1xcbm5hdmFsXFxubmF2ZS9NU1xcbm5hdmVsL1NNXFxubmF2aWdhYmlsaXR5L01cXG5uYXZpZ2FibGVcXG5uYXZpZ2F0ZS9EU0dOXFxubmF2aWdhdGlvbi9NXFxubmF2aWdhdGlvbmFsXFxubmF2aWdhdG9yL01TXFxubmF2dnkvU1xcbm5hdnkvU01cXG5uYXkvU01cXG5uYXlzYXllci9NU1xcbm5lJ2VyXFxubmVhbmRlcnRoYWwvTVNcXG5uZWFwL01TXFxubmVhci9EUllTUFRHXFxubmVhcmJ5XFxubmVhcm5lc3MvTVxcbm5lYXJzaG9yZVxcbm5lYXJzaWRlXFxubmVhcnNpZ2h0ZWQvWVBcXG5uZWFyc2lnaHRlZG5lc3MvTVxcbm5lYXQvTlJZUFhUXFxubmVhdGVuL0dEXFxubmVhdGhcXG5uZWF0bmVzcy9NXFxubmVidWxhL01cXG5uZWJ1bGFlXFxubmVidWxhclxcbm5lYnVsb3VzL1BZXFxubmVidWxvdXNuZXNzL01cXG5uZWNlc3NhcmlseS9VXFxubmVjZXNzYXJ5L1NNXFxubmVjZXNzaXRhdGUvRFNHXFxubmVjZXNzaXRvdXNcXG5uZWNlc3NpdHkvU01cXG5uZWNrL01EU0dcXG5uZWNrYmFuZC9TXFxubmVja2VyY2hpZWYvTVNcXG5uZWNraW5nL01cXG5uZWNrbGFjZS9NR0RTSlxcbm5lY2tsaW5lL01TXFxubmVja3RpZS9NU1xcbm5lY3JvbG9neS9NXFxubmVjcm9tYW5jZXIvU01cXG5uZWNyb21hbmN5L01cXG5uZWNyb3BoaWxpYVxcbm5lY3JvcGhpbGlhYy9TXFxubmVjcm9wb2xpcy9NU1xcbm5lY3Jvc2VzXFxubmVjcm9zaXMvTVxcbm5lY3JvdGljXFxubmVjdGFyL01cXG5uZWN0YXJpbmUvTVNcXG5uZWVcXG5uZWVkL01EU0dcXG5uZWVkZWQvVVxcbm5lZWRmdWwvWVxcbm5lZWRpbmVzcy9NXFxubmVlZGxlL01HRFNcXG5uZWVkbGVwb2ludC9NXFxubmVlZGxlc3MvWVBcXG5uZWVkbGVzc25lc3MvTVxcbm5lZWRsZXdvbWFuL01cXG5uZWVkbGV3b21lblxcbm5lZWRsZXdvcmsvTVxcbm5lZWRuJ3RcXG5uZWVkeS9QVFJcXG5uZWZhcmlvdXMvWVBcXG5uZWZhcmlvdXNuZXNzL01cXG5uZWdcXG5uZWdhdGUvRFNHTlZYXFxubmVnYXRpb24vTVxcbm5lZ2F0aXZlL01ZR1BEU1xcbm5lZ2F0aXZlbmVzcy9NXFxubmVnYXRpdmlzbS9NXFxubmVnYXRpdml0eS9NXFxubmVnbGVjdC9TR01EXFxubmVnbGVjdGZ1bC9ZUFxcbm5lZ2xlY3RmdWxuZXNzL01cXG5uZWdsaWdlZS9NU1xcbm5lZ2xpZ2VuY2UvTVxcbm5lZ2xpZ2VudC9ZXFxubmVnbGlnaWJsZVxcbm5lZ2xpZ2libHlcXG5uZWdvdGlhYmlsaXR5L01cXG5uZWdvdGlhYmxlL0FcXG5uZWdvdGlhdGUvQURTR05cXG5uZWdvdGlhdGlvbi9BTVxcbm5lZ290aWF0aW9uc1xcbm5lZ290aWF0b3IvTVNcXG5uZWdyaXR1ZGUvTVxcbm5lZ3JvXFxubmVncm9pZFxcbm5laWdoL01ER1xcbm5laWdoYm9yL1NNRFlHXFxubmVpZ2hib3Job29kL1NNXFxubmVpZ2hib3JsaW5lc3MvTVxcbm5laWdoc1xcbm5laXRoZXJcXG5uZWxzb24vU01cXG5uZW1hdG9kZS9TTVxcbm5lbWVzZXNcXG5uZW1lc2lzL01cXG5uZW9jbGFzc2ljXFxubmVvY2xhc3NpY2FsXFxubmVvY2xhc3NpY2lzbS9NXFxubmVvY29sb25pYWxpc20vTVxcbm5lb2NvbG9uaWFsaXN0L01TXFxubmVvY29uL1NNXFxubmVvY29uc2VydmF0aXZlL1NNXFxubmVvY29ydGV4XFxubmVvZHltaXVtL01cXG5uZW9saXRoaWNcXG5uZW9sb2dpc20vU01cXG5uZW9uL01cXG5uZW9uYXRhbFxcbm5lb25hdGUvTVNcXG5uZW9waGlsaWFcXG5uZW9waHl0ZS9NU1xcbm5lb3BsYXNtL01TXFxubmVvcGxhc3RpY1xcbm5lb3ByZW5lL01cXG5uZXBlbnRoZS9NXFxubmVwaGV3L1NNXFxubmVwaHJpdGUvTVxcbm5lcGhyaXRpY1xcbm5lcGhyaXRpcy9NXFxubmVwaHJvcGF0aHlcXG5uZXBvdGlzbS9NXFxubmVwb3Rpc3QvU01cXG5uZXBvdGlzdGljXFxubmVwdHVuaXVtL01cXG5uZXJkL01TXFxubmVyZHkvUlRcXG5uZXJ2ZSdzXFxubmVydmUvVURTR1xcbm5lcnZlbGVzcy9ZUFxcbm5lcnZlbGVzc25lc3MvTVxcbm5lcnZpbmVzcy9NXFxubmVydm91cy9ZUFxcbm5lcnZvdXNuZXNzL01cXG5uZXJ2eS9UUFJcXG5uZXN0L01EU0dcXG5uZXN0bGUvR0pEU1xcbm5lc3RsaW5nL01cXG5uZXQvU01cXG5uZXRiYWxsXFxubmV0Ym9vay9NU1xcbm5ldGhlclxcbm5ldGhlcm1vc3RcXG5uZXRoZXJ3b3JsZC9NXFxubmV0aXF1ZXR0ZS9TXFxubmV0dGVkXFxubmV0dGVyL1NcXG5uZXR0aW5nL01cXG5uZXR0bGUvTUdEU1xcbm5ldHRsZXNvbWVcXG5uZXR3b3JrL1NHTURcXG5uZXR3b3JraW5nL01cXG5uZXVyYWwvWVxcbm5ldXJhbGdpYS9NXFxubmV1cmFsZ2ljXFxubmV1cmFzdGhlbmlhL01cXG5uZXVyYXN0aGVuaWMvTVNcXG5uZXVyaXRpYy9NU1xcbm5ldXJpdGlzL01cXG5uZXVyb2xvZ2ljYWwvWVxcbm5ldXJvbG9naXN0L1NNXFxubmV1cm9sb2d5L01cXG5uZXVyb24vTVNcXG5uZXVyb25hbFxcbm5ldXJvc2NpZW5jZVxcbm5ldXJvc2VzXFxubmV1cm9zaXMvTVxcbm5ldXJvc3VyZ2Vvbi9NU1xcbm5ldXJvc3VyZ2VyeS9NXFxubmV1cm9zdXJnaWNhbFxcbm5ldXJvdGljL01TXFxubmV1cm90aWNhbGx5XFxubmV1cm90aWNpc21cXG5uZXVyb3RyYW5zbWl0dGVyL1NNXFxubmV1dFxcbm5ldXRlci9NREdTXFxubmV1dHJhbC9TTVlcXG5uZXV0cmFsaXNtL01cXG5uZXV0cmFsaXN0L1NNXFxubmV1dHJhbGl0eS9NXFxubmV1dHJhbGl6YXRpb24vTVxcbm5ldXRyYWxpemUvRFJTWkdcXG5uZXV0cmFsaXplci9NXFxubmV1dHJpbm8vU01cXG5uZXV0cm9uL1NNXFxubmV2ZXJcXG5uZXZlcm1vcmVcXG5uZXZlcnRoZWxlc3NcXG5uZXZpXFxubmV2dXMvTVxcbm5ldy9TVE1SWVBcXG5uZXdiaWUvTVNcXG5uZXdib3JuL1NNXFxubmV3Y29tZXIvU01cXG5uZXdlbC9TTVxcbm5ld2ZhbmdsZWRcXG5uZXdmb3VuZFxcbm5ld2xpbmUvU1xcbm5ld2x5d2VkL1NNXFxubmV3bmVzcy9NXFxubmV3cy9NXFxubmV3c2FnZW50L1NcXG5uZXdzYm95L1NNXFxubmV3c2Nhc3QvU01SWlxcbm5ld3NjYXN0ZXIvTVxcbm5ld3NkZWFsZXIvU01cXG5uZXdzZmxhc2gvU1xcbm5ld3NnaXJsL1NNXFxubmV3c2dyb3VwL01TXFxubmV3c2hvdW5kL1NcXG5uZXdzbGV0dGVyL01TXFxubmV3c21hbi9NXFxubmV3c21lblxcbm5ld3NwYXBlci9NU1xcbm5ld3NwYXBlcm1hbi9NXFxubmV3c3BhcGVybWVuXFxubmV3c3BhcGVyd29tYW4vTVxcbm5ld3NwYXBlcndvbWVuXFxubmV3c3BlYWtcXG5uZXdzcHJpbnQvTVxcbm5ld3NyZWFkZXIvU1xcbm5ld3NyZWVsL01TXFxubmV3c3Jvb20vTVNcXG5uZXdzc3RhbmQvU01cXG5uZXdzd2Vla2x5L1NNXFxubmV3c3dvbWFuL01cXG5uZXdzd29tZW5cXG5uZXdzd29ydGhpbmVzcy9NXFxubmV3c3dvcnRoeS9QXFxubmV3c3kvVFJcXG5uZXd0L01TXFxubmV3dG9uL01TXFxubmV4dC9NXFxubmV4dXMvTVNcXG5uaWFjaW4vTVxcbm5pYi9TTVxcbm5pYmJsZS9NWkdEUlNcXG5uaWJibGVyL01cXG5uaWNlL1BZVFJcXG5uaWNlbmVzcy9NXFxubmljZXR5L1NNXFxubmljaGUvU01cXG5uaWNrL01EUlNaR1xcbm5pY2tlbC9NU1xcbm5pY2tlbG9kZW9uL1NNXFxubmlja2VyL01ER1xcbm5pY2tsZS9TXFxubmlja25hbWUvRFNNR1xcbm5pY290aW5lL01cXG5uaWVjZS9TTVxcbm5pZmVkaXBpbmVcXG5uaWZmXFxubmlmZnlcXG5uaWZ0eS9UUlxcbm5pZ2dhL01TIVxcbm5pZ2dhcmQvU01ZXFxubmlnZ2FyZGxpbmVzcy9NXFxubmlnZ2F6LyFcXG5uaWdnZXIvU00hXFxubmlnZ2xlL01aR0RSU1xcbm5pZ2dsZXIvTVxcbm5pZ2gvUlRcXG5uaWdodC9TTVlcXG5uaWdodGNhcC9TTVxcbm5pZ2h0Y2xvdGhlcy9NXFxubmlnaHRjbHViL1NNXFxubmlnaHRjbHViYmVkXFxubmlnaHRjbHViYmluZ1xcbm5pZ2h0ZHJlc3MvTVNcXG5uaWdodGZhbGwvTVxcbm5pZ2h0Z293bi9TTVxcbm5pZ2h0aGF3ay9TTVxcbm5pZ2h0aWUvU01cXG5uaWdodGluZ2FsZS9TTVxcbm5pZ2h0bGlmZS9NXFxubmlnaHRsaWdodC9TXFxubmlnaHRsb25nXFxubmlnaHRtYXJlL1NNXFxubmlnaHRtYXJpc2hcXG5uaWdodHNoYWRlL1NNXFxubmlnaHRzaGlydC9TTVxcbm5pZ2h0c3BvdC9NU1xcbm5pZ2h0c3RhbmQvU01cXG5uaWdodHN0aWNrL1NNXFxubmlnaHR0aW1lL01cXG5uaWdodHdhdGNobWFuXFxubmlnaHR3YXRjaG1lblxcbm5pZ2h0d2Vhci9NXFxubmloaWxpc20vTVxcbm5paGlsaXN0L01TXFxubmloaWxpc3RpY1xcbm5pbC9NXFxubmltYmlcXG5uaW1ibGUvVFBSXFxubmltYmxlbmVzcy9NXFxubmltYmx5XFxubmltYnVzL01cXG5uaW1ieVxcbm5pbXJvZC9NU1xcbm5pbmNvbXBvb3AvU01cXG5uaW5lL01TXFxubmluZXBpbi9NU1xcbm5pbmVwaW5zL01cXG5uaW5ldGVlbi9TTUhcXG5uaW5ldGVlbnRoL01cXG5uaW5ldGVlbnRoc1xcbm5pbmV0aWV0aC9NXFxubmluZXRpZXRoc1xcbm5pbmV0eS9IU01cXG5uaW5qYS9TTVxcbm5pbm55L1NNXFxubmludGgvTVxcbm5pbnRoc1xcbm5pb2JpdW0vTVxcbm5pcC9TTVxcbm5pcHBlZFxcbm5pcHBlci9NU1xcbm5pcHBpbmVzcy9NXFxubmlwcGluZ1xcbm5pcHBsZS9NU1xcbm5pcHB5L1RQUlxcbm5pcnZhbmEvTVxcbm5pc2VpL01cXG5uaXQvU01SXFxubml0ZXIvTVxcbm5pdHBpY2svU1pHRFJcXG5uaXRwaWNrZXIvTVxcbm5pdHBpY2tpbmcvTVxcbm5pdHJhdGUvRFNNR05cXG5uaXRyYXRpb24vTVxcbm5pdHJpY1xcbm5pdHJpZmljYXRpb24vTVxcbm5pdHJpdGUvU01cXG5uaXRyb1xcbm5pdHJvY2VsbHVsb3NlL01cXG5uaXRyb2dlbi9NXFxubml0cm9nZW5vdXNcXG5uaXRyb2dseWNlcmluL01cXG5uaXR3aXQvTVNcXG5uaXgvR01EU1xcbm5vL1NNXFxubm9iL1NZXFxubm9iYmxlL0dEU1xcbm5vYmVsaXVtL01cXG5ub2JpbGl0eS9NXFxubm9ibGUvUlNQTVRcXG5ub2JsZW1hbi9NXFxubm9ibGVtZW5cXG5ub2JsZW5lc3MvTVxcbm5vYmxld29tYW4vTVxcbm5vYmxld29tZW5cXG5ub2JvZHkvU01cXG5ub2N0dXJuYWwvWVxcbm5vY3R1cm5lL01TXFxubm9kL1NNXFxubm9kYWxcXG5ub2RkZWRcXG5ub2RkaW5nXFxubm9kZGxlL01TXFxubm9kZHlcXG5ub2RlL01TXFxubm9kdWxhclxcbm5vZHVsZS9NU1xcbm5vZWwvTVNcXG5ub2VzXFxubm9nZ2luL01TXFxubm9ob3dcXG5ub2lzZS9EU01HXFxubm9pc2VsZXNzL1BZXFxubm9pc2VsZXNzbmVzcy9NXFxubm9pc2VtYWtlci9NU1xcbm5vaXNpbHlcXG5ub2lzaW5lc3MvTVxcbm5vaXNvbWVcXG5ub2lzeS9QVFJcXG5ub21hZC9TTVxcbm5vbWFkaWNcXG5ub21lbmNsYXR1cmUvTVNcXG5ub21pbmFsL1lcXG5ub21pbmF0ZS9BQ0dOVkRTXFxubm9taW5hdGlvbidzL0FcXG5ub21pbmF0aW9uL0NTTVxcbm5vbWluYXRpdmUvU01cXG5ub21pbmF0b3IvQ1NNXFxubm9taW5lZS9NU1xcbm5vblxcbm5vbmFicmFzaXZlXFxubm9uYWJzb3JiZW50L1NNXFxubm9uYWNhZGVtaWNcXG5ub25hY2NlcHRhbmNlL01cXG5ub25hY2lkXFxubm9uYWN0aXZlL01TXFxubm9uYWRkaWN0aXZlXFxubm9uYWRoZXNpdmVcXG5ub25hZGphY2VudFxcbm5vbmFkanVzdGFibGVcXG5ub25hZG1pbmlzdHJhdGl2ZVxcbm5vbmFnZS9NU1xcbm5vbmFnZW5hcmlhbi9NU1xcbm5vbmFnZ3Jlc3Npb24vTVxcbm5vbmFsY29ob2xpY1xcbm5vbmFsaWduZWRcXG5ub25hbGlnbm1lbnQvTVxcbm5vbmFsbGVyZ2ljXFxubm9uYXBwZWFyYW5jZS9NU1xcbm5vbmFzc2lnbmFibGVcXG5ub25hdGhsZXRpY1xcbm5vbmF0dGVuZGFuY2UvTVxcbm5vbmF1dG9tb3RpdmVcXG5ub25hdmFpbGFiaWxpdHkvTVxcbm5vbmJhc2ljXFxubm9uYmVsaWV2ZXIvTVNcXG5ub25iZWxsaWdlcmVudC9NU1xcbm5vbmJpbmRpbmdcXG5ub25icmVha2FibGVcXG5ub25idXJuYWJsZVxcbm5vbmNhbG9yaWNcXG5ub25jYW5jZXJvdXNcXG5ub25jZS9NXFxubm9uY2hhbGFuY2UvTVxcbm5vbmNoYWxhbnQvWVxcbm5vbmNoYXJnZWFibGVcXG5ub25jbGVyaWNhbC9NU1xcbm5vbmNsaW5pY2FsXFxubm9uY29sbGVjdGFibGVcXG5ub25jb20vTVNcXG5ub25jb21iYXRcXG5ub25jb21iYXRhbnQvTVNcXG5ub25jb21idXN0aWJsZVxcbm5vbmNvbW1lcmNpYWwvTVNcXG5ub25jb21taXR0YWwvWVxcbm5vbmNvbW11bmljYWJsZVxcbm5vbmNvbXBldGluZ1xcbm5vbmNvbXBldGl0aXZlXFxubm9uY29tcGxpYW5jZS9NXFxubm9uY29tcGx5aW5nXFxubm9uY29tcHJlaGVuZGluZ1xcbm5vbmNvbmR1Y3RpbmdcXG5ub25jb25kdWN0b3IvTVNcXG5ub25jb25mb3JtaW5nXFxubm9uY29uZm9ybWlzbVxcbm5vbmNvbmZvcm1pc3QvTVNcXG5ub25jb25mb3JtaXR5L01cXG5ub25jb25zZWN1dGl2ZVxcbm5vbmNvbnN0cnVjdGl2ZVxcbm5vbmNvbnRhZ2lvdXNcXG5ub25jb250aW51b3VzXFxubm9uY29udHJpYnV0aW5nXFxubm9uY29udHJpYnV0b3J5XFxubm9uY29udHJvdmVyc2lhbFxcbm5vbmNvbnZlcnRpYmxlXFxubm9uY29vcGVyYXRpb24vTVxcbm5vbmNvcnJvZGluZ1xcbm5vbmNvcnJvc2l2ZVxcbm5vbmNyZWRpdFxcbm5vbmNyaW1pbmFsL1NNXFxubm9uY3JpdGljYWxcXG5ub25jcnlzdGFsbGluZVxcbm5vbmN1bXVsYXRpdmVcXG5ub25jdXN0b2RpYWxcXG5ub25kYWlyeVxcbm5vbmRlZHVjdGlibGUvTVxcbm5vbmRlbGl2ZXJ5L1NNXFxubm9uZGVtb2NyYXRpY1xcbm5vbmRlbm9taW5hdGlvbmFsXFxubm9uZGVwYXJ0bWVudGFsXFxubm9uZGVwcmVjaWF0aW5nXFxubm9uZGVzY3JpcHRcXG5ub25kZXN0cnVjdGl2ZVxcbm5vbmRldGFjaGFibGVcXG5ub25kZXRlcm1pbmlzbVxcbm5vbmRldGVybWluaXN0aWNcXG5ub25kaXNjaXBsaW5hcnlcXG5ub25kaXNjbG9zdXJlL01cXG5ub25kaXNjcmltaW5hdGlvbi9NXFxubm9uZGlzY3JpbWluYXRvcnlcXG5ub25kcmFtYXRpY1xcbm5vbmRyaW5rZXIvTVNcXG5ub25kcnlpbmdcXG5ub25lXFxubm9uZWR1Y2F0aW9uYWxcXG5ub25lZmZlY3RpdmVcXG5ub25lbGFzdGljXFxubm9uZWxlY3RyaWNcXG5ub25lbGVjdHJpY2FsXFxubm9uZW1wdHlcXG5ub25lbmZvcmNlYWJsZVxcbm5vbmVudGl0eS9TTVxcbm5vbmVxdWl2YWxlbnQvTVNcXG5ub25lc3NlbnRpYWxcXG5ub25lc3VjaC9NU1xcbm5vbmV0aGVsZXNzXFxubm9uZXZlbnQvTVNcXG5ub25leGNoYW5nZWFibGVcXG5ub25leGNsdXNpdmVcXG5ub25leGVtcHQvTVxcbm5vbmV4aXN0ZW5jZS9NXFxubm9uZXhpc3RlbnRcXG5ub25leHBsb3NpdmUvTVNcXG5ub25mYWN0dWFsXFxubm9uZmFkaW5nXFxubm9uZmF0XFxubm9uZmF0YWxcXG5ub25mYXR0ZW5pbmdcXG5ub25mZXJyb3VzXFxubm9uZmljdGlvbi9NXFxubm9uZmljdGlvbmFsXFxubm9uZmxhbW1hYmxlXFxubm9uZmxvd2VyaW5nXFxubm9uZmx1Y3R1YXRpbmdcXG5ub25mbHlpbmdcXG5ub25mb29kL01cXG5ub25mcmVlemluZ1xcbm5vbmZ1bmN0aW9uYWxcXG5ub25nb3Zlcm5tZW50YWxcXG5ub25ncmFudWxhclxcbm5vbmhhemFyZG91c1xcbm5vbmhlcmVkaXRhcnlcXG5ub25odW1hblxcbm5vbmlkZW50aWNhbFxcbm5vbmluY2x1c2l2ZVxcbm5vbmluZGVwZW5kZW50XFxubm9uaW5kdXN0cmlhbFxcbm5vbmluZmVjdGlvdXNcXG5ub25pbmZsYW1tYXRvcnlcXG5ub25pbmZsYXRpb25hcnlcXG5ub25pbmZsZWN0ZWRcXG5ub25pbnRlbGxlY3R1YWwvTVNcXG5ub25pbnRlcmNoYW5nZWFibGVcXG5ub25pbnRlcmZlcmVuY2UvTVxcbm5vbmludGVydmVudGlvbi9NXFxubm9uaW50b3hpY2F0aW5nXFxubm9uaW52YXNpdmVcXG5ub25pcnJpdGF0aW5nXFxubm9uaXNzdWVcXG5ub25qdWRnbWVudGFsXFxubm9uanVkaWNpYWxcXG5ub25sZWdhbFxcbm5vbmxldGhhbFxcbm5vbmxpbmVhclxcbm5vbmxpdGVyYXJ5XFxubm9ubGl2aW5nL01cXG5ub25tYWduZXRpY1xcbm5vbm1hbGlnbmFudFxcbm5vbm1lbWJlci9NU1xcbm5vbm1ldGFsL1NNXFxubm9ubWV0YWxsaWNcXG5ub25taWdyYXRvcnlcXG5ub25taWxpdGFudFxcbm5vbm1pbGl0YXJ5XFxubm9ubmFyY290aWMvU01cXG5ub25uYXRpdmUvTVNcXG5ub25uZWdvdGlhYmxlXFxubm9ubnVjbGVhclxcbm5vbm51bWVyaWNhbFxcbm5vbm9iamVjdGl2ZVxcbm5vbm9ibGlnYXRvcnlcXG5ub25vYnNlcnZhbmNlL01cXG5ub25vYnNlcnZhbnRcXG5ub25vY2N1cGF0aW9uYWxcXG5ub25vY2N1cmVuY2VcXG5ub25vZmZpY2lhbFxcbm5vbm9wZXJhdGlvbmFsXFxubm9ub3BlcmF0aXZlXFxubm9ucGFyYWxsZWwvTVNcXG5ub25wYXJlaWwvTVNcXG5ub25wYXJ0aWNpcGFudC9NU1xcbm5vbnBhcnRpY2lwYXRpbmdcXG5ub25wYXJ0aXNhbi9TTVxcbm5vbnBheWluZ1xcbm5vbnBheW1lbnQvU01cXG5ub25wZXJmb3JtYW5jZS9NXFxubm9ucGVyZm9ybWluZ1xcbm5vbnBlcmlzaGFibGVcXG5ub25wZXJzb24vTVNcXG5ub25waHlzaWNhbC9ZXFxubm9ucGx1cy9TXFxubm9ucGx1c3NlZFxcbm5vbnBsdXNzaW5nXFxubm9ucG9pc29ub3VzXFxubm9ucG9saXRpY2FsXFxubm9ucG9sbHV0aW5nXFxubm9ucG9yb3VzXFxubm9ucHJhY3RpY2luZ1xcbm5vbnByZWp1ZGljaWFsXFxubm9ucHJlc2NyaXB0aW9uXFxubm9ucHJvZHVjdGl2ZVxcbm5vbnByb2Zlc3Npb25hbC9TTVxcbm5vbnByb2ZpdC9TTUJcXG5ub25wcm9saWZlcmF0aW9uL01cXG5ub25wdWJsaWNcXG5ub25wdW5pc2hhYmxlXFxubm9ucmFjaWFsXFxubm9ucmFkaW9hY3RpdmVcXG5ub25yYW5kb21cXG5ub25yZWFjdGl2ZVxcbm5vbnJlY2lwcm9jYWwvU01cXG5ub25yZWNpcHJvY2F0aW5nXFxubm9ucmVjb2duaXRpb24vTVxcbm5vbnJlY292ZXJhYmxlXFxubm9ucmVjdXJyaW5nXFxubm9ucmVkZWVtYWJsZVxcbm5vbnJlZmlsbGFibGVcXG5ub25yZWZ1bmRhYmxlXFxubm9ucmVsaWdpb3VzXFxubm9ucmVuZXdhYmxlXFxubm9ucmVwcmVzZW50YXRpb25hbFxcbm5vbnJlc2lkZW50L01TXFxubm9ucmVzaWRlbnRpYWxcXG5ub25yZXNpZHVhbC9NXFxubm9ucmVzaXN0YW5jZS9NXFxubm9ucmVzaXN0YW50XFxubm9ucmVzdHJpY3RpdmVcXG5ub25yZXR1cm5hYmxlL01TXFxubm9ucmh5dGhtaWNcXG5ub25yaWdpZFxcbm5vbnNhbGFyaWVkXFxubm9uc2NoZWR1bGVkXFxubm9uc2NpZW50aWZpY1xcbm5vbnNjb3JpbmdcXG5ub25zZWFzb25hbFxcbm5vbnNlY3Rhcmlhblxcbm5vbnNlY3VsYXJcXG5ub25zZWdyZWdhdGVkXFxubm9uc2Vuc2UvTVxcbm5vbnNlbnNpY2FsL1lcXG5ub25zZW5zaXRpdmVcXG5ub25zZXhpc3RcXG5ub25zZXh1YWxcXG5ub25za2lkXFxubm9uc2xpcFxcbm5vbnNtb2tlci9TTVxcbm5vbnNtb2tpbmdcXG5ub25zb2NpYWxcXG5ub25zcGVha2luZ1xcbm5vbnNwZWNpYWxpc3QvTVNcXG5ub25zcGVjaWFsaXppbmdcXG5ub25zcGVjaWZpY1xcbm5vbnNwaXJpdHVhbC9TTVxcbm5vbnN0YWluaW5nXFxubm9uc3RhbmRhcmRcXG5ub25zdGFydGVyL01TXFxubm9uc3RpY2tcXG5ub25zdG9wXFxubm9uc3RyYXRlZ2ljXFxubm9uc3RyaWtpbmdcXG5ub25zdHJ1Y3R1cmFsXFxubm9uc3VjY2Vzc2l2ZVxcbm5vbnN1cHBvcnQvR01cXG5ub25zdXJnaWNhbFxcbm5vbnN1c3RhaW5pbmdcXG5ub25zeW1wYXRoaXplci9NXFxubm9udGFybmlzaGFibGVcXG5ub250YXhhYmxlXFxubm9udGVjaG5pY2FsXFxubm9udGVudXJlZFxcbm5vbnRoZWF0cmljYWxcXG5ub250aGlua2luZ1xcbm5vbnRocmVhdGVuaW5nXFxubm9udG94aWNcXG5ub250cmFkaXRpb25hbFxcbm5vbnRyYW5zZmVyYWJsZVxcbm5vbnRyYW5zcGFyZW50XFxubm9udHJpdmlhbFxcbm5vbnRyb3BpY2FsXFxubm9udW5pZm9ybVxcbm5vbnVuaW9uXFxubm9udXNlci9NU1xcbm5vbnZlbm9tb3VzXFxubm9udmVyYmFsXFxubm9udmlhYmxlXFxubm9udmlvbGVuY2UvTVxcbm5vbnZpb2xlbnQvWVxcbm5vbnZpcnVsZW50XFxubm9udm9jYWxcXG5ub252b2NhdGlvbmFsXFxubm9udm9sYXRpbGVcXG5ub252b3Rlci9NU1xcbm5vbnZvdGluZ1xcbm5vbndoaXRlL01TXFxubm9ud29ya2luZ1xcbm5vbnlpZWxkaW5nXFxubm9uemVyb1xcbm5vb2RsZS9NR0RTXFxubm9vay9NU1xcbm5vb2tpZVxcbm5vb2t5XFxubm9vbi9NXFxubm9vbmRheS9NXFxubm9vbnRpZGUvTVxcbm5vb250aW1lL01cXG5ub29zZS9TTVxcbm5vcGVcXG5ub3JcXG5ub3InZWFzdGVyXFxubm9ybS9NU1xcbm5vcm1hbC9NWVxcbm5vcm1hbGN5L01cXG5ub3JtYWxpdHkvTVxcbm5vcm1hbGl6YXRpb24vTVxcbm5vcm1hbGl6ZS9EU0dcXG5ub3JtYXRpdmVcXG5ub3J0aC9aTVJcXG5ub3J0aGJvdW5kXFxubm9ydGhlYXN0L01SWlxcbm5vcnRoZWFzdGVyL01ZXFxubm9ydGhlYXN0ZXJuXFxubm9ydGhlYXN0d2FyZC9TXFxubm9ydGhlci9NWVxcbm5vcnRoZXJseS9TTVxcbm5vcnRoZXJuL1pSXFxubm9ydGhlcm5lci9NXFxubm9ydGhlcm5tb3N0XFxubm9ydGh3YXJkL1NcXG5ub3J0aHdlc3QvWk1SXFxubm9ydGh3ZXN0ZXIvTVlcXG5ub3J0aHdlc3Rlcm5cXG5ub3J0aHdlc3R3YXJkL1NcXG5ub3NlL01HRFNcXG5ub3NlYmFnL1NcXG5ub3NlYmxlZWQvTVNcXG5ub3NlY29uZS9TTVxcbm5vc2VkaXZlL0RTTUdcXG5ub3NlZ2F5L1NNXFxubm9zaC9NRFJTWkdcXG5ub3NoZXIvTVxcbm5vc2lseVxcbm5vc2luZXNzL01cXG5ub3N0YWxnaWEvTVxcbm5vc3RhbGdpY1xcbm5vc3RhbGdpY2FsbHlcXG5ub3N0cmlsL01TXFxubm9zdHJ1bS9NU1xcbm5vc3kvUlBUXFxubm90L0JcXG5ub3RhYmlsaXR5L1NNXFxubm90YWJsZS9TTVxcbm5vdGFibHlcXG5ub3RhcmlhbFxcbm5vdGFyaXphdGlvbi9NXFxubm90YXJpemUvR0RTXFxubm90YXJ5L1NNXFxubm90YXRlL0dEU1xcbm5vdGF0aW9uL0ZDU01cXG5ub3RjaC9HTURTXFxubm90ZSdzXFxubm90ZS9GQ1NER1xcbm5vdGVib29rL01TXFxubm90ZWxldC9TXFxubm90ZXBhZC9TXFxubm90ZXBhcGVyL01cXG5ub3Rld29ydGhpbmVzcy9NXFxubm90ZXdvcnRoeS9QXFxubm90aGluZy9QU01cXG5ub3RoaW5nbmVzcy9NXFxubm90aWNlL01HRFNcXG5ub3RpY2VhYmxlL1VcXG5ub3RpY2VhYmx5XFxubm90aWNlYm9hcmQvU1xcbm5vdGljZWQvVVxcbm5vdGlmaWFibGVcXG5ub3RpZmljYXRpb24vTVxcbm5vdGlmaWVyL01cXG5ub3RpZnkvTkRSU1haR1xcbm5vdGlvbi9NU1xcbm5vdGlvbmFsL1lcXG5ub3RvcmlldHkvTVxcbm5vdG9yaW91cy9ZXFxubm90d2l0aHN0YW5kaW5nXFxubm90d29yay9TXFxubm91Z2F0L01TXFxubm91bi9LTVNcXG5ub3VyaXNoL0RTTEdcXG5ub3VyaXNobWVudC9NXFxubm91c1xcbm5vdmEvTVNcXG5ub3ZhZVxcbm5vdmVsL1NNXFxubm92ZWxldHRlL1NNXFxubm92ZWxpc3QvU01cXG5ub3ZlbGl6YXRpb24vTVNcXG5ub3ZlbGl6ZS9EU0dcXG5ub3ZlbGxhL01TXFxubm92ZWx0eS9TTVxcbm5vdmVuYS9NU1xcbm5vdmVuZVxcbm5vdmljZS9NU1xcbm5vdml0aWF0ZS9NU1xcbm5vdy9NXFxubm93YWRheXMvTVxcbm5vd2F5L1NcXG5ub3doZXJlL01cXG5ub3dpc2VcXG5ub3d0XFxubm94aW91c1xcbm5venpsZS9NU1xcbm51L1NNXFxubnVhbmNlL01EU1xcbm51Yi9TTVxcbm51YmJpbi9NU1xcbm51YmJ5L1RSXFxubnViaWxlXFxubnVjbGVhci9LXFxubnVjbGVhdGUvRFNHTlxcbm51Y2xlYXRpb24vTVxcbm51Y2xlaVxcbm51Y2xlaWNcXG5udWNsZW9saVxcbm51Y2xlb2x1cy9NXFxubnVjbGVvbi9TTVxcbm51Y2xlb3NpZGVcXG5udWNsZW90aWRlXFxubnVjbGV1cy9NXFxubnVkZS9NVFJTXFxubnVkZ2UvR0RTTVxcbm51ZGlzbS9NXFxubnVkaXN0L1NNXFxubnVkaXR5L01cXG5udWdhdG9yeVxcbm51Z2dldC9TTVxcbm51aXNhbmNlL01TXFxubnVrZS9NR0RTXFxubnVsbC9TXFxubnVsbGlmaWNhdGlvbi9NXFxubnVsbGlmeS9ORFNHXFxubnVsbGl0eS9NXFxubnVtYi9aVEdQRFJZU1xcbm51bWJlcidzXFxubnVtYmVyL0FTREdcXG5udW1iZXJlZC9VXFxubnVtYmVybGVzc1xcbm51bWJuZXNzL01cXG5udW1lcmFibGUvSVxcbm51bWVyYWN5L0lNXFxubnVtZXJhbC9TTVxcbm51bWVyYXRlL1hHTkRTXFxubnVtZXJhdGlvbi9NXFxubnVtZXJhdG9yL01TXFxubnVtZXJpY1xcbm51bWVyaWNhbC9ZXFxubnVtZXJvbG9naXN0L01TXFxubnVtZXJvbG9neS9NXFxubnVtZXJvdXMvWVxcbm51bWlub3VzXFxubnVtaXNtYXRpYy9TXFxubnVtaXNtYXRpY3MvTVxcbm51bWlzbWF0aXN0L1NNXFxubnVtc2t1bGwvTVNcXG5udW4vU01cXG5udW5jaW8vU01cXG5udW5uZXJ5L1NNXFxubnVwdGlhbC9NU1xcbm51cnNlL01aR0RSU1xcbm51cnNlbGluZ3NcXG5udXJzZW1haWQvTVNcXG5udXJzZXIvTVxcbm51cnNlcnkvU01cXG5udXJzZXJ5bWFuL01cXG5udXJzZXJ5bWVuXFxubnVyc2luZy9NXFxubnVyc2xpbmcvU01cXG5udXJ0dXJlL0RSU01aR1xcbm51cnR1cmVyL01cXG5udXQvU01cXG5udXRjYXNlL1NcXG5udXRjcmFja2VyL01TXFxubnV0aGF0Y2gvTVNcXG5udXRob3VzZS9TXFxubnV0bWVhdC9TTVxcbm51dG1lZy9TTVxcbm51dHBpY2svU01cXG5udXRyaWEvU01cXG5udXRyaWVudC9NU1xcbm51dHJpbWVudC9NU1xcbm51dHJpdGlvbi9NXFxubnV0cml0aW9uYWwvWVxcbm51dHJpdGlvbmlzdC9TTVxcbm51dHJpdGlvdXMvWVBcXG5udXRyaXRpb3VzbmVzcy9NXFxubnV0cml0aXZlXFxubnV0c2hlbGwvTVNcXG5udXR0ZWRcXG5udXR0ZXIvU1xcbm51dHRpbmVzcy9NXFxubnV0dGluZ1xcbm51dHR5L1JUUFxcbm51enpsZS9EUlNNWkdcXG5udXp6bGVyL01cXG5ueWJibGUvU1xcbm55bG9uL01TXFxubnlsb25zL01cXG5ueW1waC9NXFxubnltcGhldC9NU1xcbm55bXBoby9TXFxubnltcGhvbWFuaWEvTVxcbm55bXBob21hbmlhYy9TTVxcbm55bXBoc1xcbm9cXG5vJ2Nsb2NrXFxubydlclxcbm9hZi9TTVxcbm9hZmlzaC9QWVxcbm9hZmlzaG5lc3MvTVxcbm9hay9TTU5cXG5vYWt1bS9NXFxub2FyL1NHTURcXG5vYXJsb2NrL1NNXFxub2Fyc21hbi9NXFxub2Fyc21lblxcbm9hcnN3b21hbi9NXFxub2Fyc3dvbWVuXFxub2FzZXNcXG5vYXNpcy9NXFxub2F0L1NNTlxcbm9hdGNha2UvU01cXG5vYXRoL01cXG5vYXRoc1xcbm9hdG1lYWwvTVxcbm9hdHMvTVxcbm9iL1NcXG5vYmJsaWdhdG8vTVNcXG5vYmR1cmFjeS9NXFxub2JkdXJhdGUvUFlcXG5vYmR1cmF0ZW5lc3MvTVxcbm9iZWRpZW5jZS9FTVxcbm9iZWRpZW50L0VZXFxub2JlaXNhbmNlL1NNXFxub2JlaXNhbnRcXG5vYmVsaXNrL01TXFxub2Jlc2VcXG5vYmVzaXR5L01cXG5vYmV5L0VEU0dcXG5vYmZ1c2NhdGUvR05YRFNcXG5vYmZ1c2NhdGlvbi9NXFxub2JpL1NNXFxub2JpdC9NU1xcbm9iaXR1YXJ5L1NNXFxub2JqXFxub2JqZWN0L1NHVk1EXFxub2JqZWN0aWZ5L05HRFNcXG5vYmplY3Rpb24vU01CXFxub2JqZWN0aW9uYWJsZS9VXFxub2JqZWN0aW9uYWJseVxcbm9iamVjdGl2ZS9TTVlQXFxub2JqZWN0aXZlbmVzcy9NXFxub2JqZWN0aXZpdHkvTVxcbm9iamVjdG9yL01TXFxub2JqdXJnYXRlL1hHTkRTXFxub2JqdXJnYXRpb24vTVxcbm9ibGF0ZS9OWFxcbm9ibGF0aW9uL01cXG5vYmxpZ2F0ZS9EU1hHTlxcbm9ibGlnYXRpb24vTVxcbm9ibGlnYXRvcmlseVxcbm9ibGlnYXRvcnlcXG5vYmxpZ2UvRUdEU1xcbm9ibGlnaW5nL1lcXG5vYmxpcXVlL1NNWVBcXG5vYmxpcXVlbmVzcy9NXFxub2JsaXF1aXR5L01cXG5vYmxpdGVyYXRlL0RTR05cXG5vYmxpdGVyYXRpb24vTVxcbm9ibGl2aW9uL01cXG5vYmxpdmlvdXMvWVBcXG5vYmxpdmlvdXNuZXNzL01cXG5vYmxvbmcvTVNcXG5vYmxvcXV5L01cXG5vYm5veGlvdXMvWVBcXG5vYm5veGlvdXNuZXNzL01cXG5vYm9lL01TXFxub2JvaXN0L01TXFxub2JzY2VuZS9SWVRcXG5vYnNjZW5pdHkvU01cXG5vYnNjdXJhbnRpc20vTVxcbm9ic2N1cmFudGlzdC9TTVxcbm9ic2N1cmUvRFJTWVRHXFxub2JzY3VyaXR5L1NNXFxub2JzZXF1aWVzXFxub2JzZXF1aW91cy9QWVxcbm9ic2VxdWlvdXNuZXNzL01cXG5vYnNlcXV5L01cXG5vYnNlcnZhYmx5XFxub2JzZXJ2YW5jZS9NU1xcbm9ic2VydmFudC9ZXFxub2JzZXJ2YXRpb24vU01cXG5vYnNlcnZhdGlvbmFsXFxub2JzZXJ2YXRvcnkvU01cXG5vYnNlcnZlL0RSU0JaR1xcbm9ic2VydmVkL1VcXG5vYnNlcnZlci9NXFxub2JzZXNzL0RTR1ZcXG5vYnNlc3Npb24vU01cXG5vYnNlc3Npb25hbC9ZXFxub2JzZXNzaXZlL1BTTVlcXG5vYnNlc3NpdmVuZXNzL01cXG5vYnNpZGlhbi9NXFxub2Jzb2xlc2NlL0RTR1xcbm9ic29sZXNjZW5jZS9NXFxub2Jzb2xlc2NlbnRcXG5vYnNvbGV0ZS9HRFNcXG5vYnN0YWNsZS9NU1xcbm9ic3RldHJpYy9TXFxub2JzdGV0cmljYWxcXG5vYnN0ZXRyaWNpYW4vU01cXG5vYnN0ZXRyaWNzL01cXG5vYnN0aW5hY3kvTVxcbm9ic3RpbmF0ZS9ZXFxub2JzdHJlcGVyb3VzL1lQXFxub2JzdHJlcGVyb3VzbmVzcy9NXFxub2JzdHJ1Y3QvREdWU1xcbm9ic3RydWN0ZWQvVVxcbm9ic3RydWN0aW9uL1NNXFxub2JzdHJ1Y3Rpb25pc20vTVxcbm9ic3RydWN0aW9uaXN0L01TXFxub2JzdHJ1Y3RpdmUvWVBcXG5vYnN0cnVjdGl2ZW5lc3MvTVxcbm9idGFpbi9EQkxHU1xcbm9idGFpbmFibGUvVVxcbm9idGFpbm1lbnQvTVxcbm9idHJ1ZGUvRFNHXFxub2J0cnVzaW9uL01cXG5vYnRydXNpdmUvVVBZXFxub2J0cnVzaXZlbmVzcy9VTVxcbm9idHVzZS9ZVFJQXFxub2J0dXNlbmVzcy9NXFxub2J2ZXJzZS9TTVxcbm9idmlhdGUvRFNHTlxcbm9idmlhdGlvbi9NXFxub2J2aW91cy9QWVxcbm9idmlvdXNuZXNzL01cXG5vY2FyaW5hL01TXFxub2NjYXNpb24vR01EU1xcbm9jY2FzaW9uYWwvWVxcbm9jY2lkZW50YWwvU01cXG5vY2NsdWRlL0dEU1xcbm9jY2x1c2lvbi9TTVxcbm9jY2x1c2l2ZVxcbm9jY3VsdC9NXFxub2NjdWx0aXNtL01cXG5vY2N1bHRpc3QvU01cXG5vY2N1cGFuY3kvTVxcbm9jY3VwYW50L1NNXFxub2NjdXBhdGlvbi9BTVxcbm9jY3VwYXRpb25hbC9ZXFxub2NjdXBhdGlvbnNcXG5vY2N1cGllZC9VXFxub2NjdXBpZXIvU01cXG5vY2N1cHkvQURTR1xcbm9jY3VyL0FTXFxub2NjdXJyZWQvQVxcbm9jY3VycmVuY2UvU01cXG5vY2N1cnJpbmcvQVxcbm9jZWFuL1NNXFxub2NlYW5mcm9udC9TTVxcbm9jZWFuZ29pbmdcXG5vY2VhbmljL01cXG5vY2Vhbm9ncmFwaGVyL1NNXFxub2NlYW5vZ3JhcGhpY1xcbm9jZWFub2dyYXBoeS9NXFxub2NlYW5vbG9neS9NXFxub2NlbG90L01TXFxub2NoL1JcXG5vY2hlci9NXFxub2NrZXIvU1xcbm9jdGFnb24vTVNcXG5vY3RhZ29uYWxcXG5vY3RhbFxcbm9jdGFuZS9NU1xcbm9jdGF2ZS9NU1xcbm9jdGF2by9NU1xcbm9jdGV0L1NNXFxub2N0b2dlbmFyaWFuL1NNXFxub2N0b3B1cy9NU1xcbm9jdWxhci9NU1xcbm9jdWxpc3QvU01cXG5vY3Vsb21vdG9yXFxub2RhbGlzcXVlL1NNXFxub2RkL1NUUllMUFxcbm9kZGJhbGwvU01cXG5vZGRpdHkvU01cXG5vZGRtZW50L1NNXFxub2RkbmVzcy9NXFxub2Rkcy9NXFxub2RlL1NNXFxub2Rpb3VzL1lQXFxub2Rpb3VzbmVzcy9NXFxub2RpdW0vTVxcbm9kb21ldGVyL01TXFxub2Rvci9NRFNcXG5vZG9yaWZlcm91c1xcbm9kb3JsZXNzXFxub2Rvcm91c1xcbm9keXNzZXkvTVNcXG5vZWRpcGFsXFxub2Vub2xvZ3kvTVxcbm9lbm9waGlsZS9TTVxcbm9ldXZyZS9NU1xcbm9mXFxub2ZmL1NaR0RSSlxcbm9mZmFsL01cXG5vZmZiZWF0L01TXFxub2ZmZW5kL1pHRFJTXFxub2ZmZW5kZXIvTVxcbm9mZmVuc2UvTVNcXG5vZmZlbnNpdmUnc1xcbm9mZmVuc2l2ZS9JUFlcXG5vZmZlbnNpdmVuZXNzL0lNXFxub2ZmZW5zaXZlc1xcbm9mZmVyL0pHTURcXG5vZmZlcmluZy9NXFxub2ZmZXJ0b3J5L1NNXFxub2ZmaGFuZFxcbm9mZmhhbmRlZC9QWVxcbm9mZmhhbmRlZG5lc3MvTVxcbm9mZmljZS9NWlJTXFxub2ZmaWNlaG9sZGVyL1NNXFxub2ZmaWNlci9NXFxub2ZmaWNpYWwvTVlTXFxub2ZmaWNpYWxkb20vTVxcbm9mZmljaWFsZXNlXFxub2ZmaWNpYWxpc20vTVxcbm9mZmljaWFudC9TTVxcbm9mZmljaWF0ZS9EU0dcXG5vZmZpY2lhdG9yL01TXFxub2ZmaWNpb3VzL1BZXFxub2ZmaWNpb3VzbmVzcy9NXFxub2ZmaW5nL01cXG5vZmZpc2hcXG5vZmZsaW5lXFxub2ZmbG9hZC9TREdcXG5vZmZwcmludC9TTVxcbm9mZnNldC9NU1xcbm9mZnNldHRpbmdcXG5vZmZzaG9vdC9NU1xcbm9mZnNob3JlL0dcXG5vZmZzaWRlXFxub2Zmc2l0ZVxcbm9mZnNwcmluZy9NXFxub2Zmc3RhZ2UvU1xcbm9mZnRyYWNrXFxub2Z0XFxub2Z0ZW4vVFJcXG5vZnRlbnRpbWVzXFxub2Z0dGltZXNcXG5vZ2xlL01aR0RSU1xcbm9nbGVyL01cXG5vZ3JlL01TXFxub2dyZWlzaFxcbm9ncmVzcy9NU1xcbm9oL01cXG5vaG0vU01cXG5vaG1tZXRlci9NU1xcbm9ob1xcbm9oc1xcbm9pXFxub2lrL1NcXG5vaWwvU0dNRFxcbm9pbGNhbi9TXFxub2lsY2xvdGgvTVxcbm9pbGNsb3Roc1xcbm9pbGZpZWxkL1NcXG5vaWxpbmVzcy9NXFxub2lsbWFuXFxub2lsbWVuXFxub2lsc2tpbi9NU1xcbm9pbHNraW5zL01cXG5vaWx5L1JQVFxcbm9pbmsvTURTR1xcbm9pbnRtZW50L1NNXFxub2thcGkvU01cXG5va2F5L01TR1xcbm9rcmEvTVNcXG5vbGQvVE1OUlBcXG5vbGRpZS9TTVxcbm9sZGlzaFxcbm9sZG5lc3MvTVxcbm9sZHN0ZXIvTVNcXG5vbGUvU01WXFxub2xlYWdpbm91c1xcbm9sZWFuZGVyL01TXFxub2xlby9NXFxub2xlb21hcmdhcmluZS9NXFxub2xmYWN0b3J5L1NNXFxub2xpZ2FyY2gvTVxcbm9saWdhcmNoaWNcXG5vbGlnYXJjaGljYWxcXG5vbGlnYXJjaHNcXG5vbGlnYXJjaHkvU01cXG5vbGlnb251Y2xlb3RpZGUvU1xcbm9saWdvcG9seS9TTVxcbm9saXZlL1NNXFxub20vU01OWFxcbm9tYnVkc21hbi9NXFxub21idWRzbWVuXFxub21lZ2EvU01cXG5vbWVsZXQvTVNcXG5vbWVuL01cXG5vbWljcm9uL01TXFxub21pbm91cy9ZUFxcbm9taW5vdXNuZXNzL01cXG5vbWlzc2lvbi9NU1xcbm9taXQvU1xcbm9taXR0ZWRcXG5vbWl0dGluZ1xcbm9tbmlidXMvTVNcXG5vbW5pcG90ZW5jZS9NXFxub21uaXBvdGVudFxcbm9tbmlwcmVzZW5jZS9NXFxub21uaXByZXNlbnRcXG5vbW5pc2NpZW5jZS9NXFxub21uaXNjaWVudFxcbm9tbml2b3JlL01TXFxub21uaXZvcm91cy9QWVxcbm9tbml2b3JvdXNuZXNzL01cXG5vbi9ZXFxub25ib2FyZFxcbm9uY2UvTVxcbm9uY29nZW5lL1NNXFxub25jb2xvZ2lzdC9TTVxcbm9uY29sb2d5L01cXG5vbmNvbWluZ1xcbm9uZS9TWE1OUFxcbm9uZW5lc3MvTVxcbm9uZXJvdXMvUFlcXG5vbmVyb3VzbmVzcy9NXFxub25lc2VsZlxcbm9uZXRpbWVcXG5vbmdvaW5nXFxub25pb24vTVxcbm9uaW9uc2tpbi9NXFxub25saW5lXFxub25sb29rZXIvU01cXG5vbmxvb2tpbmdcXG5vbm9tYXRvcG9laWEvTVxcbm9ub21hdG9wb2VpY1xcbm9ub21hdG9wb2V0aWNcXG5vbnJ1c2gvTVNHXFxub25zY3JlZW5cXG5vbnNldC9NU1xcbm9uc2hvcmVcXG5vbnNpZGVcXG5vbnNpdGVcXG5vbnNsYXVnaHQvTVNcXG5vbnN0YWdlXFxub250b1xcbm9udG9nZW55L01cXG5vbnRvbG9naWNhbFxcbm9udG9sb2d5L01cXG5vbnVzL01TXFxub253YXJkXFxub255eC9NU1xcbm9vZGxlcy9NXFxub29oL0dEXFxub29oc1xcbm9vbXBoXFxub29wc1xcbm9vemUvTUdEU1xcbm9venkvVFJcXG5vcC9TTURHXFxub3BhY2l0eS9NXFxub3BhbC9NU1xcbm9wYWxlc2NlbmNlL01cXG5vcGFsZXNjZW50XFxub3BhcXVlL1BZVEdEUlNcXG5vcGFxdWVuZXNzL01cXG5vcGNvZGUvU1xcbm9wZS9TXFxub3Blbi9aVEdKUE1EUllTXFxub3BlbmNhc3RcXG5vcGVuZWQvVVxcbm9wZW5lci9NXFxub3BlbmhhbmRlZC9QXFxub3BlbmhhbmRlZG5lc3MvTVxcbm9wZW5oZWFydGVkXFxub3BlbmluZy9NXFxub3Blbm5lc3MvTVxcbm9wZW53b3JrL01cXG5vcGVyYS9NU1xcbm9wZXJhYmxlL0lcXG5vcGVyYW5kL1NcXG5vcGVyYXRlL0RTR05WWFxcbm9wZXJhdGljXFxub3BlcmF0aWNhbGx5XFxub3BlcmF0aW9uL01cXG5vcGVyYXRpb25hbC9ZXFxub3BlcmF0aXZlL1NNXFxub3BlcmF0b3IvU01cXG5vcGVyZXR0YS9TTVxcbm9waHRoYWxtaWNcXG5vcGh0aGFsbW9sb2dpc3QvU01cXG5vcGh0aGFsbW9sb2d5L01cXG5vcGlhdGUvU01cXG5vcGluZS9HTlhEU1xcbm9waW5pb24vTVxcbm9waW5pb25hdGVkXFxub3Bpb2lkL1NNXFxub3BpdW0vTVxcbm9wb3NzdW0vTVNcXG5vcHBcXG5vcHBvbmVudC9TTVxcbm9wcG9ydHVuZS9JWVxcbm9wcG9ydHVuaXNtL01cXG5vcHBvcnR1bmlzdC9TTVxcbm9wcG9ydHVuaXN0aWNcXG5vcHBvcnR1bmlzdGljYWxseVxcbm9wcG9ydHVuaXR5L1NNXFxub3Bwb3NlL0RTR1xcbm9wcG9zZWQvVVxcbm9wcG9zaXRlL1NNWU5YXFxub3Bwb3NpdGlvbi9NXFxub3BwcmVzcy9EU0dWXFxub3BwcmVzc2lvbi9NXFxub3BwcmVzc2l2ZS9ZUFxcbm9wcHJlc3NpdmVuZXNzL01cXG5vcHByZXNzb3IvTVNcXG5vcHByb2JyaW91cy9ZXFxub3Bwcm9icml1bS9NXFxub3B0L1NHRFxcbm9wdGljL01TXFxub3B0aWNhbC9ZXFxub3B0aWNpYW4vU01cXG5vcHRpY3MvTVxcbm9wdGltYVxcbm9wdGltYWwvWVxcbm9wdGltaXNtL1NNXFxub3B0aW1pc3QvU01cXG5vcHRpbWlzdGljXFxub3B0aW1pc3RpY2FsbHlcXG5vcHRpbWl6YXRpb24vTVNcXG5vcHRpbWl6ZS9EUlNHXFxub3B0aW11bS9TTVxcbm9wdGlvbi9TTURHXFxub3B0aW9uYWwvWVxcbm9wdG9tZXRyaXN0L01TXFxub3B0b21ldHJ5L01cXG5vcHVsZW5jZS9NXFxub3B1bGVudC9ZXFxub3B1cy9NU1xcbm9yXFxub3JhY2xlL1NNXFxub3JhY3VsYXJcXG5vcmFsL01ZU1xcbm9yYWxpdHlcXG5vcmFuZ2UvU01QXFxub3JhbmdlYWRlL01TXFxub3JhbmdlcnkvU01cXG5vcmFuZ3V0YW4vU01cXG5vcmF0ZS9HTlhEU1xcbm9yYXRpb24vTVxcbm9yYXRvci9TTVxcbm9yYXRvcmljYWwvWVxcbm9yYXRvcmlvL01TXFxub3JhdG9yeS9TTVxcbm9yYi9TTVxcbm9yYmljdWxhclxcbm9yYml0L01EUlpHU1xcbm9yYml0YWwvU01cXG5vcmJpdGVyL01cXG5vcmMvU01cXG5vcmNoYXJkL1NNXFxub3JjaGVzdHJhL01TXFxub3JjaGVzdHJhbFxcbm9yY2hlc3RyYXRlL0RTWEdOXFxub3JjaGVzdHJhdGlvbi9NXFxub3JjaGlkL1NNXFxub3JkYWluL1NETEdcXG5vcmRhaW5tZW50L01cXG5vcmRlYWwvU01cXG5vcmRlci9FQU1ER1NcXG5vcmRlcmVkL1VcXG5vcmRlcmluZ3NcXG5vcmRlcmxpbmVzcy9FTVxcbm9yZGVybHkvUFNNXFxub3JkaW5hbC9TTVxcbm9yZGluYW5jZS9TTVxcbm9yZGluYXJpbHlcXG5vcmRpbmFyaW5lc3MvTVxcbm9yZGluYXJ5L1NNUFxcbm9yZGluYXRlL01OU1hcXG5vcmRpbmF0aW9uL01cXG5vcmRuYW5jZS9NXFxub3JkdXJlL01cXG5vcmUvU01cXG5vcmVnYW5vL01cXG5vcmdcXG5vcmdhbi9NU1xcbm9yZ2FuZHkvTVxcbm9yZ2FuZWxsZS9NU1xcbm9yZ2FuaWMvU01cXG5vcmdhbmljYWxseS9JXFxub3JnYW5pc20vTVNcXG5vcmdhbmlzbWljXFxub3JnYW5pc3QvTVNcXG5vcmdhbml6YXRpb24vQVNNXFxub3JnYW5pemF0aW9uYWwvWVxcbm9yZ2FuaXplL0FFU0RHXFxub3JnYW5pemVkL1VcXG5vcmdhbml6ZXIvTVNcXG5vcmdhbnphL01cXG5vcmdhc20vU01cXG5vcmdhc21pY1xcbm9yZ2lhc3RpY1xcbm9yZ3kvU01cXG5vcmllbC9NU1xcbm9yaWVudCdzXFxub3JpZW50L0FFREdTXFxub3JpZW50YWwvTVNcXG5vcmllbnRhbGlzdC9TXFxub3JpZW50YXRlL0VEU0dOXFxub3JpZW50YXRpb24vQUVNXFxub3JpZW50YXRpb25zXFxub3JpZW50ZWVyaW5nXFxub3JpZmljZS9NU1xcbm9yaWdcXG5vcmlnYW1pL01cXG5vcmlnaW4vU01cXG5vcmlnaW5hbC9NWVNcXG5vcmlnaW5hbGl0eS9NXFxub3JpZ2luYXRlL0RTR05cXG5vcmlnaW5hdGlvbi9NXFxub3JpZ2luYXRvci9TTVxcbm9yaW9sZS9TTVxcbm9yaXNvbi9TTVxcbm9ybW9sdS9NXFxub3JuYW1lbnQvU0dNRFxcbm9ybmFtZW50YWxcXG5vcm5hbWVudGF0aW9uL01cXG5vcm5hdGUvWVBcXG5vcm5hdGVuZXNzL01cXG5vcm5lcmluZXNzL01cXG5vcm5lcnkvUFJUXFxub3JuaXRob2xvZ2ljYWxcXG5vcm5pdGhvbG9naXN0L01TXFxub3JuaXRob2xvZ3kvTVxcbm9yb3R1bmRcXG5vcm90dW5kaXR5L1NNXFxub3JwaGFuL1NNREdcXG5vcnBoYW5hZ2UvTVNcXG5vcnJpcy9NU1xcbm9ydGhvZG9udGlhL01cXG5vcnRob2RvbnRpYy9TXFxub3J0aG9kb250aWNzL01cXG5vcnRob2RvbnRpc3QvU01cXG5vcnRob2RveC9VXFxub3J0aG9kb3h5L1NNXFxub3J0aG9nb25hbFxcbm9ydGhvZ29uYWxpdHlcXG5vcnRob2dyYXBoaWNcXG5vcnRob2dyYXBoaWNhbGx5XFxub3J0aG9ncmFwaHkvU01cXG5vcnRob3BlZGljL1NcXG5vcnRob3BlZGljcy9NXFxub3J0aG9wZWRpc3QvTVNcXG5vcnpvL01cXG5vc2NpbGxhdGUvR05EU1hcXG5vc2NpbGxhdGlvbi9NXFxub3NjaWxsYXRvci9TTVxcbm9zY2lsbGF0b3J5XFxub3NjaWxsb3Njb3BlL01TXFxub3NjdWxhdGUvRFNYR05cXG5vc2N1bGF0aW9uL01cXG5vc2llci9NU1xcbm9zbWl1bS9NXFxub3Ntb3Npcy9NXFxub3Ntb3RpY1xcbm9zcHJleS9TTVxcbm9zc2ljbGVzXFxub3NzaWZpY2F0aW9uL01cXG5vc3NpZnkvTkdEU1xcbm9zdGVuc2libGVcXG5vc3RlbnNpYmx5XFxub3N0ZW50YXRpb24vTVxcbm9zdGVudGF0aW91cy9ZXFxub3N0ZW9hcnRocml0aXMvTVxcbm9zdGVvcGF0aC9NXFxub3N0ZW9wYXRoaWNcXG5vc3Rlb3BhdGhzXFxub3N0ZW9wYXRoeS9NXFxub3N0ZW9wb3Jvc2lzL01cXG5vc3RsZXIvU1xcbm9zdHJhY2lzbS9NXFxub3N0cmFjaXplL0dEU1xcbm9zdHJpY2gvTVNcXG5vdGhlci9NU1BcXG5vdGhlcndpc2VcXG5vdGhlcndvcmxkbHlcXG5vdGlvc2VcXG5vdHRlci9NU1xcbm90dG9tYW4vTVNcXG5vdWJsaWV0dGUvTVNcXG5vdWNoXFxub3VnaHRcXG5vdWdodG4ndFxcbm91bmNlL01TXFxub3VyL1NcXG5vdXJzZWx2ZXNcXG5vdXN0L1pHRFJTXFxub3VzdGVyL01cXG5vdXQvU0pHTURSXFxub3V0YWdlL1NNXFxub3V0YXJndWUvR0RTXFxub3V0YmFjay9NU1xcbm91dGJhbGFuY2UvRFNHXFxub3V0YmlkL1NcXG5vdXRiaWRkaW5nXFxub3V0Ym9hcmQvTVNcXG5vdXRib2FzdC9EU0dcXG5vdXRib3VuZFxcbm91dGJveC9NU1xcbm91dGJyZWFrL01TXFxub3V0YnVpbGRpbmcvTVNcXG5vdXRidXJzdC9TTVxcbm91dGNhc3QvTVNcXG5vdXRjbGFzcy9EU0dcXG5vdXRjb21lL01TXFxub3V0Y3JvcC9NU1xcbm91dGNyb3BwZWRcXG5vdXRjcm9wcGluZy9TTVxcbm91dGNyeS9TTVxcbm91dGRhdGVkXFxub3V0ZGlkXFxub3V0ZGlzdGFuY2UvR0RTXFxub3V0ZG8vR1xcbm91dGRvZXNcXG5vdXRkb25lXFxub3V0ZG9vci9TXFxub3V0ZG9vcnMvTVxcbm91dGRvb3JzeVxcbm91dGRyYXcvR1NcXG5vdXRkcmF3blxcbm91dGRyZXdcXG5vdXRlcmNvdXJzZVxcbm91dGVybW9zdFxcbm91dGVyd2Vhci9NXFxub3V0ZmFjZS9HRFNcXG5vdXRmYWxsL1NcXG5vdXRmaWVsZC9TTVJaXFxub3V0ZmllbGRlci9NXFxub3V0ZmlnaHQvU0dcXG5vdXRmaXQvU01cXG5vdXRmaXR0ZWRcXG5vdXRmaXR0ZXIvTVNcXG5vdXRmaXR0aW5nXFxub3V0ZmxhbmsvR1NEXFxub3V0Zmxvdy9NU1xcbm91dGZvdWdodFxcbm91dGZveC9HRFNcXG5vdXRnby9NSkdcXG5vdXRnb2VzXFxub3V0Z3Jld1xcbm91dGdyb3cvSEdTXFxub3V0Z3Jvd25cXG5vdXRncm93dGgvTVxcbm91dGdyb3d0aHNcXG5vdXRndWVzcy9HRFNcXG5vdXRndW4vU1xcbm91dGd1bm5lZFxcbm91dGd1bm5pbmdcXG5vdXRoaXQvU1xcbm91dGhpdHRpbmdcXG5vdXRob3VzZS9TTVxcbm91dGluZy9NXFxub3V0bGFpZFxcbm91dGxhbmRpc2gvUFlcXG5vdXRsYW5kaXNobmVzcy9NXFxub3V0bGFzdC9EU0dcXG5vdXRsYXcvU0dNRFxcbm91dGxheS9TR01cXG5vdXRsZXQvU01cXG5vdXRsaWVyL1NcXG5vdXRsaW5lL01HRFNcXG5vdXRsaXZlL0dEU1xcbm91dGxvb2svTVNcXG5vdXRseWluZ1xcbm91dG1hbmV1dmVyL0dEU1xcbm91dG1hdGNoL0dEU1xcbm91dG1vZGVkXFxub3V0bnVtYmVyL0RTR1xcbm91dHBhY2UvR0RTXFxub3V0cGF0aWVudC9NU1xcbm91dHBlcmZvcm0vR1NEXFxub3V0cGxhY2UvTFxcbm91dHBsYWNlbWVudC9NXFxub3V0cGxheS9HRFNcXG5vdXRwb2ludC9ER1NcXG5vdXRwb3N0L01TXFxub3V0cG91cmluZy9NU1xcbm91dHByb2R1Y2UvRFNHXFxub3V0cHV0L1NNXFxub3V0cHV0dGVkXFxub3V0cHV0dGluZ1xcbm91dHJhY2UvR0RTXFxub3V0cmFnZS9NR0RTXFxub3V0cmFnZW91cy9ZXFxub3V0cmFuXFxub3V0cmFuay9HRFNcXG5vdXRyZVxcbm91dHJlYWNoL01EU0dcXG5vdXRyaWRlci9NU1xcbm91dHJpZ2dlci9TTVxcbm91dHJpZ2h0XFxub3V0cnVuL1NcXG5vdXRydW5uaW5nXFxub3V0c2NvcmUvR0RTXFxub3V0c2VsbC9HU1xcbm91dHNldC9TTVxcbm91dHNoaW5lL0dTXFxub3V0c2hvbmVcXG5vdXRzaG91dC9HRFNcXG5vdXRzaWRlL01aUlNcXG5vdXRzaWRlci9NXFxub3V0c2l6ZS9NU1xcbm91dHNraXJ0L01TXFxub3V0c21hcnQvR0RTXFxub3V0c29sZFxcbm91dHNvdXJjZS9EU0dcXG5vdXRzb3VyY2luZy9NXFxub3V0c3BlbmQvU0dcXG5vdXRzcGVudFxcbm91dHNwb2tlbi9ZUFxcbm91dHNwb2tlbm5lc3MvTVxcbm91dHNwcmVhZC9HU1xcbm91dHN0YW5kaW5nL1lcXG5vdXRzdGF0aW9uL01TXFxub3V0c3RheS9ER1NcXG5vdXRzdHJldGNoL0RTR1xcbm91dHN0cmlwL1NcXG5vdXRzdHJpcHBlZFxcbm91dHN0cmlwcGluZ1xcbm91dHRhXFxub3V0dGFrZS9NU1xcbm91dHZvdGUvR0RTXFxub3V0d2FyZC9ZU1xcbm91dHdlYXIvR1NcXG5vdXR3ZWlnaC9HRFxcbm91dHdlaWdoc1xcbm91dHdpdC9TXFxub3V0d2l0aFxcbm91dHdpdHRlZFxcbm91dHdpdHRpbmdcXG5vdXR3b3JlXFxub3V0d29yay9NRFJTWkdcXG5vdXR3b3JuXFxub3V6by9NU1xcbm92YVxcbm92YWwvTVNcXG5vdmFyaWFuXFxub3ZhcnkvU01cXG5vdmF0ZS9OWFxcbm92YXRpb24vTVxcbm92ZW4vTVNcXG5vdmVuYmlyZC9TTVxcbm92ZW5wcm9vZlxcbm92ZW53YXJlXFxub3Zlci9NWVNcXG5vdmVyYWJ1bmRhbmNlL01cXG5vdmVyYWJ1bmRhbnRcXG5vdmVyYWNoaWV2ZS9aR0RSU1xcbm92ZXJhY2hpZXZlci9NXFxub3ZlcmFjdC9HVlNEXFxub3ZlcmFnZS9TTVxcbm92ZXJhZ2dyZXNzaXZlXFxub3ZlcmFsbC9TTVxcbm92ZXJhbGxzL01cXG5vdmVyYW1iaXRpb3VzXFxub3ZlcmFueGlvdXNcXG5vdmVyYXJjaGluZ1xcbm92ZXJhcm0vR1NEXFxub3ZlcmF0ZVxcbm92ZXJhdHRlbnRpdmVcXG5vdmVyYXdlL0RTR1xcbm92ZXJiYWxhbmNlL01HRFNcXG5vdmVyYmVhci9HU1xcbm92ZXJiZWFyaW5nL1lcXG5vdmVyYmlkL1NNXFxub3ZlcmJpZGRpbmdcXG5vdmVyYml0ZS9NU1xcbm92ZXJibG93blxcbm92ZXJib2FyZFxcbm92ZXJib2xkXFxub3ZlcmJvb2svREdTXFxub3ZlcmJvcmVcXG5vdmVyYm9ybmVcXG5vdmVyYm91Z2h0XFxub3ZlcmJ1aWxkL1NHXFxub3ZlcmJ1aWx0XFxub3ZlcmJ1cmRlbi9HU0RcXG5vdmVyYnV5L0dTXFxub3ZlcmNhbWVcXG5vdmVyY2FwYWNpdHkvTVxcbm92ZXJjYXBpdGFsaXplL0RTR1xcbm92ZXJjYXJlZnVsXFxub3ZlcmNhc3QvTUdTXFxub3ZlcmNhdXRpb3VzXFxub3ZlcmNoYXJnZS9EU01HXFxub3ZlcmNsb2NrL0dEXFxub3ZlcmNsb3VkL1NHRFxcbm92ZXJjb2F0L01TXFxub3ZlcmNvbWUvR1NcXG5vdmVyY29tcGVuc2F0ZS9EU0dOXFxub3ZlcmNvbXBlbnNhdGlvbi9NXFxub3ZlcmNvbmZpZGVuY2UvTVxcbm92ZXJjb25maWRlbnRcXG5vdmVyY29uc2NpZW50aW91c1xcbm92ZXJjb29rL0RHU1xcbm92ZXJjcml0aWNhbFxcbm92ZXJjcm93ZC9TREdcXG5vdmVyY3Jvd2RpbmcvTVxcbm92ZXJkZWNvcmF0ZS9EU0dcXG5vdmVyZGVwZW5kZW50XFxub3ZlcmRldmVsb3AvU0RHXFxub3ZlcmRpZFxcbm92ZXJkby9HXFxub3ZlcmRvZXNcXG5vdmVyZG9uZVxcbm92ZXJkb3NlL01HRFNcXG5vdmVyZHJhZnQvU01cXG5vdmVyZHJhdy9HU1xcbm92ZXJkcmF3blxcbm92ZXJkcmVzcy9HTURTXFxub3ZlcmRyZXdcXG5vdmVyZHJpdmUvU01cXG5vdmVyZHViL1NNXFxub3ZlcmR1YmJlZFxcbm92ZXJkdWJiaW5nXFxub3ZlcmR1ZVxcbm92ZXJlYWdlclxcbm92ZXJlYXQvR1NOXFxub3ZlcmVtb3Rpb25hbFxcbm92ZXJlbXBoYXNpcy9NXFxub3ZlcmVtcGhhc2l6ZS9HRFNcXG5vdmVyZW50aHVzaWFzdGljXFxub3ZlcmVzdGltYXRlL01HTkRTXFxub3ZlcmVzdGltYXRpb24vTVxcbm92ZXJleGNpdGUvRFNHXFxub3ZlcmV4ZXJjaXNlL0dEU1xcbm92ZXJleGVydC9TREdcXG5vdmVyZXhlcnRpb24vTVxcbm92ZXJleHBvc2UvR0RTXFxub3ZlcmV4cG9zdXJlL01cXG5vdmVyZXh0ZW5kL0RHU1xcbm92ZXJmZWRcXG5vdmVyZmVlZC9HU1xcbm92ZXJmaWxsL0RHU1xcbm92ZXJmbGV3XFxub3ZlcmZsaWdodC9NU1xcbm92ZXJmbG93L01EU0dcXG5vdmVyZmxvd25cXG5vdmVyZmx5L0dTXFxub3ZlcmZvbmRcXG5vdmVyZnVsbFxcbm92ZXJnZW5lcmFsaXplL0RTR1xcbm92ZXJnZW5lcm91c1xcbm92ZXJncmF6ZS9EU0dcXG5vdmVyZ3Jld1xcbm92ZXJncm91bmRcXG5vdmVyZ3Jvdy9IU0dcXG5vdmVyZ3Jvd25cXG5vdmVyZ3Jvd3RoL01cXG5vdmVyaGFuZC9NRFNcXG5vdmVyaGFuZy9NU0dcXG5vdmVyaGFzdHlcXG5vdmVyaGF1bC9NRFNHXFxub3ZlcmhlYWQvTVNcXG5vdmVyaGVhci9TR1xcbm92ZXJoZWFyZFxcbm92ZXJoZWF0L0RTR1xcbm92ZXJodW5nXFxub3ZlcmluZHVsZ2UvR0RTXFxub3ZlcmluZHVsZ2VuY2UvTVxcbm92ZXJpbmR1bGdlbnRcXG5vdmVyaW5mbGF0ZWRcXG5vdmVyam95L0dTRFxcbm92ZXJraWxsL01cXG5vdmVybGFkZW5cXG5vdmVybGFpZFxcbm92ZXJsYWluXFxub3ZlcmxhbmRcXG5vdmVybGFwL1NNXFxub3ZlcmxhcHBlZFxcbm92ZXJsYXBwaW5nXFxub3ZlcmxhcmdlXFxub3ZlcmxheS9HU01cXG5vdmVybGVhZlxcbm92ZXJsaWVcXG5vdmVybG9hZC9HTURTXFxub3ZlcmxvbmdcXG5vdmVybG9vay9HTURTXFxub3ZlcmxvcmQvTVNcXG5vdmVybHkvU0dcXG5vdmVybWFubmVkXFxub3Zlcm1hbm5pbmdcXG5vdmVybWFzdGVyL1NER1xcbm92ZXJtb2Rlc3RcXG5vdmVybXVjaC9TXFxub3Zlcm5pY2VcXG5vdmVybmlnaHQvTVNcXG5vdmVyb3B0aW1pc20vTVxcbm92ZXJvcHRpbWlzdGljXFxub3ZlcnBhaWRcXG5vdmVycGFydGljdWxhclxcbm92ZXJwYXNzL01TXFxub3ZlcnBheS9HU1xcbm92ZXJwbGF5L0dEU1xcbm92ZXJwb3B1bGF0ZS9HTkRTXFxub3ZlcnBvcHVsYXRpb24vTVxcbm92ZXJwb3dlci9TREdcXG5vdmVycG93ZXJpbmcvWVxcbm92ZXJwcmFpc2UvRFNHXFxub3ZlcnByZWNpc2VcXG5vdmVycHJpY2UvRFNHXFxub3ZlcnByaW50L1NNREdcXG5vdmVycHJvZHVjZS9HRFNcXG5vdmVycHJvZHVjdGlvbi9NXFxub3ZlcnByb3RlY3QvU0RHVlxcbm92ZXJxdWFsaWZpZWRcXG5vdmVycmFuXFxub3ZlcnJhdGUvR0RTXFxub3ZlcnJlYWNoL0dEU1xcbm92ZXJyZWFjdC9TREdcXG5vdmVycmVhY3Rpb24vU01cXG5vdmVycmVmaW5lZFxcbm92ZXJyaWRkZW5cXG5vdmVycmlkZS9NR1NcXG5vdmVycmlwZS9NXFxub3ZlcnJvZGVcXG5vdmVycnVsZS9HRFNcXG5vdmVycnVuL1NNXFxub3ZlcnJ1bm5pbmdcXG5vdmVyc2FtcGxpbmdcXG5vdmVyc2F3XFxub3ZlcnNlYS9TXFxub3ZlcnNlZS9SU1pcXG5vdmVyc2VlaW5nXFxub3ZlcnNlZW5cXG5vdmVyc2Vlci9NXFxub3ZlcnNlbGwvR1NcXG5vdmVyc2Vuc2l0aXZlL1BcXG5vdmVyc2Vuc2l0aXZlbmVzcy9NXFxub3ZlcnNleGVkXFxub3ZlcnNoYWRvdy9EU0dcXG5vdmVyc2hhcmUvRFNHXFxub3ZlcnNob2UvTVNcXG5vdmVyc2hvb3QvR1NcXG5vdmVyc2hvdFxcbm92ZXJzaWdodC9TTVxcbm92ZXJzaW1wbGVcXG5vdmVyc2ltcGxpZmljYXRpb24vTVxcbm92ZXJzaW1wbGlmeS9EU05HWFxcbm92ZXJzaXplXFxub3ZlcnNsZWVwL0dTXFxub3ZlcnNsZXB0XFxub3ZlcnNvbGRcXG5vdmVyc3BlY2lhbGl6YXRpb24vTVxcbm92ZXJzcGVjaWFsaXplL0dEU1xcbm92ZXJzcGVuZC9TR1xcbm92ZXJzcGVudFxcbm92ZXJzcHJlYWQvR1NcXG5vdmVyc3RhZmZlZFxcbm92ZXJzdGF0ZS9EU0xHXFxub3ZlcnN0YXRlbWVudC9NU1xcbm92ZXJzdGF5L0RTR1xcbm92ZXJzdGVwL1NcXG5vdmVyc3RlcHBlZFxcbm92ZXJzdGVwcGluZ1xcbm92ZXJzdGltdWxhdGUvRFNHXFxub3ZlcnN0b2NrL0dTRFxcbm92ZXJzdHJldGNoL0dEU1xcbm92ZXJzdHJpY3RcXG5vdmVyc3RydW5nXFxub3ZlcnN0dWZmZWRcXG5vdmVyc3Vic2NyaWJlL0RTR1xcbm92ZXJzdWJ0bGVcXG5vdmVyc3VwcGx5L0dEU1xcbm92ZXJzdXNwaWNpb3VzXFxub3ZlcnQvWVxcbm92ZXJ0YWtlL0dTXFxub3ZlcnRha2VuXFxub3ZlcnRheC9HRFNcXG5vdmVydGhpbmsvU0dcXG5vdmVydGhvdWdodFxcbm92ZXJ0aHJld1xcbm92ZXJ0aHJvdy9TTUdcXG5vdmVydGhyb3duXFxub3ZlcnRpbWUvTVNcXG5vdmVydGlyZS9HRFNcXG5vdmVydG9uZS9NU1xcbm92ZXJ0b29rXFxub3ZlcnR1cmUvTVNcXG5vdmVydHVybi9EU0dcXG5vdmVydXNlL0RTTUdcXG5vdmVydmFsdWF0aW9uL1NcXG5vdmVydmFsdWUvRFNHXFxub3ZlcnZpZXcvTVNcXG5vdmVyd2VlbmluZy9ZXFxub3ZlcndlaWdodC9NXFxub3ZlcndoZWxtL1NHRFxcbm92ZXJ3aGVsbWluZy9ZXFxub3ZlcndpbnRlci9TREdcXG5vdmVyd29yay9HTURTXFxub3ZlcndyaXRlL0dTXFxub3ZlcndyaXR0ZW5cXG5vdmVyd3JvdGVcXG5vdmVyd3JvdWdodFxcbm92ZXJ6ZWFsb3VzXFxub3ZpZHVjdC9TTVxcbm92aXBhcm91c1xcbm92b2lkL01TXFxub3Z1bGFyXFxub3Z1bGF0ZS9EU0dOXFxub3Z1bGF0aW9uL01cXG5vdnVsZS9NU1xcbm92dW0vTVxcbm93XFxub3dlL0RTR1xcbm93bC9TTVxcbm93bGV0L01TXFxub3dsaXNoL1lcXG5vd24vRVNHRFxcbm93bmVyL01TXFxub3duZXJzaGlwL01cXG5veC9NTlxcbm94YWxhdGVcXG5veGJsb29kL01cXG5veGJvdy9NU1xcbm94Y2FydC9TTVxcbm94Zm9yZC9TTVxcbm94aWRhbnQvTVNcXG5veGlkYXNlXFxub3hpZGF0aW9uL01cXG5veGlkYXRpdmVcXG5veGlkZS9NU1xcbm94aWRpemF0aW9uL01cXG5veGlkaXplL1pHRFJTXFxub3hpZGl6ZXIvTVxcbm94dGFpbC9TXFxub3h5YWNldHlsZW5lL01cXG5veHlnZW4vTVxcbm94eWdlbmF0ZS9EU0dOXFxub3h5Z2VuYXRpb24vTVxcbm94eW1vcmFcXG5veHltb3Jvbi9NXFxub3lzdGVyL1NNXFxub3pcXG5vem9uZS9NXFxucC9OUlhUR0pcXG5wSFxcbnBhL1NNSFxcbnBhYmx1bS9NXFxucGFidWx1bS9NXFxucGFjZS9NWkdEUlNcXG5wYWNlbWFrZXIvU01cXG5wYWNlci9NXFxucGFjZXNldHRlci9TTVxcbnBhY2V5XFxucGFjaHlkZXJtL01TXFxucGFjaHlzYW5kcmEvTVNcXG5wYWNpZmljXFxucGFjaWZpY2FsbHlcXG5wYWNpZmljYXRpb24vTVxcbnBhY2lmaWVyL01cXG5wYWNpZmlzbS9NXFxucGFjaWZpc3QvU01cXG5wYWNpZmlzdGljXFxucGFjaWZ5L1pHRFJTTlxcbnBhY2snc1xcbnBhY2svQVVHU0RcXG5wYWNrYWdlJ3NcXG5wYWNrYWdlL0FHRFNcXG5wYWNrYWdlci9TTVxcbnBhY2thZ2luZy9NXFxucGFja2VyL01TXFxucGFja2V0L01TXFxucGFja2luZydzXFxucGFja2luZ2hvdXNlL1NNXFxucGFja3NhZGRsZS9NU1xcbnBhY3QvTVNcXG5wYWN5L1JUXFxucGFkL1NNXFxucGFkZGVkXFxucGFkZGluZy9NXFxucGFkZGxlL01aR0RSU1xcbnBhZGRsZXIvTVxcbnBhZGRvY2svTURHU1xcbnBhZGR5L1NNXFxucGFkbG9jay9NRFNHXFxucGFkcmUvU01cXG5wYWVhbi9TTVxcbnBhZWxsYS9NU1xcbnBhZ2FuL1NNXFxucGFnYW5pc20vTVxcbnBhZ2UvTVpHRFJTXFxucGFnZWFudC9NU1xcbnBhZ2VhbnRyeS9NXFxucGFnZWJveS9TTVxcbnBhZ2VyL01cXG5wYWdpbmF0ZS9EU0dOXFxucGFnaW5hdGlvbi9NXFxucGFnb2RhL01TXFxucGFoXFxucGFpZC9BVVxcbnBhaWwvTVNcXG5wYWlsZnVsL1NNXFxucGFpbi9NRFNHXFxucGFpbmZ1bC9QWVxcbnBhaW5mdWxsZXJcXG5wYWluZnVsbGVzdFxcbnBhaW5mdWxuZXNzL01cXG5wYWlua2lsbGVyL01TXFxucGFpbmtpbGxpbmdcXG5wYWlubGVzcy9QWVxcbnBhaW5sZXNzbmVzcy9NXFxucGFpbnN0YWtpbmcvTVlcXG5wYWludC9TWkdKTURSXFxucGFpbnRiYWxsXFxucGFpbnRib3gvTVNcXG5wYWludGJydXNoL01TXFxucGFpbnRlZC9VXFxucGFpbnRlci9NWVxcbnBhaW50aW5nL01cXG5wYWludHdvcmtcXG5wYWlyL0FNRFNHXFxucGFpcmVkL1VcXG5wYWlyaW5nL1NcXG5wYWlyd2lzZVxcbnBhaXNsZXkvU01cXG5wYWphbWEvU1xcbnBhamFtYXMvTVxcbnBhbC9TTVlcXG5wYWxhY2UvTVNcXG5wYWxhZGluL1NNXFxucGFsYW5xdWluL1NNXFxucGFsYXRhYmxlL1VcXG5wYWxhdGFsL1NNXFxucGFsYXRhbGl6YXRpb24vTVxcbnBhbGF0YWxpemUvR0RTXFxucGFsYXRlL01CU1xcbnBhbGF0aWFsL1lcXG5wYWxhdGluYXRlL01TXFxucGFsYXRpbmUvTVNcXG5wYWxhdmVyL0dTTURcXG5wYWxhenppXFxucGFsYXp6b1xcbnBhbGUvTVlUR1BEUlNKXFxucGFsZWZhY2UvTVNcXG5wYWxlbmVzcy9NXFxucGFsZW9cXG5wYWxlb2dyYXBoZXIvTVNcXG5wYWxlb2dyYXBoeS9NXFxucGFsZW9saXRoaWNcXG5wYWxlb250b2xvZ2lzdC9TTVxcbnBhbGVvbnRvbG9neS9NXFxucGFsZXR0ZS9TTVxcbnBhbGZyZXkvU01cXG5wYWxpbW9ueS9NXFxucGFsaW1wc2VzdC9NU1xcbnBhbGluZHJvbWUvTVNcXG5wYWxpbmRyb21pY1xcbnBhbGluZy9NXFxucGFsaXNhZGUvU01cXG5wYWxpc2hcXG5wYWxsL01EU0dcXG5wYWxsYWRpdW0vTVxcbnBhbGxiZWFyZXIvTVNcXG5wYWxsZXQvTVNcXG5wYWxsaWF0ZS9EU0dOVlxcbnBhbGxpYXRpb24vTVxcbnBhbGxpYXRpdmUvU01cXG5wYWxsaWQvWVBcXG5wYWxsaWRuZXNzL01cXG5wYWxsb3IvTVxcbnBhbG0vTURTR1xcbnBhbG1hdGVcXG5wYWxtZXR0by9TTVxcbnBhbG1pc3QvU01cXG5wYWxtaXN0cnkvTVxcbnBhbG10b3AvU01cXG5wYWxteS9UUlxcbnBhbG9taW5vL01TXFxucGFscGFibGVcXG5wYWxwYWJseVxcbnBhbHBhdGUvRFNHTlxcbnBhbHBhdGlvbi9NXFxucGFscGl0YXRlL1hHTkRTXFxucGFscGl0YXRpb24vTVxcbnBhbHN5L0dEU01cXG5wYWx0cmluZXNzL01cXG5wYWx0cnkvUlBUXFxucGFtcGFzL01cXG5wYW1wZXIvRFNHXFxucGFtcGhsZXQvTVNcXG5wYW1waGxldGVlci9NU1xcbnBhbi9TTVxcbnBhbmFjZWEvU01cXG5wYW5hY2hlL01cXG5wYW5hbWEvTVNcXG5wYW5hdGVsbGEvU1xcbnBhbmNha2UvRFNNR1xcbnBhbmNocm9tYXRpY1xcbnBhbmNyZWFzL01TXFxucGFuY3JlYXRpY1xcbnBhbmNyZWF0aXRpc1xcbnBhbmRhL1NNXFxucGFuZGVtaWMvU01cXG5wYW5kZW1vbml1bS9NXFxucGFuZGVyL01EUlpHU1xcbnBhbmRlcmVyL01cXG5wYW5lL0tNXFxucGFuZWd5cmljL1NNXFxucGFuZWwvU0dKTURcXG5wYW5lbGluZy9NXFxucGFuZWxpc3QvTVNcXG5wYW5lc1xcbnBhbmcvTVNcXG5wYW5oYW5kbGUvRFJTTVpHXFxucGFuaGFuZGxlci9NXFxucGFuaWMvU01cXG5wYW5pY2tlZFxcbnBhbmlja2luZ1xcbnBhbmlja3lcXG5wYW5uZWRcXG5wYW5uaWVyL1NNXFxucGFubmluZ1xcbnBhbm9wbHkvU01cXG5wYW5vcmFtYS9TTVxcbnBhbm9yYW1pY1xcbnBhbnBpcGVzL01cXG5wYW5zeS9TTVxcbnBhbnQvTURTR1xcbnBhbnRhbG9vbnMvTVxcbnBhbnRlY2huaWNvbi9TXFxucGFudGhlaXNtL01cXG5wYW50aGVpc3QvU01cXG5wYW50aGVpc3RpY1xcbnBhbnRoZW9uL1NNXFxucGFudGhlci9NU1xcbnBhbnRpZS9NU1xcbnBhbnRvL1NcXG5wYW50b21pbWUvTUdEU1xcbnBhbnRvbWltaWNcXG5wYW50b21pbWlzdC9TTVxcbnBhbnRyeS9TTVxcbnBhbnRzdWl0L1NNXFxucGFudHlob3NlL01cXG5wYW50eWxpbmVyL01cXG5wYW50eXdhaXN0L1NNXFxucGFwL1NNXFxucGFwYS9NU1xcbnBhcGFjeS9TTVxcbnBhcGFsXFxucGFwYXJhenppL01cXG5wYXBhcmF6em9cXG5wYXBheWEvTVNcXG5wYXBlci9TWkdNRFJcXG5wYXBlcmJhY2svU01cXG5wYXBlcmJhcmsvU1xcbnBhcGVyYm9hcmQvTVxcbnBhcGVyYm95L1NNXFxucGFwZXJjbGlwL1NcXG5wYXBlcmVyL01cXG5wYXBlcmdpcmwvU01cXG5wYXBlcmhhbmdlci9TTVxcbnBhcGVyaGFuZ2luZy9NXFxucGFwZXJsZXNzXFxucGFwZXJ3ZWlnaHQvTVNcXG5wYXBlcndvcmsvTVxcbnBhcGVyeVxcbnBhcGlsbGEvTVxcbnBhcGlsbGFlXFxucGFwaWxsYXJ5XFxucGFwaXN0L01TXFxucGFwb29zZS9NU1xcbnBhcHB5L1NNXFxucGFwcmlrYS9NXFxucGFweXJpXFxucGFweXJ1cy9NXFxucGFyL1NaR01EUkJKXFxucGFyYS9NU1xcbnBhcmFibGUvTVNcXG5wYXJhYm9sYS9TTVxcbnBhcmFib2xpY1xcbnBhcmFjZXRhbW9sL1NcXG5wYXJhY2h1dGUvRFNNR1xcbnBhcmFjaHV0aXN0L01TXFxucGFyYWRlL01aR0RSU1xcbnBhcmFkZXIvTVxcbnBhcmFkaWdtL1NNXFxucGFyYWRpZ21hdGljXFxucGFyYWRpc2FpY2FsXFxucGFyYWRpc2UvU01cXG5wYXJhZG94L01TXFxucGFyYWRveGljYWwvWVxcbnBhcmFmZmluL01cXG5wYXJhZ2xpZGluZ1xcbnBhcmFnb24vTVNcXG5wYXJhZ3JhcGgvR01EXFxucGFyYWdyYXBoc1xcbnBhcmFrZWV0L1NNXFxucGFyYWxlZ2FsL01TXFxucGFyYWxsYXgvTVNcXG5wYXJhbGxlbC9TR01EXFxucGFyYWxsZWxlZC9VXFxucGFyYWxsZWxpc20vTVNcXG5wYXJhbGxlbGl6YXRpb25cXG5wYXJhbGxlbGl6ZWRcXG5wYXJhbGxlbG9ncmFtL1NNXFxucGFyYWx5c2VzXFxucGFyYWx5c2lzL01cXG5wYXJhbHl0aWMvU01cXG5wYXJhbHl6ZS9EU0dcXG5wYXJhbHl6aW5nL1lcXG5wYXJhbWFnbmV0aWNcXG5wYXJhbWVjaWFcXG5wYXJhbWVjaXVtL01cXG5wYXJhbWVkaWMvTVNcXG5wYXJhbWVkaWNhbC9NU1xcbnBhcmFtZXRlci9NU1xcbnBhcmFtZXRlcml6ZS9EXFxucGFyYW1ldHJpY1xcbnBhcmFtaWxpdGFyeS9TTVxcbnBhcmFtb3VudFxcbnBhcmFtb3VudGN5XFxucGFyYW1vdXIvU01cXG5wYXJhbm9pYS9NXFxucGFyYW5vaWFjL01TXFxucGFyYW5vaWQvU01cXG5wYXJhbm9ybWFsXFxucGFyYXBldC9NU1xcbnBhcmFwaGVybmFsaWEvTVxcbnBhcmFwaHJhc2UvRFNNR1xcbnBhcmFwbGVnaWEvTVxcbnBhcmFwbGVnaWMvU01cXG5wYXJhcHJvZmVzc2lvbmFsL01TXFxucGFyYXBzeWNob2xvZ2lzdC9NU1xcbnBhcmFwc3ljaG9sb2d5L01cXG5wYXJhcXVhdC9NXFxucGFyYXNhaWxpbmdcXG5wYXJhc2NlbmRpbmdcXG5wYXJhc2l0ZS9TTVxcbnBhcmFzaXRpY1xcbnBhcmFzaXRpY2FsL1lcXG5wYXJhc2l0aXNtL01cXG5wYXJhc29sL01TXFxucGFyYXN5bXBhdGhldGljL1NcXG5wYXJhdGhpb24vTVxcbnBhcmF0aHlyb2lkL01TXFxucGFyYXRyb29wL1JaU1xcbnBhcmF0cm9vcGVyL01cXG5wYXJhdHJvb3BzL01cXG5wYXJhdHlwaG9pZC9NXFxucGFyYm9pbC9EU0dcXG5wYXJjZWwvR01EU1xcbnBhcmNoL0xHRFNcXG5wYXJjaG1lbnQvU01cXG5wYXJkbmVyL1NcXG5wYXJkb24vWkdNRFJCU1xcbnBhcmRvbmFibGUvVVxcbnBhcmRvbmFibHkvVVxcbnBhcmRvbmVyL01cXG5wYXJlL1NcXG5wYXJlZ29yaWMvTVxcbnBhcmVudC9HTURTXFxucGFyZW50YWdlL01cXG5wYXJlbnRhbFxcbnBhcmVudGhlc2VzXFxucGFyZW50aGVzaXMvTVxcbnBhcmVudGhlc2l6ZS9EU0dcXG5wYXJlbnRoZXRpY1xcbnBhcmVudGhldGljYWwvWVxcbnBhcmVudGhvb2QvTVxcbnBhcmVudGluZy9NXFxucGFyZXIvTVxcbnBhcmVzL1NcXG5wYXJlc2lzL01cXG5wYXJmYWl0L01TXFxucGFyaWFoL01cXG5wYXJpYWhzXFxucGFyaWJ1c1xcbnBhcmlldGFsXFxucGFyaW11dHVlbC9NU1xcbnBhcmluZy9NXFxucGFyaXNoL01TXFxucGFyaXNoaW9uZXIvTVNcXG5wYXJpdHkvRVNNXFxucGFyay9NRFNHXFxucGFya2EvU01cXG5wYXJraW5nL01cXG5wYXJrbGFuZFxcbnBhcmtvdXJcXG5wYXJrd2F5L01TXFxucGFya3lcXG5wYXJsYW5jZS9NXFxucGFybGF5L0dNRFNcXG5wYXJsZXkvR01EU1xcbnBhcmxpYW1lbnQvU01cXG5wYXJsaWFtZW50YXJpYW4vU01cXG5wYXJsaWFtZW50YXJ5XFxucGFybG9yL01TXFxucGFybG91c1xcbnBhcm1pZ2lhbmFcXG5wYXJvY2hpYWwvWVxcbnBhcm9jaGlhbGlzbS9NXFxucGFyb2Rpc3QvU01cXG5wYXJvZHkvR0RTTVxcbnBhcm9sZS9NR0RTXFxucGFyb2xlZS9NU1xcbnBhcm90aWRcXG5wYXJveHlzbS9TTVxcbnBhcm94eXNtYWxcXG5wYXJxdWV0L01EU0dcXG5wYXJxdWV0cnkvTVxcbnBhcnJlZFxcbnBhcnJpY2lkYWxcXG5wYXJyaWNpZGUvTVNcXG5wYXJyaW5nXFxucGFycm90L0dNRFNcXG5wYXJyeS9HRFNNXFxucGFyc2UvRFJTR1xcbnBhcnNlYy9NU1xcbnBhcnNpbW9uaW91cy9ZXFxucGFyc2ltb255L01cXG5wYXJzbGV5L01cXG5wYXJzbmlwL01TXFxucGFyc29uL01TXFxucGFyc29uYWdlL01TXFxucGFydCdzXFxucGFydC9DRFNHXFxucGFydGFrZS9aR1JTXFxucGFydGFrZW5cXG5wYXJ0YWtlci9NXFxucGFydGVycmUvU01cXG5wYXJ0aGVub2dlbmVzaXMvTVxcbnBhcnRpYWwvTVlTXFxucGFydGlhbGl0eS9NXFxucGFydGljaXBhbnQvU01cXG5wYXJ0aWNpcGF0ZS9EU0dOXFxucGFydGljaXBhdGlvbi9NXFxucGFydGljaXBhdG9yL01TXFxucGFydGljaXBhdG9yeVxcbnBhcnRpY2lwaWFsL01cXG5wYXJ0aWNpcGxlL01TXFxucGFydGljbGUvU01cXG5wYXJ0aWNsZWJvYXJkL01cXG5wYXJ0aWN1bGFyL1NNWVxcbnBhcnRpY3VsYXJpdHkvU01cXG5wYXJ0aWN1bGFyaXphdGlvbi9NXFxucGFydGljdWxhcml6ZS9EU0dcXG5wYXJ0aWN1bGF0ZS9TTVxcbnBhcnRpbmcvTVNcXG5wYXJ0aXNhbi9TTVxcbnBhcnRpc2Fuc2hpcC9NXFxucGFydGl0aW9uL0dNRFNcXG5wYXJ0aXRpdmUvTVNcXG5wYXJ0bHlcXG5wYXJ0bmVyL01EU0dcXG5wYXJ0bmVyc2hpcC9NU1xcbnBhcnRvb2tcXG5wYXJ0cmlkZ2UvU01cXG5wYXJ0dXJpdGlvbi9NXFxucGFydHdheVxcbnBhcnR5L0dEU01cXG5wYXJ2ZW51L01TXFxucGFzY2FsL01TXFxucGFzY2hhbFxcbnBhc2hhL1NNXFxucGFzcy9NXFxucGFzc2FibHlcXG5wYXNzYWdlL01TXFxucGFzc2FnZXdheS9NU1xcbnBhc3Nib29rL01TXFxucGFzc2UvRFJTQlhaR05WXFxucGFzc2VsL01TXFxucGFzc2VuZ2VyL1NNXFxucGFzc2VyL01cXG5wYXNzZXJieS9NXFxucGFzc2Vyc2J5XFxucGFzc2ltXFxucGFzc2luZy9NWVxcbnBhc3Npb24vRU1cXG5wYXNzaW9uYXRlL0VZXFxucGFzc2lvbmZsb3dlci9TTVxcbnBhc3Npb25sZXNzXFxucGFzc2l2ZS9QTVlTXFxucGFzc2l2ZW5lc3MvTVxcbnBhc3Npdml0eS9NXFxucGFzc2l2aXphdGlvblxcbnBhc3Npdml6ZS9EU0dcXG5wYXNza2V5L01TXFxucGFzc3BocmFzZS9TXFxucGFzc3BvcnQvTVNcXG5wYXNzd29yZC9NU1xcbnBhc3QvQU1TXFxucGFzdGEvU01cXG5wYXN0ZS9EU01HXFxucGFzdGVib2FyZC9NXFxucGFzdGVsL01TXFxucGFzdGVybi9NU1xcbnBhc3RldXJpemF0aW9uL01cXG5wYXN0ZXVyaXplL1pHRFJTXFxucGFzdGV1cml6ZWQvVVxcbnBhc3RldXJpemVyL01cXG5wYXN0aWNoZS9NU1xcbnBhc3RpZVxcbnBhc3RpbGxlL01TXFxucGFzdGltZS9NU1xcbnBhc3RpbmVzcy9NXFxucGFzdG9yL01TXFxucGFzdG9yYWwvTVNcXG5wYXN0b3JhdGUvTVNcXG5wYXN0cmFtaS9NXFxucGFzdHJ5L1NNXFxucGFzdHVyYWdlL01cXG5wYXN0dXJlL0RTTUdcXG5wYXN0dXJlbGFuZC9NXFxucGFzdHkvUFRSU01cXG5wYXQvU01cXG5wYXRjaC9FR01EU1xcbnBhdGNoaWx5XFxucGF0Y2hpbmVzcy9NXFxucGF0Y2hvdWxpXFxucGF0Y2h3b3JrL1NNXFxucGF0Y2h5L1RQUlxcbnBhdGUvTVNcXG5wYXRlbGxhL01TXFxucGF0ZWxsYWVcXG5wYXRlbnQvR01EWVNcXG5wYXRlcmZhbWlsaWFzL01TXFxucGF0ZXJuYWwvWVxcbnBhdGVybmFsaXNtL01cXG5wYXRlcm5hbGlzdC9TXFxucGF0ZXJuYWxpc3RpY1xcbnBhdGVybml0eS9NXFxucGF0ZXJub3N0ZXIvTVNcXG5wYXRoL01cXG5wYXRoZXRpY1xcbnBhdGhldGljYWxseVxcbnBhdGhmaW5kZXIvU01cXG5wYXRobGVzc1xcbnBhdGhvZ2VuL1NNXFxucGF0aG9nZW5pY1xcbnBhdGhvbG9naWNhbC9ZXFxucGF0aG9sb2dpc3QvU01cXG5wYXRob2xvZ3kvTVxcbnBhdGhvcy9NXFxucGF0aHNcXG5wYXRod2F5L01TXFxucGF0aWVuY2UvTVxcbnBhdGllbnQvSU1TVFxcbnBhdGllbnRlclxcbnBhdGllbnRseVxcbnBhdGluYS9NU1xcbnBhdGluZVxcbnBhdGlvL1NNXFxucGF0aXNzZXJpZS9TXFxucGF0b2lzL01cXG5wYXRyZXNmYW1pbGlhc1xcbnBhdHJpYXJjaC9NXFxucGF0cmlhcmNoYWxcXG5wYXRyaWFyY2hhdGUvTVNcXG5wYXRyaWFyY2hzXFxucGF0cmlhcmNoeS9TTVxcbnBhdHJpY2lhbi9TTVxcbnBhdHJpY2lkYWxcXG5wYXRyaWNpZGUvU01cXG5wYXRyaW1vbmlhbFxcbnBhdHJpbW9ueS9TTVxcbnBhdHJpb3QvU01cXG5wYXRyaW90aWMvVVxcbnBhdHJpb3RpY2FsbHlcXG5wYXRyaW90aXNtL01cXG5wYXRyb2wvTVNcXG5wYXRyb2xsZWRcXG5wYXRyb2xsaW5nXFxucGF0cm9sbWFuL01cXG5wYXRyb2xtZW5cXG5wYXRyb2x3b21hbi9NXFxucGF0cm9sd29tZW5cXG5wYXRyb24vTVNcXG5wYXRyb25hZ2UvTVNcXG5wYXRyb25lc3MvTVNcXG5wYXRyb25pemUvWkdEUlNcXG5wYXRyb25pemVyL01cXG5wYXRyb25pemluZy9ZXFxucGF0cm9ueW1pYy9TTVxcbnBhdHJvbnltaWNhbGx5XFxucGF0cm9vbi9TTVxcbnBhdHN5L1NNXFxucGF0dGVkXFxucGF0dGVyL01ER1NcXG5wYXR0ZXJuL1NNREdcXG5wYXR0aW5nXFxucGF0dHkvU01cXG5wYXVjaXR5L01cXG5wYXVuY2gvTVNcXG5wYXVuY2h5L1JUXFxucGF1cGVyL01TXFxucGF1cGVyaXNtL01cXG5wYXVwZXJpemUvRFNHXFxucGF1c2UvRFNNR1xcbnBhdmUvQUdEU1xcbnBhdmVkL1VcXG5wYXZlbWVudC9NU1xcbnBhdmlsaW9uL1NNXFxucGF2aW5nL01TXFxucGF2bG92YS9TXFxucGF3L1NHTURcXG5wYXdsL01TXFxucGF3bi9NRFNHXFxucGF3bmJyb2tlci9NU1xcbnBhd25icm9raW5nL01cXG5wYXduc2hvcC9NU1xcbnBhd3Bhdy9NU1xcbnBheSdzXFxucGF5L0FTR0JMXFxucGF5YmFjay9TTVxcbnBheWNoZWNrL01TXFxucGF5ZGF5L01TXFxucGF5ZWRcXG5wYXllZS9TTVxcbnBheWVyL1NNXFxucGF5bG9hZC9TTVxcbnBheW1hc3Rlci9TTVxcbnBheW1lbnQvQVNNXFxucGF5b2ZmL01TXFxucGF5b2xhL01cXG5wYXlvdXQvTVNcXG5wYXlwaG9uZS9TXFxucGF5cm9sbC9TTVxcbnBheXNsaXAvU01cXG5wYXl3YWxsL1NNXFxucGF5d2FyZVxcbnBjdFxcbnBkXFxucGVhL1NNXFxucGVhY2UvU01cXG5wZWFjZWFibGVcXG5wZWFjZWFibHlcXG5wZWFjZWZ1bC9QWVxcbnBlYWNlZnVsbmVzcy9NXFxucGVhY2VrZWVwZXIvU01cXG5wZWFjZWtlZXBpbmcvTVxcbnBlYWNlbWFrZXIvTVNcXG5wZWFjZW1ha2luZy9NXFxucGVhY2V0aW1lL01cXG5wZWFjaC9NU1xcbnBlYWNoeS9UUlxcbnBlYWNvY2svTVNcXG5wZWFmb3dsL01TXFxucGVhaGVuL01TXFxucGVhay9NRFNHXFxucGVha3lcXG5wZWFsL0FNRFNHXFxucGVhbnV0L01TXFxucGVhci9NWVNcXG5wZWFybC9TR01EXFxucGVhcmx5L1JUXFxucGVhc2FudC9TTVxcbnBlYXNhbnRyeS9NXFxucGVhc2hvb3Rlci9TTVxcbnBlYXQvTVxcbnBlYXR5L1RSXFxucGViYmxlL01HRFNcXG5wZWJibHlcXG5wZWNhbi9TTVxcbnBlY2NhZGlsbG8vTVxcbnBlY2NhZGlsbG9lc1xcbnBlY2NhcnkvU01cXG5wZWNrL01EUlNaR1xcbnBlY2tpc2hcXG5wZWNzXFxucGVjdGljXFxucGVjdGluL01cXG5wZWN0b3JhbC9NU1xcbnBlY3RvcmFsaXNcXG5wZWN1bGF0ZS9HTkRTXFxucGVjdWxhdGlvbi9NXFxucGVjdWxhdG9yL1NNXFxucGVjdWxpYXIvWVxcbnBlY3VsaWFyaXR5L1NNXFxucGVjdW5pYXJ5XFxucGVkYWdvZ2ljXFxucGVkYWdvZ2ljYWwvWVxcbnBlZGFnb2d1ZS9TTVxcbnBlZGFnb2d5L01cXG5wZWRhbC9TR01EXFxucGVkYWxvL1NcXG5wZWRhbnQvTVNcXG5wZWRhbnRpY1xcbnBlZGFudGljYWxseVxcbnBlZGFudHJ5L01cXG5wZWRkbGUvWkdEUlNcXG5wZWRkbGVyL01cXG5wZWRlcmFzdC9NU1xcbnBlZGVyYXN0eS9NXFxucGVkZXN0YWwvTVNcXG5wZWRlc3RyaWFuL1NNXFxucGVkZXN0cmlhbml6YXRpb25cXG5wZWRlc3RyaWFuaXplL0dEU1xcbnBlZGlhdHJpYy9TXFxucGVkaWF0cmljaWFuL01TXFxucGVkaWF0cmljcy9NXFxucGVkaWNhYi9TTVxcbnBlZGljdXJlL01HRFNcXG5wZWRpY3VyaXN0L01TXFxucGVkaWdyZWUvTURTXFxucGVkaW1lbnQvTVNcXG5wZWRvbWV0ZXIvTVNcXG5wZWRvcGhpbGUvU1xcbnBlZG9waGlsaWFcXG5wZWR1bmNsZS9NU1xcbnBlZS9EUlNNWlxcbnBlZWluZ1xcbnBlZWsvTURTR1xcbnBlZWthYm9vL01cXG5wZWVsL01EUlNKWkdcXG5wZWVsZWQvVVxcbnBlZWxlci9NXFxucGVlbGluZy9NXFxucGVlbi9NU1xcbnBlZXAvTURSU1pHXFxucGVlcGJvXFxucGVlcGVyL01cXG5wZWVwaG9sZS9NU1xcbnBlZXBzaG93L01TXFxucGVlci9NREdcXG5wZWVyYWdlL1NNXFxucGVlcmVzcy9NU1xcbnBlZXJsZXNzXFxucGVldmUvRFNNR1xcbnBlZXZpc2gvUFlcXG5wZWV2aXNobmVzcy9NXFxucGVld2VlL01TXFxucGVld2l0L1NcXG5wZWcvU01cXG5wZWdib2FyZC9NU1xcbnBlZ2dlZFxcbnBlZ2dpbmdcXG5wZWlnbm9pci9TTVxcbnBlam9yYXRpb24vTVxcbnBlam9yYXRpdmUvU01ZXFxucGVrZS9NU1xcbnBla2luZXNlc1xcbnBla2luZ2VzZS9TTVxcbnBla29lL01cXG5wZWxhZ2ljXFxucGVsZi9NXFxucGVsaWNhbi9NU1xcbnBlbGxhZ3JhL01cXG5wZWxsZXQvR01EU1xcbnBlbGx1Y2lkXFxucGVsbWV0L1NcXG5wZWx0L01EU0dcXG5wZWx2aWNcXG5wZWx2aXMvTVNcXG5wZW1taWNhbi9NXFxucGVuL01cXG5wZW5hbFxcbnBlbmFsaXphdGlvbi9NXFxucGVuYWxpemUvRFNHXFxucGVuYWx0eS9TTVxcbnBlbmFuY2UvTVNcXG5wZW5jZVxcbnBlbmNoYW50L1NNXFxucGVuY2lsL0dNREpTXFxucGVuZC9DRFNHXFxucGVuZGFudC9NU1xcbnBlbmRlbnQvTVNcXG5wZW5kdWxvdXNcXG5wZW5kdWx1bS9NU1xcbnBlbmV0cmFiaWxpdHkvTVxcbnBlbmV0cmFibGVcXG5wZW5ldHJhdGUvRFNHTlZYXFxucGVuZXRyYXRpbmcvWVxcbnBlbmV0cmF0aW9uL01cXG5wZW5mcmllbmQvU1xcbnBlbmd1aW4vTVNcXG5wZW5pY2lsbGluL01cXG5wZW5pbGVcXG5wZW5pbnN1bGEvU01cXG5wZW5pbnN1bGFyXFxucGVuaXMvTVNcXG5wZW5pdGVuY2UvTVxcbnBlbml0ZW50L1NNWVxcbnBlbml0ZW50aWFsXFxucGVuaXRlbnRpYXJ5L1NNXFxucGVua25pZmUvTVxcbnBlbmtuaXZlc1xcbnBlbmxpZ2h0L1NNXFxucGVubWFuL01cXG5wZW5tYW5zaGlwL01cXG5wZW5tZW5cXG5wZW5uYW50L01TXFxucGVubmVkXFxucGVubmlsZXNzXFxucGVubmluZ1xcbnBlbm5vbi9NU1xcbnBlbm55L1NNXFxucGVubnl3ZWlnaHQvTVNcXG5wZW5ueXdvcnRoXFxucGVub2xvZ2lzdC9NU1xcbnBlbm9sb2d5L01cXG5wZW5zaW9uL0JaR01EUlNcXG5wZW5zaW9uZXIvTVxcbnBlbnNpdmUvUFlcXG5wZW5zaXZlbmVzcy9NXFxucGVudFxcbnBlbnRhY2xlL01TXFxucGVudGFnb24vTVNcXG5wZW50YWdvbmFsXFxucGVudGFncmFtL1NNXFxucGVudGFtZXRlci9TTVxcbnBlbnRhdGhsZXRlL01TXFxucGVudGF0aGxvbi9NU1xcbnBlbnRob3VzZS9TTVxcbnBlbnVjaGUvTVxcbnBlbnVsdGltYXRlL1NNXFxucGVudW1icmEvTVNcXG5wZW51bWJyYWVcXG5wZW51cmlvdXMvUFlcXG5wZW51cmlvdXNuZXNzL01cXG5wZW51cnkvTVxcbnBlb24vTVNcXG5wZW9uYWdlL01cXG5wZW9ueS9TTVxcbnBlb3BsZS9NR0RTXFxucGVwL1NNXFxucGVwcGVkXFxucGVwcGVyL0dNRFNcXG5wZXBwZXJjb3JuL1NNXFxucGVwcGVybWludC9TTVxcbnBlcHBlcm9uaS9NU1xcbnBlcHBlcnlcXG5wZXBwaW5lc3MvTVxcbnBlcHBpbmdcXG5wZXBweS9UUFJcXG5wZXBzaW4vTVxcbnBlcHRpYy9NU1xcbnBlcHRpZGUvU1xcbnBlcmFkdmVudHVyZS9NXFxucGVyYW1idWxhdGUvWEdORFNcXG5wZXJhbWJ1bGF0aW9uL01cXG5wZXJhbWJ1bGF0b3IvTVNcXG5wZXJjYWxlL01TXFxucGVyY2VpdmUvQkdEU1xcbnBlcmNlaXZlZC9VXFxucGVyY2VudC9NU1xcbnBlcmNlbnRhZ2UvU01cXG5wZXJjZW50aWxlL1NNXFxucGVyY2VwdGlibGVcXG5wZXJjZXB0aWJseVxcbnBlcmNlcHRpb24vU01cXG5wZXJjZXB0aW9uYWxcXG5wZXJjZXB0aXZlL1BZXFxucGVyY2VwdGl2ZW5lc3MvTVxcbnBlcmNlcHR1YWwvWVxcbnBlcmNoL0dNRFNcXG5wZXJjaGFuY2VcXG5wZXJjaXBpZW5jZS9NXFxucGVyY2lwaWVudFxcbnBlcmNvbGF0ZS9HTkRTXFxucGVyY29sYXRpb24vTVxcbnBlcmNvbGF0b3IvU01cXG5wZXJjdXNzaW9uL0FNXFxucGVyY3Vzc2lvbmlzdC9NU1xcbnBlcmN1c3NpdmVcXG5wZXJkaXRpb24vTVxcbnBlcmR1cmFibGVcXG5wZXJlZ3JpbmF0ZS9EU1hHTlxcbnBlcmVncmluYXRpb24vTVxcbnBlcmVncmluZS9NU1xcbnBlcmVtcHRvcmlseVxcbnBlcmVtcHRvcnlcXG5wZXJlbm5pYWwvU01ZXFxucGVyZXN0cm9pa2EvTVxcbnBlcmZlY3QvUFRHTURSWVNcXG5wZXJmZWN0YS9NU1xcbnBlcmZlY3RpYmlsaXR5L01cXG5wZXJmZWN0aWJsZVxcbnBlcmZlY3Rpb24vU01cXG5wZXJmZWN0aW9uaXNtL01cXG5wZXJmZWN0aW9uaXN0L1NNXFxucGVyZmVjdG5lc3MvTVxcbnBlcmZpZGlvdXMvWVxcbnBlcmZpZHkvU01cXG5wZXJmb3JhdGUvR05YRFNcXG5wZXJmb3JhdGlvbi9NXFxucGVyZm9yY2VcXG5wZXJmb3JtL1NEUlpHXFxucGVyZm9ybWFuY2UvU01cXG5wZXJmb3JtYXRpdmVcXG5wZXJmb3JtZWQvVVxcbnBlcmZvcm1lci9NXFxucGVyZnVtZS9EUlNNWkdcXG5wZXJmdW1lci9NXFxucGVyZnVtZXJ5L1NNXFxucGVyZnVuY3RvcmlseVxcbnBlcmZ1bmN0b3J5XFxucGVyZnVzaW9uXFxucGVyZ29sYS9TTVxcbnBlcmhhcHNcXG5wZXJpY2FyZGlhXFxucGVyaWNhcmRpYWxcXG5wZXJpY2FyZGl0aXNcXG5wZXJpY2FyZGl1bS9NXFxucGVyaWdlZS9TTVxcbnBlcmloZWxpYVxcbnBlcmloZWxpb24vTVxcbnBlcmlsL1NHTURcXG5wZXJpbG91cy9ZXFxucGVyaW1ldGVyL1NNXFxucGVyaW5hdGFsXFxucGVyaW5lYVxcbnBlcmluZXVtL01cXG5wZXJpb2QvTVNcXG5wZXJpb2RpY1xcbnBlcmlvZGljYWwvU01ZXFxucGVyaW9kaWNpdHkvTVxcbnBlcmlvZG9udGFsXFxucGVyaW9kb250aWNzL01cXG5wZXJpb2RvbnRpc3QvU01cXG5wZXJpcGF0ZXRpYy9NU1xcbnBlcmlwaGVyYWwvTVlTXFxucGVyaXBoZXJ5L1NNXFxucGVyaXBocmFzZXNcXG5wZXJpcGhyYXNpcy9NXFxucGVyaXBocmFzdGljXFxucGVyaXNjb3BlL1NNXFxucGVyaXNoL0JEUlNaR1xcbnBlcmlzaGFibGUvTVNcXG5wZXJpc3RhbHNlc1xcbnBlcmlzdGFsc2lzL01cXG5wZXJpc3RhbHRpY1xcbnBlcmlzdHlsZS9TTVxcbnBlcml0b25lYWxcXG5wZXJpdG9uZXVtL01TXFxucGVyaXRvbml0aXMvTVxcbnBlcml3aWcvU01cXG5wZXJpd2lua2xlL1NNXFxucGVyanVyZS9EUlNaR1xcbnBlcmp1cmVyL01cXG5wZXJqdXJ5L1NNXFxucGVyay9NRFNHXFxucGVya2lseVxcbnBlcmtpbmVzcy9NXFxucGVya3kvVFBSXFxucGVybS9NRFNHXFxucGVybWFmcm9zdC9NXFxucGVybWFuZW5jZS9NXFxucGVybWFuZW5jeS9NXFxucGVybWFuZW50L1NNWVxcbnBlcm1lYWJpbGl0eS9NXFxucGVybWVhYmxlXFxucGVybWVhdGUvR05EU1xcbnBlcm1lYXRpb24vTVxcbnBlcm1pc3NpYmxlXFxucGVybWlzc2libHlcXG5wZXJtaXNzaW9uL01TXFxucGVybWlzc2l2ZS9QWVxcbnBlcm1pc3NpdmVuZXNzL01cXG5wZXJtaXQvTVNcXG5wZXJtaXR0ZWRcXG5wZXJtaXR0aW5nXFxucGVybWl0dGl2aXR5XFxucGVybXV0YXRpb24vU01cXG5wZXJtdXRlL0RTR1xcbnBlcm5pY2lvdXMvWVBcXG5wZXJuaWNpb3VzbmVzcy9NXFxucGVyb3JhdGlvbi9NU1xcbnBlcm94aWRlL01HRFNcXG5wZXJwZW5kaWN1bGFyL1NNWVxcbnBlcnBlbmRpY3VsYXJpdHkvTVxcbnBlcnBldHJhdGUvRFNHTlxcbnBlcnBldHJhdGlvbi9NXFxucGVycGV0cmF0b3IvTVNcXG5wZXJwZXR1YWwvU01ZXFxucGVycGV0dWF0ZS9EU0dOXFxucGVycGV0dWF0aW9uL01cXG5wZXJwZXR1aXR5L01cXG5wZXJwbGV4L0dEU1xcbnBlcnBsZXhlZC9ZXFxucGVycGxleGluZy9ZXFxucGVycGxleGl0eS9TTVxcbnBlcnF1aXNpdGUvU01cXG5wZXJzZWN1dGUvR05YRFNcXG5wZXJzZWN1dGlvbi9NXFxucGVyc2VjdXRvci9TTVxcbnBlcnNldmVyYW5jZS9NXFxucGVyc2V2ZXJlL0RTR1xcbnBlcnNpZmxhZ2UvTVxcbnBlcnNpbW1vbi9TTVxcbnBlcnNpc3QvU0dEXFxucGVyc2lzdGVuY2UvTVxcbnBlcnNpc3RlbnQvWVxcbnBlcnNuaWNrZXR5XFxucGVyc29uL1VNU1xcbnBlcnNvbmEvU01cXG5wZXJzb25hYmxlXFxucGVyc29uYWVcXG5wZXJzb25hZ2UvTVNcXG5wZXJzb25hbC9NWVNcXG5wZXJzb25hbGl0eS9TTVxcbnBlcnNvbmFsaXplL0NEU0dcXG5wZXJzb25hbHR5L01cXG5wZXJzb25pZmljYXRpb24vTVxcbnBlcnNvbmlmeS9HRFNOWFxcbnBlcnNvbm5lbC9NXFxucGVyc3BlY3RpdmUvTVNcXG5wZXJzcGV4XFxucGVyc3BpY2FjaW91cy9ZXFxucGVyc3BpY2FjaXR5L01cXG5wZXJzcGljdWl0eS9NXFxucGVyc3BpY3VvdXNcXG5wZXJzcGlyYXRpb24vTVxcbnBlcnNwaXJlL0dEU1xcbnBlcnN1YWRlL0JaR0RSU1xcbnBlcnN1YWRlZC9VXFxucGVyc3VhZGVyL01cXG5wZXJzdWFzaW9uL1NNXFxucGVyc3Vhc2l2ZS9QWVxcbnBlcnN1YXNpdmVuZXNzL01cXG5wZXJ0L1JZUFRcXG5wZXJ0YWluL0dTRFxcbnBlcnRpbmFjaW91cy9ZXFxucGVydGluYWNpdHkvTVxcbnBlcnRpbmVuY2UvTVxcbnBlcnRpbmVudC9ZXFxucGVydG5lc3MvTVxcbnBlcnR1cmIvREdTXFxucGVydHVyYmF0aW9uL1NNXFxucGVydHVyYmVkL1VcXG5wZXJ0dXNzaXMvTVxcbnBlcnVrZS9NU1xcbnBlcnVzYWwvTVNcXG5wZXJ1c2UvR0RTXFxucGVydi9TXFxucGVydmFkZS9EU0dcXG5wZXJ2YXNpdmUvUFlcXG5wZXJ2YXNpdmVuZXNzL01cXG5wZXJ2ZXJzZS9QWFlOXFxucGVydmVyc2VuZXNzL01cXG5wZXJ2ZXJzaW9uL01cXG5wZXJ2ZXJzaXR5L01cXG5wZXJ2ZXJ0L1NHTURcXG5wZXNldGEvTVNcXG5wZXNraWx5XFxucGVza2luZXNzL01cXG5wZXNreS9UUFJcXG5wZXNvL01TXFxucGVzc2FyeS9TXFxucGVzc2ltYWxcXG5wZXNzaW1pc20vTVxcbnBlc3NpbWlzdC9TTVxcbnBlc3NpbWlzdGljXFxucGVzc2ltaXN0aWNhbGx5XFxucGVzdC9NUlNaXFxucGVzdGVyL0dEXFxucGVzdGljaWRlL01TXFxucGVzdGlmZXJvdXNcXG5wZXN0aWxlbmNlL1NNXFxucGVzdGlsZW50XFxucGVzdGlsZW50aWFsXFxucGVzdGxlL01HRFNcXG5wZXN0by9NXFxucGV0L1NaTVJcXG5wZXRhYnl0ZS9NU1xcbnBldGFqb3VsZS9TXFxucGV0YWwvU01EXFxucGV0YXJkL01TXFxucGV0YXdhdHQvU1xcbnBldGNvY2svU01cXG5wZXRlci9HTURcXG5wZXRpb2xlL1NNXFxucGV0aXRlL01TXFxucGV0aXRpb24vWkdNRFJTXFxucGV0aXRpb25hcnlcXG5wZXRpdGlvbmVyL01cXG5wZXRyZWwvTVNcXG5wZXRyaWZhY3Rpb24vTVxcbnBldHJpZnkvRFNHXFxucGV0cm9jaGVtaWNhbC9TTVxcbnBldHJvZG9sbGFyL01TXFxucGV0cm9sL01cXG5wZXRyb2xhdHVtL01cXG5wZXRyb2xldW0vTVxcbnBldHJvbG9naXN0L1NNXFxucGV0cm9sb2d5L01cXG5wZXR0ZWRcXG5wZXR0aWNvYXQvTVNcXG5wZXR0aWZvZy9TXFxucGV0dGlmb2dnZWRcXG5wZXR0aWZvZ2dlci9TTVxcbnBldHRpZm9nZ2VyeS9NXFxucGV0dGlmb2dnaW5nXFxucGV0dGlseVxcbnBldHRpbmVzcy9NXFxucGV0dGluZy9NXFxucGV0dGlzaC9ZXFxucGV0dHkvUFRSXFxucGV0dWxhbmNlL01cXG5wZXR1bGFudC9ZXFxucGV0dW5pYS9NU1xcbnBldy9TTVxcbnBld2VlL1NNXFxucGV3aXQvU01cXG5wZXd0ZXIvTVNcXG5wZXlvdGUvTVxcbnBmXFxucGZlbm5pZy9NU1xcbnBnXFxucGhhZXRvbi9NU1xcbnBoYWdlL1NcXG5waGFnb2N5dGUvU01cXG5waGFsYW5nZXIvU01cXG5waGFsYW5nZXNcXG5waGFsYW54L01TXFxucGhhbGxpXFxucGhhbGxpY1xcbnBoYWxsb2NlbnRyaWNcXG5waGFsbG9jZW50cmlzbVxcbnBoYWxsdXMvTVxcbnBoYW50YXNtL01TXFxucGhhbnRhc21hZ29yaWEvTVNcXG5waGFudGFzbWFnb3JpY2FsXFxucGhhbnRhc21hbFxcbnBoYW50b20vU01cXG5waGFyYW9oL01cXG5waGFyYW9oc1xcbnBoYXJpc2FpY1xcbnBoYXJpc2VlL1NNXFxucGhhcm1hY2V1dGljL01TXFxucGhhcm1hY2V1dGljYWwvU01cXG5waGFybWFjZXV0aWNzL01cXG5waGFybWFjaXN0L01TXFxucGhhcm1hY29sb2dpY1xcbnBoYXJtYWNvbG9naWNhbFxcbnBoYXJtYWNvbG9naXN0L1NNXFxucGhhcm1hY29sb2d5L01cXG5waGFybWFjb3BvZWlhL01TXFxucGhhcm1hY290aGVyYXB5XFxucGhhcm1hY3kvU01cXG5waGFyeW5nZWFsXFxucGhhcnluZ2VzXFxucGhhcnluZ2l0aXMvTVxcbnBoYXJ5bngvTVxcbnBoYXNlL0RTTUdcXG5waGFzZW91dC9TTVxcbnBoYXRcXG5waGVhc2FudC9NU1xcbnBoZW5hY2V0aW4vTVxcbnBoZW5vYmFyYml0YWwvTVxcbnBoZW5vbC9NXFxucGhlbm9tL01TXFxucGhlbm9tZW5hXFxucGhlbm9tZW5hbC9ZXFxucGhlbm9tZW5vbG9naWNhbFxcbnBoZW5vbWVub2xvZ3lcXG5waGVub21lbm9uL01TXFxucGhlbm90eXBlXFxucGhlbnl0b2luXFxucGhlcm9tb25lL01TXFxucGhld1xcbnBoaS9TTVxcbnBoaWFsL1NNXFxucGhpbGFuZGVyL1pHRFJTXFxucGhpbGFuZGVyZXIvTVxcbnBoaWxhbmRlcmluZy9NXFxucGhpbGFudGhyb3BpY1xcbnBoaWxhbnRocm9waWNhbGx5XFxucGhpbGFudGhyb3Bpc3QvTVNcXG5waGlsYW50aHJvcHkvU01cXG5waGlsYXRlbGljXFxucGhpbGF0ZWxpc3QvTVNcXG5waGlsYXRlbHkvTVxcbnBoaWxoYXJtb25pYy9TTVxcbnBoaWxpcHBpYy9NU1xcbnBoaWxpc3RpbmUvTVNcXG5waGlsaXN0aW5pc20vTVxcbnBoaWxvZGVuZHJvbi9TTVxcbnBoaWxvbG9naWNhbFxcbnBoaWxvbG9naXN0L01TXFxucGhpbG9sb2d5L01cXG5waGlsb3NvcGhlci9NU1xcbnBoaWxvc29waGljXFxucGhpbG9zb3BoaWNhbC9ZXFxucGhpbG9zb3BoaXplL0RSU1pHXFxucGhpbG9zb3BoaXplci9NXFxucGhpbG9zb3BoeS9TTVxcbnBoaWx0ZXIvTVNcXG5waGlzaC9aR0RSXFxucGhpc2hlci9NXFxucGhsZWJpdGlzL01cXG5waGxlZ20vTVxcbnBobGVnbWF0aWNcXG5waGxlZ21hdGljYWxseVxcbnBobG9lbS9NXFxucGhsb3gvTVxcbnBob2JpYS9NU1xcbnBob2JpYy9NU1xcbnBob2ViZS9NU1xcbnBob2VuaXgvTVNcXG5waG9uZS9EU01HXFxucGhvbmVjYXJkL1NcXG5waG9uZW1lL01TXFxucGhvbmVtaWNcXG5waG9uZW1pY2FsbHlcXG5waG9uZXRpYy9TXFxucGhvbmV0aWNhbGx5XFxucGhvbmV0aWNpYW4vU01cXG5waG9uZXRpY3MvTVxcbnBob25leWVkXFxucGhvbmV5aW5nXFxucGhvbmljL1NcXG5waG9uaWNhbGx5XFxucGhvbmljcy9NXFxucGhvbmluZXNzL01cXG5waG9ub2dyYXBoL01cXG5waG9ub2dyYXBoaWNcXG5waG9ub2dyYXBoc1xcbnBob25vbG9naWNhbC9ZXFxucGhvbm9sb2dpc3QvTVNcXG5waG9ub2xvZ3kvTVxcbnBob25vblxcbnBob255L1BUR0RSU01cXG5waG9vZXlcXG5waG9zcGhhdGUvTVNcXG5waG9zcGhvZGllc3RlcmFzZVxcbnBob3NwaG9yL01TXFxucGhvc3Bob3Jlc2NlbmNlL01cXG5waG9zcGhvcmVzY2VudC9ZXFxucGhvc3Bob3JpY1xcbnBob3NwaG9yb3VzXFxucGhvc3Bob3J1cy9NXFxucGhvc3Bob3J5bGF0aW9uXFxucGhvdG8vU0dNRFxcbnBob3RvY2VsbC9NU1xcbnBob3RvY29waWVyL01cXG5waG90b2NvcHkvRFJTTVpHXFxucGhvdG9lbGVjdHJpY1xcbnBob3RvZWxlY3RyaWNhbGx5XFxucGhvdG9lbmdyYXZlL0RSU0paR1xcbnBob3RvZW5ncmF2ZXIvTVxcbnBob3RvZW5ncmF2aW5nL01cXG5waG90b2ZpbmlzaGluZy9NXFxucGhvdG9nZW5pY1xcbnBob3RvZ2VuaWNhbGx5XFxucGhvdG9ncmFwaC9NRFJaR1xcbnBob3RvZ3JhcGhlci9NXFxucGhvdG9ncmFwaGljXFxucGhvdG9ncmFwaGljYWxseVxcbnBob3RvZ3JhcGhzL0FcXG5waG90b2dyYXBoeS9NXFxucGhvdG9qb3VybmFsaXNtL01cXG5waG90b2pvdXJuYWxpc3QvU01cXG5waG90b21ldGVyL01TXFxucGhvdG9uL01TXFxucGhvdG9zZW5zaXRpdmVcXG5waG90b3N0YXQvU01cXG5waG90b3N0YXRpY1xcbnBob3Rvc3RhdHRlZFxcbnBob3Rvc3RhdHRpbmdcXG5waG90b3N5bnRoZXNpcy9NXFxucGhvdG9zeW50aGVzaXplL0dEU1xcbnBob3Rvc3ludGhldGljXFxucGhvdG90cm9waWNcXG5waG90b3Ryb3Bpc21cXG5waG90b3R5cGVzZXR0ZXJcXG5waG90b3R5cGVzZXR0aW5nXFxucGhvdG92b2x0YWljXFxucGhyYXNhbFxcbnBocmFzZSdzXFxucGhyYXNlL0FHRFNcXG5waHJhc2Vib29rL1NcXG5waHJhc2VvbG9neS9NXFxucGhyYXNpbmcvTVNcXG5waHJlYWtpbmdcXG5waHJlbm9sb2dpc3QvU01cXG5waHJlbm9sb2d5L01cXG5waHlsYVxcbnBoeWxhY3RlcnkvU01cXG5waHlsb2dlbnkvTVxcbnBoeWx1bS9NXFxucGh5c1xcbnBoeXNpYy9TTVxcbnBoeXNpY2FsL01ZU1xcbnBoeXNpY2FsaXR5XFxucGh5c2ljaWFuL1NNXFxucGh5c2ljaXN0L1NNXFxucGh5c2lja2VkXFxucGh5c2lja2luZ1xcbnBoeXNpY3MvTVxcbnBoeXNpby9TXFxucGh5c2lvZ25vbXkvU01cXG5waHlzaW9ncmFwaHkvTVxcbnBoeXNpb2xvZ2ljXFxucGh5c2lvbG9naWNhbC9ZXFxucGh5c2lvbG9naXN0L01TXFxucGh5c2lvbG9neS9NXFxucGh5c2lvdGhlcmFwaXN0L01TXFxucGh5c2lvdGhlcmFweS9NXFxucGh5c2lxdWUvTVNcXG5waHl0b3BsYW5rdG9uXFxucGkvU01EUkhaR1xcbnBpYW5pc3NpbW8vU01cXG5waWFuaXN0L01TXFxucGlhbm8vU01cXG5waWFub2ZvcnRlL1NNXFxucGlhbm9sYS9TXFxucGlhc3Rlci9NU1xcbnBpYXp6YS9NU1xcbnBpYnJvY2gvTVxcbnBpYnJvY2hzXFxucGljL1NNXFxucGljYS9NXFxucGljYWRvci9NU1xcbnBpY2FudGVcXG5waWNhcmVzcXVlXFxucGljYXl1bmVcXG5waWNjYWxpbGxpL01cXG5waWNjb2xvL01TXFxucGljay9NRFJTSlpHXFxucGlja2F4L0dNRFNcXG5waWNrZXIvTVxcbnBpY2tlcmVsL01TXFxucGlja2V0L1pHTURSU1xcbnBpY2tpbmdzL01cXG5waWNrbGUvTUdEU1xcbnBpY2twb2NrZXQvU01cXG5waWNrdXAvTVNcXG5waWNreS9QVFJcXG5waWNuaWMvTVNcXG5waWNuaWNrZWRcXG5waWNuaWNrZXIvU01cXG5waWNuaWNraW5nXFxucGljb3QvU01cXG5waWN0b2dyYW0vU1xcbnBpY3RvZ3JhcGgvTVxcbnBpY3RvZ3JhcGhzXFxucGljdG9yaWFsL01ZU1xcbnBpY3R1cmUvTUdEU1xcbnBpY3R1cmVzcXVlL1BZXFxucGljdHVyZXNxdWVuZXNzL01cXG5waWRkbGUvTUdEU1xcbnBpZGRseVxcbnBpZGdpbi9NU1xcbnBpZS9TTVxcbnBpZWJhbGQvTVNcXG5waWVjZS9EU01HXFxucGllY2VtZWFsXFxucGllY2V3b3JrL01SWlxcbnBpZWNld29ya2VyL01cXG5waWVjcnVzdC9TTVxcbnBpZWluZ1xcbnBpZXIvTVxcbnBpZXJjZS9KR0RTXFxucGllcmNpbmcvTVlcXG5waWV0eS9NXFxucGllem9lbGVjdHJpY1xcbnBpZmZsZS9NR1xcbnBpZy9TTUxcXG5waWdlb24vTVNcXG5waWdlb25ob2xlL0RTTUdcXG5waWdnZWRcXG5waWdnZXJ5L1NcXG5waWdnaW5nXFxucGlnZ2lzaC9QWVxcbnBpZ2dpc2huZXNzL01cXG5waWdneS9UUlNNXFxucGlnZ3liYWNrL01EU0dcXG5waWdoZWFkZWQvUFlcXG5waWdoZWFkZWRuZXNzL01cXG5waWdsZXQvTVNcXG5waWdtZW50L01EU1xcbnBpZ21lbnRhdGlvbi9NXFxucGlncGVuL01TXFxucGlnc2tpbi9NU1xcbnBpZ3N0eS9TTVxcbnBpZ3N3aWxsXFxucGlndGFpbC9NU1xcbnBpa2UvTVpHRFJTXFxucGlrZXIvTVxcbnBpa2VzdGFmZi9TTVxcbnBpbGFmL1NNXFxucGlsYXN0ZXIvTVNcXG5waWxjaGFyZC9NU1xcbnBpbGUvTUdEU0pcXG5waWxldXAvTVNcXG5waWxmZXIvWkdEUlNcXG5waWxmZXJhZ2UvTVxcbnBpbGZlcmVyL01cXG5waWxncmltL01TXFxucGlsZ3JpbWFnZS9NU1xcbnBpbGluZy9NXFxucGlsbC9NRFNHXFxucGlsbGFnZS9NWkdEUlNcXG5waWxsYWdlci9NXFxucGlsbGFyL01EU1xcbnBpbGxib3gvTVNcXG5waWxsaW9uL01TXFxucGlsbG9jay9TXFxucGlsbG9yeS9HRFNNXFxucGlsbG93L0dNRFNcXG5waWxsb3djYXNlL01TXFxucGlsbG93c2xpcC9NU1xcbnBpbG90L0RHU01cXG5waWxvdGhvdXNlL1NNXFxucGltZW50by9NU1xcbnBpbWllbnRvL01TXFxucGltcC9HTURZU1xcbnBpbXBlcm5lbC9NU1xcbnBpbXBsZS9EU01cXG5waW1wbHkvUlRcXG5waW4vU01cXG5waW5hZm9yZS9NU1xcbnBpbmF0YS9NU1xcbnBpbmJhbGwvTVxcbnBpbmNlci9NU1xcbnBpbmNoL0dNRFNcXG5waW5jdXNoaW9uL01TXFxucGluZSdzXFxucGluZS9BR0RTXFxucGluZWFwcGxlL01TXFxucGluZXdvb2QvU1xcbnBpbmV5XFxucGluZmVhdGhlci9TTVxcbnBpbmcvR01EXFxucGluaGVhZC9TTVxcbnBpbmhvbGUvU01cXG5waW5pZXJcXG5waW5pZXN0XFxucGluaW9uL1NNREdcXG5waW5rL1RHUE1EUlNcXG5waW5rZXllL01cXG5waW5raWUvU01cXG5waW5raXNoXFxucGlua25lc3MvTVxcbnBpbmtvL01TXFxucGlubmFjbGUvU01cXG5waW5uYXRlXFxucGlubmVkL1VcXG5waW5uaW5nL1VcXG5waW5ueS9TXFxucGlub2NobGUvTVxcbnBpbm9uL01TXFxucGlucG9pbnQvU0dNRFxcbnBpbnByaWNrL01TXFxucGluc2V0dGVyL1NNXFxucGluc3RyaXBlL0RTTVxcbnBpbnQvTVNcXG5waW50by9NU1xcbnBpbnVwL01TXFxucGlud2hlZWwvR1NNRFxcbnBpbnlpbi9NXFxucGlueW9uL1NNXFxucGlvbmVlci9TR01EXFxucGlvdXMvWVBcXG5waW91c25lc3MvTVxcbnBpcC9TWkdNRFJcXG5waXBlL01TXFxucGlwZWxpbmUvU01cXG5waXBlci9NXFxucGlwZXR0ZS9TTVxcbnBpcGV3b3JrXFxucGlwaW5nL01cXG5waXBpdC9NU1xcbnBpcHBlZFxcbnBpcHBpbi9TTVxcbnBpcHBpbmdcXG5waXBzcXVlYWsvU01cXG5waXF1YW5jeS9NXFxucGlxdWFudC9ZXFxucGlxdWUvTUdEU1xcbnBpcmFjeS9NXFxucGlyYW5oYS9TTVxcbnBpcmF0ZS9EU01HXFxucGlyYXRpY2FsL1lcXG5waXJvZ2kvTVxcbnBpcm9zaGtpL01cXG5waXJvdWV0dGUvRFNNR1xcbnBpc2NhdG9yaWFsXFxucGlzbWlyZS9TTVxcbnBpc3MvWkdNRFJTXFxucGlzc29pci9TXFxucGlzdGFjaGlvL1NNXFxucGlzdGUvU1xcbnBpc3RpbC9TTVxcbnBpc3RpbGxhdGVcXG5waXN0b2wvU01cXG5waXN0b24vU01cXG5waXQvU01cXG5waXRhL01TXFxucGl0YXBhdC9TTVxcbnBpdGNoL01EUlNaR1xcbnBpdGNoYmxlbmRlL01cXG5waXRjaGVyL01cXG5waXRjaGZvcmsvTURTR1xcbnBpdGNobWFuL01cXG5waXRjaG1lblxcbnBpdGVvdXMvWVBcXG5waXRlb3VzbmVzcy9NXFxucGl0ZmFsbC9TTVxcbnBpdGgvTVxcbnBpdGhlYWQvU1xcbnBpdGhpbHlcXG5waXRoaW5lc3MvTVxcbnBpdGh5L1JUUFxcbnBpdGlhYmxlXFxucGl0aWFibHlcXG5waXRpZnVsL1lcXG5waXRpbGVzcy9QWVxcbnBpdGlsZXNzbmVzcy9NXFxucGl0b24vTVNcXG5waXR0YS9TXFxucGl0dGFuY2UvTVNcXG5waXR0ZWRcXG5waXR0aW5nXFxucGl0dWl0YXJ5L1NNXFxucGl0eS9HRFNNXFxucGl0eWluZy9ZXFxucGl2b3QvTURHU1xcbnBpdm90YWxcXG5waXgvTVxcbnBpeGVsL01TXFxucGl4aWUvTVNcXG5waXp6YS9NU1xcbnBpenphenovTVxcbnBpenplcmlhL1NNXFxucGl6emljYXRpXFxucGl6emljYXRvL01cXG5waidzXFxucGtcXG5wa2dcXG5wa3RcXG5wa3d5XFxucGxcXG5wbGFjYXJkL1NNREdcXG5wbGFjYXRlL0RTR05cXG5wbGFjYXRpb24vTVxcbnBsYWNhdG9yeVxcbnBsYWNlJ3NcXG5wbGFjZS9BRVNETEdcXG5wbGFjZWJvL1NNXFxucGxhY2VkL1VcXG5wbGFjZWhvbGRlci9NU1xcbnBsYWNla2ljay9NRFJaR1NcXG5wbGFjZWtpY2tlci9NXFxucGxhY2VtZW50L0VBU01cXG5wbGFjZW50YS9TTVxcbnBsYWNlbnRhbC9TXFxucGxhY2VyL1NNXFxucGxhY2lkL1lcXG5wbGFjaWRpdHkvTVxcbnBsYWNpbmdzXFxucGxhY2tldC9TTVxcbnBsYWdpYXJpc20vU01cXG5wbGFnaWFyaXN0L1NNXFxucGxhZ2lhcml6ZS9EUlNaR1xcbnBsYWdpYXJpemVyL01cXG5wbGFnaWFyeS9NXFxucGxhZ3VlL0RTTUdcXG5wbGFpY2VcXG5wbGFpZC9NU1xcbnBsYWluL01SWVRTUFxcbnBsYWluY2hhbnRcXG5wbGFpbmNsb3RoZXNcXG5wbGFpbmNsb3RoZXNtYW4vTVxcbnBsYWluY2xvdGhlc21lblxcbnBsYWlubmVzcy9NXFxucGxhaW5zbWFuL01cXG5wbGFpbnNtZW5cXG5wbGFpbnNvbmcvTVxcbnBsYWluc3Bva2VuXFxucGxhaW50L1NNVlxcbnBsYWludGlmZi9TTVxcbnBsYWludGl2ZS9ZXFxucGxhaXQvTURHU1xcbnBsYW4vWk1SU1xcbnBsYW5hclxcbnBsYW5lJ3NcXG5wbGFuZS9DR0RTXFxucGxhbmVsb2FkL01TXFxucGxhbmVyL01cXG5wbGFuZXQvU01cXG5wbGFuZXRhcml1bS9TTVxcbnBsYW5ldGFyeVxcbnBsYW5nZW5jeS9NXFxucGxhbmdlbnRcXG5wbGFuay9NREdTXFxucGxhbmtpbmcvTVxcbnBsYW5rdG9uL01cXG5wbGFubmVkL1VcXG5wbGFubmVyL1NNXFxucGxhbm5pbmcvU1xcbnBsYW50L01EUlpHU0pcXG5wbGFudGFpbi9TTVxcbnBsYW50YXJcXG5wbGFudGF0aW9uL01TXFxucGxhbnRlci9NXFxucGxhbnRpbmcvTVxcbnBsYW50bGlrZVxcbnBsYXF1ZS9TTVxcbnBsYXNoL01EU0dcXG5wbGFzbWEvTVxcbnBsYXNtb25cXG5wbGFzdGVyL1NaR01EUlxcbnBsYXN0ZXJib2FyZC9NXFxucGxhc3RlcmVyL01cXG5wbGFzdGljL1NNXFxucGxhc3RpY2l0eS9NXFxucGxhc3RpY2l6ZS9EU0dcXG5wbGFzdGlxdWVcXG5wbGF0L1hHTUROU1xcbnBsYXRlL01TXFxucGxhdGVhdS9TTURHXFxucGxhdGVmdWwvU01cXG5wbGF0ZWxldC9TTVxcbnBsYXRlbi9NXFxucGxhdGZvcm0vU0dNRFxcbnBsYXRpbmcvTVxcbnBsYXRpbnVtL01cXG5wbGF0aXR1ZGUvU01cXG5wbGF0aXR1ZGlub3VzXFxucGxhdG9uaWNcXG5wbGF0b29uL1NHTURcXG5wbGF0dGVkXFxucGxhdHRlci9TTVxcbnBsYXR0aW5nXFxucGxhdHkvTVxcbnBsYXR5cHVzL01TXFxucGxhdHlzXFxucGxhdWRpdC9TTVxcbnBsYXVzaWJpbGl0eS9NXFxucGxhdXNpYmxlXFxucGxhdXNpYmx5XFxucGxheS9BRUdNRFNcXG5wbGF5YWJsZS9FVVxcbnBsYXlhY3QvU0dEXFxucGxheWFjdGluZy9NXFxucGxheWJhY2svTVNcXG5wbGF5YmlsbC9NU1xcbnBsYXlib29rL01TXFxucGxheWJveS9TTVxcbnBsYXllci9TTVxcbnBsYXlmZWxsb3cvU01cXG5wbGF5ZnVsL1BZXFxucGxheWZ1bG5lc3MvTVxcbnBsYXlnaXJsL01TXFxucGxheWdvZXIvTVNcXG5wbGF5Z3JvdW5kL1NNXFxucGxheWdyb3VwL1NcXG5wbGF5aG91c2UvTVNcXG5wbGF5bGlzdC9NU1xcbnBsYXltYXRlL01TXFxucGxheW9mZi9TTVxcbnBsYXlwZW4vU01cXG5wbGF5cm9vbS9TTVxcbnBsYXlzY2hvb2wvU1xcbnBsYXl0aGluZy9TTVxcbnBsYXl0aW1lL01cXG5wbGF5d3JpZ2h0L1NNXFxucGxhemEvTVNcXG5wbGVhL01TXFxucGxlYWQvRFJaR1NKXFxucGxlYWRlci9NXFxucGxlYWRpbmcvTVlcXG5wbGVhc2FudC9VVFlQXFxucGxlYXNhbnRlclxcbnBsZWFzYW50bmVzcy9VTVxcbnBsZWFzYW50cnkvU01cXG5wbGVhc2UvRURTR1xcbnBsZWFzaW5nL1lTXFxucGxlYXN1cmFibHlcXG5wbGVhc3VyZS9NR0RTQlxcbnBsZWFzdXJlZnVsXFxucGxlYXQvTURHU1xcbnBsZWIvU1xcbnBsZWJieVxcbnBsZWJlL01TXFxucGxlYmVpYW4vTVNcXG5wbGViaXNjaXRlL01TXFxucGxlY3RyYVxcbnBsZWN0cnVtL01TXFxucGxlZGdlL0RTTUdcXG5wbGVuYXJ5L1NNXFxucGxlbmlwb3RlbnRpYXJ5L1NNXFxucGxlbml0dWRlL1NNXFxucGxlbnRlb3VzXFxucGxlbnRpZnVsL1lcXG5wbGVudHkvTVxcbnBsZW51bS9TXFxucGxlb25hc20vTVNcXG5wbGV0aG9yYS9NXFxucGxldXJhL01cXG5wbGV1cmFlXFxucGxldXJpc3kvTVxcbnBsZXh1cy9NU1xcbnBsaWFiaWxpdHkvTVxcbnBsaWFibGVcXG5wbGlhbmN5L01cXG5wbGlhbnQvWVxcbnBsaWVycy9NXFxucGxpZ2h0L1NNREdcXG5wbGltc29sbC9TXFxucGxpbnRoL01cXG5wbGludGhzXFxucGxvZC9TXFxucGxvZGRlZFxcbnBsb2RkZXIvTVNcXG5wbG9kZGluZy9TXFxucGxvbmsvRFJTWkdcXG5wbG9wL01TXFxucGxvcHBlZFxcbnBsb3BwaW5nXFxucGxvc2l2ZS9TXFxucGxvdC9NU1xcbnBsb3R0ZWRcXG5wbG90dGVyL1NNXFxucGxvdHRpbmdcXG5wbG92ZXIvU01cXG5wbG93L0dNRFNcXG5wbG93bWFuL01cXG5wbG93bWVuXFxucGxvd3NoYXJlL01TXFxucGxveSdzXFxucGxveS9TXFxucGx1Y2svTURTR1xcbnBsdWNraWx5XFxucGx1Y2tpbmVzcy9NXFxucGx1Y2t5L1JQVFxcbnBsdWcnc1xcbnBsdWcvVVNcXG5wbHVnZ2VkL1VcXG5wbHVnZ2luZy9VXFxucGx1Z2hvbGUvU1xcbnBsdWdpbi9TTVxcbnBsdW0vR01EU1xcbnBsdW1hZ2UvTVxcbnBsdW1iL01EUlNaR0pcXG5wbHVtYmVkL1VcXG5wbHVtYmVyL01cXG5wbHVtYmluZy9NXFxucGx1bWUvTVNcXG5wbHVtbWV0L1NHTURcXG5wbHVtbXlcXG5wbHVtcC9NRFJZU1RHUFxcbnBsdW1wbmVzcy9NXFxucGx1bXkvUlRcXG5wbHVuZGVyL1NaR01EUlxcbnBsdW5kZXJlci9NXFxucGx1bmdlL0RSU01aR1xcbnBsdW5nZXIvTVxcbnBsdW5rL01EU0dcXG5wbHVwZXJmZWN0L1NNXFxucGx1cmFsL1NNXFxucGx1cmFsaXNtL01cXG5wbHVyYWxpc3QvTVNcXG5wbHVyYWxpc3RpY1xcbnBsdXJhbGl0eS9TTVxcbnBsdXJhbGl6YXRpb24vTVxcbnBsdXJhbGl6ZS9HRFNcXG5wbHVzL01TXFxucGx1c2gvTVJZVFBcXG5wbHVzaG5lc3MvTVxcbnBsdXNoeS9SVFxcbnBsdXRvY3JhY3kvU01cXG5wbHV0b2NyYXQvU01cXG5wbHV0b2NyYXRpY1xcbnBsdXRvbml1bS9NXFxucGx1dmlhbFxcbnBseS9BR0RTTVxcbnBseXdvb2QvTVxcbnBtXFxucG5ldW1hdGljXFxucG5ldW1hdGljYWxseVxcbnBuZXVtb2NvY2NhbFxcbnBuZXVtb2NvY2NpXFxucG5ldW1vY29jY3VzXFxucG5ldW1vbmlhL01cXG5wb2FjaC9EUlNaR1xcbnBvYWNoZXIvTVxcbnBvYWNoaW5nL01cXG5wb2NrL0dNRFNcXG5wb2NrZXQvU01ER1xcbnBvY2tldGJvb2svU01cXG5wb2NrZXRmdWwvU01cXG5wb2NrZXRrbmlmZS9NXFxucG9ja2V0a25pdmVzXFxucG9ja21hcmsvTURHU1xcbnBvZC9TTVxcbnBvZGNhc3QvU01HXFxucG9kZGVkXFxucG9kZGluZ1xcbnBvZGlhdHJpc3QvU01cXG5wb2RpYXRyeS9NXFxucG9kaXVtL1NNXFxucG9lbS9NU1xcbnBvZXN5L01cXG5wb2V0L01TXFxucG9ldGFzdGVyL01TXFxucG9ldGVzcy9NU1xcbnBvZXRpYy9TXFxucG9ldGljYWwvWVxcbnBvZXRyeS9NXFxucG9ncm9tL1NNXFxucG9pL01cXG5wb2lnbmFuY3kvTVxcbnBvaWduYW50L1lcXG5wb2luY2lhbmEvU01cXG5wb2luc2V0dGlhL1NNXFxucG9pbnQvTURSU1pHXFxucG9pbnRibGFua1xcbnBvaW50ZWQvWVxcbnBvaW50ZXIvTVxcbnBvaW50aWxsaXNtL01cXG5wb2ludGlsbGlzdC9TTVxcbnBvaW50bGVzcy9QWVxcbnBvaW50bGVzc25lc3MvTVxcbnBvaW50eS9UUlxcbnBvaXNlL01HRFNcXG5wb2lzb24vU0paR01EUlxcbnBvaXNvbmVyL01cXG5wb2lzb25pbmcvTVxcbnBvaXNvbm91cy9ZXFxucG9rZS9NWkdEUlNcXG5wb2tlci9NXFxucG9rZXkvTVNcXG5wb2t5L1RSXFxucG9sL1NHTURcXG5wb2xhclxcbnBvbGFyaXR5L1NNXFxucG9sYXJpemF0aW9uL0NNXFxucG9sYXJpemUvQ0RTR1xcbnBvbGUvTVNcXG5wb2xlYXhlL0dEU1xcbnBvbGVjYXQvTVNcXG5wb2xlbWljL01TXFxucG9sZW1pY2FsL1lcXG5wb2xlbWljaXN0L1NNXFxucG9sZW1pY3MvTVxcbnBvbGVzdGFyL1NNXFxucG9saWNlL0RTTUdcXG5wb2xpY2VtYW4vTVxcbnBvbGljZW1lblxcbnBvbGljZXdvbWFuL01cXG5wb2xpY2V3b21lblxcbnBvbGljeS9TTVxcbnBvbGljeWhvbGRlci9NU1xcbnBvbGljeW1ha2VyL1NcXG5wb2xpby9NU1xcbnBvbGlvbXllbGl0aXMvTVxcbnBvbGlzaC9aR01EUlNcXG5wb2xpc2hlZC9VXFxucG9saXNoZXIvTVxcbnBvbGl0YnVyby9NU1xcbnBvbGl0ZS9SWVRQXFxucG9saXRlbmVzcy9NXFxucG9saXRlc3NlL01cXG5wb2xpdGljL1NcXG5wb2xpdGljYWwvWVxcbnBvbGl0aWNpYW4vU01cXG5wb2xpdGljaXphdGlvbi9NXFxucG9saXRpY2l6ZS9DRFNHXFxucG9saXRpY2tpbmcvTVxcbnBvbGl0aWNvL1NNXFxucG9saXRpY3MvTVxcbnBvbGl0eS9TTVxcbnBvbGthL01EU0dcXG5wb2xsL0dNRE5TXFxucG9sbGFjay9NU1xcbnBvbGxhcmQvU1xcbnBvbGxlbi9NXFxucG9sbGluYXRlL0dORFNcXG5wb2xsaW5hdGlvbi9NXFxucG9sbGluYXRvci9TTVxcbnBvbGxpbmcvTVxcbnBvbGxpd29nL1NNXFxucG9sbHN0ZXIvU01cXG5wb2xsdXRhbnQvTVNcXG5wb2xsdXRlL1pHTkRSU1xcbnBvbGx1dGVkL1VcXG5wb2xsdXRlci9NXFxucG9sbHV0aW9uL01cXG5wb2xvL01cXG5wb2xvbmFpc2UvU01cXG5wb2xvbml1bS9NXFxucG9sdGVyZ2Vpc3QvTVNcXG5wb2x0cm9vbi9TTVxcbnBvbHlcXG5wb2x5YWNyeWxhbWlkZVxcbnBvbHlhbW9yeS9TXFxucG9seWFuZHJvdXNcXG5wb2x5YW5kcnkvTVxcbnBvbHljbGluaWMvU01cXG5wb2x5ZXN0ZXIvTVNcXG5wb2x5ZXRoeWxlbmUvTVxcbnBvbHlnYW1pc3QvTVNcXG5wb2x5Z2Ftb3VzXFxucG9seWdhbXkvTVxcbnBvbHlnbG90L1NNXFxucG9seWdvbi9TTVxcbnBvbHlnb25hbFxcbnBvbHlncmFwaC9HTURcXG5wb2x5Z3JhcGhzXFxucG9seWhlZHJhbFxcbnBvbHloZWRyb24vU01cXG5wb2x5bWF0aC9NXFxucG9seW1hdGhzXFxucG9seW1lci9TTVxcbnBvbHltZXJpY1xcbnBvbHltZXJpemF0aW9uL01cXG5wb2x5bWVyaXplL0dEU1xcbnBvbHltb3JwaGljXFxucG9seW1vcnBob3VzXFxucG9seW5vbWlhbC9NU1xcbnBvbHlwL01TXFxucG9seXBob25pY1xcbnBvbHlwaG9ueS9NXFxucG9seXByb3B5bGVuZS9NXFxucG9seXNcXG5wb2x5c2Vtb3VzXFxucG9seXN0eXJlbmUvTVxcbnBvbHlzeWxsYWJpY1xcbnBvbHlzeWxsYWJsZS9NU1xcbnBvbHl0ZWNobmljL01TXFxucG9seXRoZWlzbS9NXFxucG9seXRoZWlzdC9TTVxcbnBvbHl0aGVpc3RpY1xcbnBvbHl0aGVuZVxcbnBvbHl1bnNhdHVyYXRlL0RTXFxucG9seXVyZXRoYW5lL01TXFxucG9seXZpbnlsXFxucG9tL1NcXG5wb21hZGUvRFNNR1xcbnBvbWFuZGVyL1NNXFxucG9tZWdyYW5hdGUvTVNcXG5wb21tZWwvU0dNRFxcbnBvbW15L1NcXG5wb21wL01cXG5wb21wYWRvdXIvU01EXFxucG9tcGFuby9NU1xcbnBvbXBvbS9TTVxcbnBvbXBvc2l0eS9NXFxucG9tcG91cy9ZUFxcbnBvbXBvdXNuZXNzL01cXG5wb25jZS9HRFNcXG5wb25jaG8vU01cXG5wb25jeVxcbnBvbmQvTVNcXG5wb25kZXIvU1pHRFJcXG5wb25kZXJlci9NXFxucG9uZGVyb3VzL1lQXFxucG9uZGVyb3VzbmVzcy9NXFxucG9uZS9NU1xcbnBvbmcvR0RTXFxucG9uZ2VlL01cXG5wb25pYXJkL01TXFxucG9udGlmZi9TTVxcbnBvbnRpZmljYWwvWVxcbnBvbnRpZmljYXRlL0RTTUdcXG5wb250b29uL1NNXFxucG9ueS9HRFNNXFxucG9ueXRhaWwvTVNcXG5wb28vU0dEXFxucG9vY2gvTURTR1xcbnBvb2RsZS9TTVxcbnBvb2YvTVNcXG5wb29mdGVyL1NcXG5wb29oL0dNRFxcbnBvb2hzXFxucG9vbC9HTURTXFxucG9vbHJvb20vTVNcXG5wb29sc2lkZS9TXFxucG9vcC9HTURTXFxucG9vci9UUllQXFxucG9vcmJveS9NXFxucG9vcmhvdXNlL1NNXFxucG9vcm5lc3MvTVxcbnBvcC9TTVxcbnBvcGNvcm4vTVxcbnBvcGUvTVNcXG5wb3BndW4vU01cXG5wb3BpbmpheS9NU1xcbnBvcGxhci9TTVxcbnBvcGxpbi9NXFxucG9wb3Zlci9TTVxcbnBvcHBhL01TXFxucG9wcGFkb20vU1xcbnBvcHBlZFxcbnBvcHBlci9TTVxcbnBvcHBldC9TXFxucG9wcGluZ1xcbnBvcHB5L1NNXFxucG9wcHljb2NrL01cXG5wb3B1bGFjZS9NU1xcbnBvcHVsYXIvWVxcbnBvcHVsYXJpdHkvVU1cXG5wb3B1bGFyaXphdGlvbi9NXFxucG9wdWxhcml6ZS9EU0dcXG5wb3B1bGF0ZS9BQ0dEU1xcbnBvcHVsYXRlZC9VXFxucG9wdWxhdGlvbi9DTVxcbnBvcHVsYXRpb25zXFxucG9wdWxpc20vTVxcbnBvcHVsaXN0L01TXFxucG9wdWxvdXMvUFxcbnBvcHVsb3VzbmVzcy9NXFxucG9wdXAvTVNcXG5wb3JjZWxhaW4vU01cXG5wb3JjaC9NU1xcbnBvcmNpbmVcXG5wb3JjdXBpbmUvU01cXG5wb3JlL01HRFNcXG5wb3JneS9TTVxcbnBvcmsvWk1SXFxucG9ya2VyL01cXG5wb3JreS9SU01UXFxucG9ybi9NXFxucG9ybm8vTVxcbnBvcm5vZ3JhcGhlci9NU1xcbnBvcm5vZ3JhcGhpY1xcbnBvcm5vZ3JhcGhpY2FsbHlcXG5wb3Jub2dyYXBoeS9NXFxucG9yb3NpdHkvTVxcbnBvcm91cy9QXFxucG9yb3VzbmVzcy9NXFxucG9ycGh5cml0aWNcXG5wb3JwaHlyeS9NXFxucG9ycG9pc2UvTUdEU1xcbnBvcnJpZGdlL01cXG5wb3JyaW5nZXIvU01cXG5wb3J0J3MvQVxcbnBvcnQvQ0FFR0RTXFxucG9ydGFiaWxpdHkvTVxcbnBvcnRhYmxlL01TXFxucG9ydGFnZS9EU01HXFxucG9ydGFsL1NNXFxucG9ydGN1bGxpcy9NU1xcbnBvcnRlbmQvU0dEXFxucG9ydGVudC9TTVxcbnBvcnRlbnRvdXMvWVBcXG5wb3J0ZXIvQVNNXFxucG9ydGVyaG91c2UvU01cXG5wb3J0Zm9saW8vTVNcXG5wb3J0aG9sZS9NU1xcbnBvcnRpY28vTVxcbnBvcnRpY29lc1xcbnBvcnRpZXJlL01TXFxucG9ydGlvbi9LU0dNRFxcbnBvcnRsaW5lc3MvTVxcbnBvcnRseS9SUFRcXG5wb3J0bWFudGVhdS9NU1xcbnBvcnRyYWl0L01TXFxucG9ydHJhaXRpc3QvU01cXG5wb3J0cmFpdHVyZS9NXFxucG9ydHJheS9TR0RcXG5wb3J0cmF5YWwvTVNcXG5wb3J0dWxhY2EvTVxcbnBvc2Uncy9BXFxucG9zZS9DQUtFR0RTXFxucG9zZXIvRUtTTVxcbnBvc2V1ci9TTVxcbnBvc2gvVFJcXG5wb3NpdC9EU0dWXFxucG9zaXRpb24vQ0tFTVNcXG5wb3NpdGlvbmFsL0tFXFxucG9zaXRpb25lZC9LXFxucG9zaXRpb25pbmcvQUtcXG5wb3NpdGl2ZS9NWVBTXFxucG9zaXRpdmVuZXNzL01cXG5wb3NpdGl2aXNtXFxucG9zaXRpdmlzdC9TXFxucG9zaXRyb24vTVNcXG5wb3NzXFxucG9zc2UvTVNcXG5wb3NzZXNzL0FFVkdTRFxcbnBvc3Nlc3Npb24vQVNNXFxucG9zc2Vzc2l2ZS9TTVlQXFxucG9zc2Vzc2l2ZW5lc3MvTVxcbnBvc3Nlc3Nvci9TTVxcbnBvc3NpYmlsaXR5L1NNXFxucG9zc2libGUvU01cXG5wb3NzaWJseVxcbnBvc3N1bS9TTVxcbnBvc3QvWkdNRFJTSlxcbnBvc3RhZ2UvTVxcbnBvc3RhbFxcbnBvc3RiYWcvU1xcbnBvc3Rib3gvU1xcbnBvc3RjYXJkL1NNXFxucG9zdGNvZGUvU1xcbnBvc3Rjb2xvbmlhbFxcbnBvc3Rjb25zb25hbnRhbFxcbnBvc3RkYXRlL0RTR1xcbnBvc3Rkb2MvTVNcXG5wb3N0ZG9jdG9yYWxcXG5wb3N0ZXIvTVxcbnBvc3Rlcmlvci9TTVxcbnBvc3Rlcml0eS9NXFxucG9zdGdyYWR1YXRlL1NNXFxucG9zdGhhc3RlXFxucG9zdGh1bW91cy9ZXFxucG9zdGh5cG5vdGljXFxucG9zdGllL1NcXG5wb3N0aWxpb24vU01cXG5wb3N0aW5kdXN0cmlhbFxcbnBvc3RpbmcvTVxcbnBvc3RsdWRlL1NNXFxucG9zdG1hbi9NXFxucG9zdG1hcmsvU01ER1xcbnBvc3RtYXN0ZXIvTVNcXG5wb3N0bWVuXFxucG9zdG1lbm9wYXVzYWxcXG5wb3N0bWVyaWRpYW5cXG5wb3N0bWlzdHJlc3MvTVNcXG5wb3N0bW9kZXJuXFxucG9zdG1vZGVybmlzbS9NXFxucG9zdG1vZGVybmlzdC9NU1xcbnBvc3Rtb3J0ZW0vU01cXG5wb3N0bmFzYWxcXG5wb3N0bmF0YWxcXG5wb3N0b3BlcmF0aXZlXFxucG9zdHBhaWRcXG5wb3N0cGFydHVtXFxucG9zdHBvbmUvRFNHTFxcbnBvc3Rwb25lbWVudC9TTVxcbnBvc3RwcmFuZGlhbFxcbnBvc3RzY3JpcHQvU01cXG5wb3N0c2Vhc29uL1NNXFxucG9zdHN5bmFwdGljXFxucG9zdHVsYXRlL1hEU01HTlxcbnBvc3R1bGF0aW9uL01cXG5wb3N0dXJhbFxcbnBvc3R1cmUvTUdKRFNcXG5wb3N0dXJpbmcvTVxcbnBvc3R3YXJcXG5wb3N0d29tYW5cXG5wb3N0d29tZW5cXG5wb3N5L1NNXFxucG90L0NTTVxcbnBvdGFiaWxpdHkvTVxcbnBvdGFibGUvU01cXG5wb3Rhc2gvTVxcbnBvdGFzc2l1bS9NXFxucG90YXRvL01cXG5wb3RhdG9lc1xcbnBvdGJlbGx5L0RTTVxcbnBvdGJvaWxlci9TTVxcbnBvdGVuY3kvTVxcbnBvdGVudC9ZXFxucG90ZW50YXRlL01TXFxucG90ZW50aWFsL01ZU1xcbnBvdGVudGlhbGl0eS9TTVxcbnBvdGVudGlhdGUvR0RTXFxucG90ZnVsL1NNXFxucG90aGVhZC9TTVxcbnBvdGhlci9TTURHXFxucG90aGVyYi9TTVxcbnBvdGhvbGRlci9NU1xcbnBvdGhvbGUvRFJTTVpHXFxucG90aG9vay9TTVxcbnBvdGlvbi9TTVxcbnBvdGx1Y2svTVNcXG5wb3RwaWUvU01cXG5wb3Rwb3VycmkvU01cXG5wb3RzaGVyZC9TTVxcbnBvdHNob3QvTVNcXG5wb3R0YWdlL01cXG5wb3R0ZWRcXG5wb3R0ZXIvR1NNRFxcbnBvdHRlcnkvU01cXG5wb3R0aW5nXFxucG90dHkvUFJTTVRcXG5wb3VjaC9NRFNHXFxucG91Zi9TXFxucG91ZmZlL1NcXG5wb3VsdGVyZXIvTVNcXG5wb3VsdGljZS9EU01HXFxucG91bHRyeS9NXFxucG91bmNlL0RTTUdcXG5wb3VuZCdzXFxucG91bmQvS0RTR1xcbnBvdW5kYWdlL01cXG5wb3VuZGluZy9TTVxcbnBvdXIvR0RTSlxcbnBvdXQvWkdNRFJTXFxucG91dGVyL01cXG5wb3ZlcnR5L01cXG5wb3dcXG5wb3dkZXIvR1NNRFxcbnBvd2RlcnlcXG5wb3dlci9NRFNHXFxucG93ZXJib2F0L01TXFxucG93ZXJmdWwvWVxcbnBvd2VyaG91c2UvU01cXG5wb3dlcmxlc3MvUFlcXG5wb3dlcmxlc3NuZXNzL01cXG5wb3d3b3cvU0dNRFxcbnBveC9NU1xcbnBwXFxucHBtXFxucHByXFxucHJcXG5wcmFjdGljYWJpbGl0eS9NXFxucHJhY3RpY2FibHlcXG5wcmFjdGljYWwvU01ZXFxucHJhY3RpY2FsaXR5L1NNXFxucHJhY3RpY2UvRFNNR0JcXG5wcmFjdGljZWQvVVxcbnByYWN0aWN1bS9TTVxcbnByYWN0aXRpb25lci9TTVxcbnByYWV0b3IvU01cXG5wcmFldG9yaWFuXFxucHJhZ21hdGljL01TXFxucHJhZ21hdGljYWwvWVxcbnByYWdtYXRpc20vTVxcbnByYWdtYXRpc3QvTVNcXG5wcmFpcmllL1NNXFxucHJhaXNlL0VEU01HXFxucHJhaXNld29ydGhpbmVzcy9NXFxucHJhaXNld29ydGh5L1BcXG5wcmFsaW5lL1NNXFxucHJhbS9NU1xcbnByYW5jZS9EUlNNWkdcXG5wcmFuY2VyL01cXG5wcmFuY2luZy9ZXFxucHJhbmcvRFNHXFxucHJhbmsvTVNcXG5wcmFua3N0ZXIvU01cXG5wcmFzZW9keW1pdW0vTVxcbnByYXQvU1xcbnByYXRlL01aR0RSU1xcbnByYXRlci9NXFxucHJhdGZhbGwvU01cXG5wcmF0dGxlL0RSU01aR1xcbnByYXR0bGVyL01cXG5wcmF3bi9NRFNHXFxucHJheS9aR0RSU1xcbnByYXllci9NXFxucHJheWVyZnVsL1lcXG5wcmVhY2gvRFJTWkdMXFxucHJlYWNoZXIvTVxcbnByZWFjaG1lbnQvTVxcbnByZWFjaHkvUlRcXG5wcmVhZG9sZXNjZW5jZS9TTVxcbnByZWFkb2xlc2NlbnRcXG5wcmVhbWJsZS9NR0RTXFxucHJlYXJyYW5nZS9MR0RTXFxucHJlYXJyYW5nZW1lbnQvTVxcbnByZWFzc2lnbmVkXFxucHJlY2FuY2VsL1NNREdcXG5wcmVjYW5jZXJvdXNcXG5wcmVjYXJpb3VzL1BZXFxucHJlY2FyaW91c25lc3MvTVxcbnByZWNhc3RcXG5wcmVjYXV0aW9uL01TXFxucHJlY2F1dGlvbmFyeVxcbnByZWNlZGUvRFNHXFxucHJlY2VkZW5jZS9NXFxucHJlY2VkZW50L1NNXFxucHJlY2VwdC9TTVxcbnByZWNlcHRvci9TTVxcbnByZWNpbmN0L01TXFxucHJlY2lvc2l0eS9NXFxucHJlY2lvdXMvWVBcXG5wcmVjaW91c25lc3MvTVxcbnByZWNpcGljZS9TTVxcbnByZWNpcGl0YW50L01TXFxucHJlY2lwaXRhdGUvWE1ZR05EU1xcbnByZWNpcGl0YXRpb24vTVxcbnByZWNpcGl0b3VzL1lcXG5wcmVjaXMvTVxcbnByZWNpc2UvRFJTWVRHTlBcXG5wcmVjaXNlbmVzcy9NXFxucHJlY2lzaW9uL01cXG5wcmVjbHVkZS9HRFNcXG5wcmVjbHVzaW9uL01cXG5wcmVjb2Npb3VzL1lQXFxucHJlY29jaW91c25lc3MvTVxcbnByZWNvY2l0eS9NXFxucHJlY29nbml0aW9uL01cXG5wcmVjb2duaXRpdmVcXG5wcmVjb2xvbmlhbFxcbnByZWNvbmNlaXZlL0dEU1xcbnByZWNvbmNlcHRpb24vU01cXG5wcmVjb25kaXRpb24vTURHU1xcbnByZWNvb2svR1NEXFxucHJlY3Vyc29yL1NNXFxucHJlY3Vyc29yeVxcbnByZWRhdGUvRFNHXFxucHJlZGF0b3IvTVNcXG5wcmVkYXRvcnlcXG5wcmVkYXduXFxucHJlZGVjZWFzZS9HRFNcXG5wcmVkZWNlc3Nvci9TTVxcbnByZWRlZmluZWRcXG5wcmVkZXNpZ25hdGUvR0RTXFxucHJlZGVzdGluYXRpb24vTVxcbnByZWRlc3RpbmUvRFNHXFxucHJlZGV0ZXJtaW5hdGlvbi9NXFxucHJlZGV0ZXJtaW5lL1pHRFJTXFxucHJlZGV0ZXJtaW5lci9NXFxucHJlZGljYWJsZVxcbnByZWRpY2FtZW50L01TXFxucHJlZGljYXRlL01HTlZEU1xcbnByZWRpY2F0aW9uL01cXG5wcmVkaWNhdGl2ZS9ZXFxucHJlZGljdC9CR1ZTRFxcbnByZWRpY3RhYmlsaXR5L1VNXFxucHJlZGljdGFibGUvVVxcbnByZWRpY3RhYmx5L1VcXG5wcmVkaWN0aW9uL1NNXFxucHJlZGljdG9yL01TXFxucHJlZGlnZXN0L0dEU1xcbnByZWRpbGVjdGlvbi9TTVxcbnByZWRpc3Bvc2UvR0RTXFxucHJlZGlzcG9zaXRpb24vTVNcXG5wcmVkbmlzb25lXFxucHJlZG9taW5hbmNlL01cXG5wcmVkb21pbmFudC9ZXFxucHJlZG9taW5hdGUvWUdEU1xcbnByZWVtaWUvU01cXG5wcmVlbWluZW5jZS9NXFxucHJlZW1pbmVudC9ZXFxucHJlZW1wdC9HVlNEXFxucHJlZW1wdGlvbi9NXFxucHJlZW1wdGl2ZS9ZXFxucHJlZW4vRFNHXFxucHJlZXhpc3QvREdTXFxucHJlZXhpc3RlbmNlL01cXG5wcmVmXFxucHJlZmFiL1NNXFxucHJlZmFiYmVkXFxucHJlZmFiYmluZ1xcbnByZWZhYnJpY2F0ZS9EU0dOXFxucHJlZmFicmljYXRpb24vTVxcbnByZWZhY2UvRFNNR1xcbnByZWZhdG9yeVxcbnByZWZlY3QvU01cXG5wcmVmZWN0dXJlL01TXFxucHJlZmVyL1NCTFxcbnByZWZlcmFibHlcXG5wcmVmZXJlbmNlL01TXFxucHJlZmVyZW50aWFsL1lcXG5wcmVmZXJtZW50L01cXG5wcmVmZXJyZWRcXG5wcmVmZXJyaW5nXFxucHJlZmlndXJlL0dEU1xcbnByZWZpeC9NRFNHXFxucHJlZm9ybS9HU0RcXG5wcmVmcm9udGFsXFxucHJlZ2FtZS9TTVxcbnByZWduYW5jeS9TTVxcbnByZWduYW50XFxucHJlaGVhdC9HU0RcXG5wcmVoZW5zaWxlXFxucHJlaGlzdG9yaWFuL1NcXG5wcmVoaXN0b3JpY1xcbnByZWhpc3RvcmljYWwvWVxcbnByZWhpc3RvcnkvTVxcbnByZWh1bWFuXFxucHJlaW5zdGFsbGVkXFxucHJlanVkZ2UvR0RTXFxucHJlanVkZ21lbnQvU01cXG5wcmVqdWRpY2UvTUdEU1xcbnByZWp1ZGljZWQvVVxcbnByZWp1ZGljaWFsXFxucHJla2luZGVyZ2FydGVuL1NNXFxucHJlbGFjeS9NXFxucHJlbGF0ZS9TTVxcbnByZWxpbS9TTVxcbnByZWxpbWluYXJ5L1NNXFxucHJlbGl0ZXJhdGVcXG5wcmVsdWRlL01TXFxucHJlbWFyaXRhbFxcbnByZW1hdHVyZS9ZXFxucHJlbWVkL1NNXFxucHJlbWVkaWNhbFxcbnByZW1lZGl0YXRlL0RTR05cXG5wcmVtZWRpdGF0ZWQvVVxcbnByZW1lZGl0YXRpb24vTVxcbnByZW1lbnN0cnVhbFxcbnByZW1pZXIvU0dNRFxcbnByZW1pZXJlL01TXFxucHJlbWllcnNoaXAvTVNcXG5wcmVtaXNlL0RTTUdcXG5wcmVtaXVtL1NNXFxucHJlbWl4L0dEU1xcbnByZW1vbGFyL1NNXFxucHJlbW9uaXRpb24vTVNcXG5wcmVtb25pdG9yeVxcbnByZW5hdGFsL1lcXG5wcmVudXAvU01cXG5wcmVudXB0aWFsXFxucHJlb2NjdXBhdGlvbi9TTVxcbnByZW9jY3VweS9EU0dcXG5wcmVvcGVyYXRpdmVcXG5wcmVvcmRhaW4vR0RTXFxucHJlb3duZWRcXG5wcmVwL01TXFxucHJlcGFja2FnZS9EU0dcXG5wcmVwYWNrZWRcXG5wcmVwYWlkXFxucHJlcGFyYXRpb24vU01cXG5wcmVwYXJhdG9yeVxcbnByZXBhcmUvR0RTXFxucHJlcGFyZWQvVVBcXG5wcmVwYXJlZG5lc3MvVU1cXG5wcmVwYXkvR1NMXFxucHJlcGF5bWVudC9NU1xcbnByZXBlbmRcXG5wcmVwb25kZXJhbmNlL1NNXFxucHJlcG9uZGVyYW50L1lcXG5wcmVwb25kZXJhdGUvR0RTXFxucHJlcG9zaXRpb24vU01cXG5wcmVwb3NpdGlvbmFsL1lcXG5wcmVwb3NzZXNzL0dEU1xcbnByZXBvc3Nlc3NpbmcvVVxcbnByZXBvc3Nlc3Npb24vU01cXG5wcmVwb3N0ZXJvdXMvWVxcbnByZXBwZWRcXG5wcmVwcGluZ1xcbnByZXBweS9UUlNNXFxucHJlcHViZXNjZW5jZS9NXFxucHJlcHViZXNjZW50L1NNXFxucHJlcHVjZS9NU1xcbnByZXF1ZWwvTVNcXG5wcmVyZWNvcmQvR1NEXFxucHJlcmVnaXN0ZXIvU0dEXFxucHJlcmVnaXN0cmF0aW9uL01cXG5wcmVyZXF1aXNpdGUvTVNcXG5wcmVyb2dhdGl2ZS9TTVxcbnByZXNcXG5wcmVzYWdlL01HRFNcXG5wcmVzYnlvcGlhL01cXG5wcmVzYnl0ZXIvU01cXG5wcmVzYnl0ZXJ5L1NNXFxucHJlc2Nob29sL1NaTVJcXG5wcmVzY2hvb2xlci9NXFxucHJlc2NpZW5jZS9NXFxucHJlc2NpZW50L1lcXG5wcmVzY3JpYmUvRFNHXFxucHJlc2NyaXB0L1NWTVxcbnByZXNjcmlwdGlvbi9TTVxcbnByZXNjcmlwdGl2ZS9ZXFxucHJlc2Vhc29uL1NNXFxucHJlc2VuY2UvU01cXG5wcmVzZW50L0xNRFJZWkdTQlxcbnByZXNlbnRhYmx5XFxucHJlc2VudGF0aW9uL0FTTVxcbnByZXNlbnRlci9NXFxucHJlc2VudGltZW50L1NNXFxucHJlc2VudG1lbnQvU01cXG5wcmVzZXJ2YXRpb24vTVxcbnByZXNlcnZhdGlvbmlzdC9TTVxcbnByZXNlcnZhdGl2ZS9TTVxcbnByZXNlcnZlL0JEUlNNWkdcXG5wcmVzZXJ2ZXIvTVxcbnByZXNldC9TXFxucHJlc2V0dGluZ1xcbnByZXNocmFua1xcbnByZXNocmluay9HU1xcbnByZXNocnVua1xcbnByZXNpZGUvR0RTXFxucHJlc2lkZW5jeS9TTVxcbnByZXNpZGVudC9NU1xcbnByZXNpZGVudGlhbFxcbnByZXNpZGl1bS9NXFxucHJlc29ydC9ER1NcXG5wcmVzcydzXFxucHJlc3MvQUNHU0RcXG5wcmVzc2VkL1VcXG5wcmVzc2VyL01TXFxucHJlc3NpZS9TXFxucHJlc3NpbmcvU01ZXFxucHJlc3NtYW4vTVxcbnByZXNzbWVuXFxucHJlc3N1cmUvRFNNR1xcbnByZXNzdXJpemF0aW9uL01cXG5wcmVzc3VyaXplL0NHRFNcXG5wcmVzc3VyaXplci9TTVxcbnByZXN0aWRpZ2l0YXRpb24vTVxcbnByZXN0aWdlL01cXG5wcmVzdGlnaW91c1xcbnByZXN0by9TTVxcbnByZXN1bWFibHlcXG5wcmVzdW1lL0dEU0JcXG5wcmVzdW1wdGlvbi9TTVxcbnByZXN1bXB0aXZlXFxucHJlc3VtcHR1b3VzL1lQXFxucHJlc3VtcHR1b3VzbmVzcy9NXFxucHJlc3VwcG9zZS9EU0dcXG5wcmVzdXBwb3NpdGlvbi9NU1xcbnByZXRheFxcbnByZXRlZW4vTVNcXG5wcmV0ZW5kL0RSWkdTXFxucHJldGVuZGVyL01cXG5wcmV0ZW5zZS9TWE1OXFxucHJldGVuc2lvbi9NXFxucHJldGVudGlvdXMvVVlcXG5wcmV0ZW50aW91c25lc3MvTVxcbnByZXRlcml0L1NNXFxucHJldGVybVxcbnByZXRlcm5hdHVyYWwvWVxcbnByZXRlc3QvREdTXFxucHJldGV4dC9NU1xcbnByZXRyaWFsL1NcXG5wcmV0dGlmeS9HRFNcXG5wcmV0dGlseVxcbnByZXR0aW5lc3MvTVxcbnByZXR0eS9UR0RSU01QXFxucHJldHplbC9NU1xcbnByZXZhaWwvREdTXFxucHJldmFsZW5jZS9NXFxucHJldmFsZW50XFxucHJldmFyaWNhdGUvRFNHTlhcXG5wcmV2YXJpY2F0aW9uL01cXG5wcmV2YXJpY2F0b3IvU01cXG5wcmV2ZW50L0RCU0dWXFxucHJldmVudGFibGUvVVxcbnByZXZlbnRhdGl2ZS9NU1xcbnByZXZlbnRpb24vTVxcbnByZXZlbnRpdmUvU01cXG5wcmV2aWV3L01EUlNaR1xcbnByZXZpb3VzL1lcXG5wcmV2aXNpb24vTVNcXG5wcmV3YXJcXG5wcmV5L0dNRFNcXG5wcmV6emllL1NcXG5wcmlhcGljXFxucHJpY2Unc1xcbnByaWNlL0FHRFNcXG5wcmljZWxlc3NcXG5wcmljZXlcXG5wcmljaWVyXFxucHJpY2llc3RcXG5wcmljay9NRFJZU1pHXFxucHJpY2tlci9NXFxucHJpY2tsZS9NR0RTXFxucHJpY2tsaW5lc3MvTVxcbnByaWNrbHkvUFJUXFxucHJpZGUvTUdEU1xcbnByaWRlZnVsL1lcXG5wcmllci9NXFxucHJpZXN0L1NNWVxcbnByaWVzdGVzcy9NU1xcbnByaWVzdGhvb2QvU01cXG5wcmllc3RsaW5lc3MvTVxcbnByaWVzdGx5L1JUUFxcbnByaWcvTVNcXG5wcmlnZ2lzaC9QXFxucHJpZ2dpc2huZXNzL01cXG5wcmltL1pHRFJZUFxcbnByaW1hY3kvTVxcbnByaW1hbFxcbnByaW1hcmlseVxcbnByaW1hcnkvU01cXG5wcmltYXRlL01TXFxucHJpbWUvTVNcXG5wcmltZXIvTVxcbnByaW1ldmFsXFxucHJpbWluZy9NXFxucHJpbWl0aXZlL1NQTVlcXG5wcmltaXRpdmVuZXNzL01cXG5wcmltbWVyXFxucHJpbW1lc3RcXG5wcmltbmVzcy9NXFxucHJpbW9nZW5pdG9yL1NNXFxucHJpbW9nZW5pdHVyZS9NXFxucHJpbW9yZGlhbC9ZXFxucHJpbXAvRFNHXFxucHJpbXJvc2UvU01cXG5wcmltdWxhL1NcXG5wcmluY2UvU01ZXFxucHJpbmNlZG9tL1NNXFxucHJpbmNlbGluZXNzL01cXG5wcmluY2VseS9QUlRcXG5wcmluY2Vzcy9NU1xcbnByaW5jaXBhbC9TTVlcXG5wcmluY2lwYWxpdHkvU01cXG5wcmluY2lwbGUvRFNNXFxucHJpbmNpcGxlZC9VXFxucHJpbnQvQU1EU0dcXG5wcmludGFibGUvVVxcbnByaW50ZXIvTVNcXG5wcmludGluZy9TTVxcbnByaW50bWFraW5nXFxucHJpbnRvdXQvU01cXG5wcmlvbi9TXFxucHJpb3IvTVNcXG5wcmlvcmVzcy9NU1xcbnByaW9yaXRpemF0aW9uXFxucHJpb3JpdGl6ZS9EU0dcXG5wcmlvcml0eS9TTVxcbnByaW9yeS9TTVxcbnByaXNtL01TXFxucHJpc21hdGljXFxucHJpc29uL1NaTVJcXG5wcmlzb25lci9NXFxucHJpc3NpbHlcXG5wcmlzc2luZXNzL01cXG5wcmlzc3kvUFRSXFxucHJpc3RpbmVcXG5wcml0aGVlXFxucHJpdmFjeS9NXFxucHJpdmF0ZS9YTVlUTlJTXFxucHJpdmF0ZWVyL1NNXFxucHJpdmF0aW9uL0NTTVxcbnByaXZhdGl6YXRpb24vU01cXG5wcml2YXRpemUvRFNHXFxucHJpdmV0L1NNXFxucHJpdmlsZWdlL0RTTUdcXG5wcml2aWxlZ2VkL1VcXG5wcml2aWx5XFxucHJpdnkvUlNNVFxcbnByaXplL01HRFNcXG5wcml6ZWQvQVxcbnByaXplZmlnaHQvWkdTTVJcXG5wcml6ZWZpZ2h0ZXIvTVxcbnByaXplZmlnaHRpbmcvTVxcbnByaXpld2lubmVyL01TXFxucHJpemV3aW5uaW5nXFxucHJvL1NNXFxucHJvYmFiaWxpc3RpY1xcbnByb2JhYmlsaXR5L1NNXFxucHJvYmFibGUvU01cXG5wcm9iYWJseVxcbnByb2JhdGUvTU5cXG5wcm9iYXRpb24vWk1SXFxucHJvYmF0aW9uYWxcXG5wcm9iYXRpb25hcnlcXG5wcm9iYXRpb25lci9NXFxucHJvYmUvTUdEU0JKXFxucHJvYml0eS9NXFxucHJvYmxlbS9NU1xcbnByb2JsZW1hdGljL1VcXG5wcm9ibGVtYXRpY2FsL1lcXG5wcm9ib3NjZXNcXG5wcm9ib3NjaXMvTVNcXG5wcm9jYWluZS9NXFxucHJvY2VkdXJhbFxcbnByb2NlZHVyZS9TTVxcbnByb2NlZWQvR0pEU1xcbnByb2NlZWRpbmcvTVxcbnByb2NlZWRzL01cXG5wcm9jZXNzJ3NcXG5wcm9jZXNzL0FHRFNcXG5wcm9jZXNzYWJsZVxcbnByb2Nlc3NlZC9VXFxucHJvY2Vzc2lvbi9HRFxcbnByb2Nlc3Npb25hbC9NU1xcbnByb2Nlc3Nvci9TTVxcbnByb2NsYW1hdGlvbi9NU1xcbnByb2NsaXZpdHkvU01cXG5wcm9jcmFzdGluYXRlL0RTR05cXG5wcm9jcmFzdGluYXRpb24vTVxcbnByb2NyYXN0aW5hdG9yL01TXFxucHJvY3JlYXRlL1ZcXG5wcm9jdG9yL0dNRFNcXG5wcm9jdXJlbWVudC9NXFxucHJvZC9NU1xcbnByb2RpZ2FsL01ZU1xcbnByb2RpZ2FsaXR5L01cXG5wcm9kaWdpb3VzL1lcXG5wcm9kaWd5L1NNXFxucHJvZHVjZSdzXFxucHJvZHVjZS9BWkdEUlNcXG5wcm9kdWNlci9BTVxcbnByb2R1Y2libGUvQVxcbnByb2R1Y3Rpb24vQVNNXFxucHJvZHVjdGl2ZS9VWVxcbnByb2R1Y3RpdmVuZXNzL01cXG5wcm9kdWN0aXZpdHkvTVxcbnByb2YvTVNcXG5wcm9mYW5hdGlvbi9NU1xcbnByb2ZhbmUvUFlHRFNcXG5wcm9mYW5lbmVzcy9NXFxucHJvZmFuaXR5L1NNXFxucHJvZmVzc2VkL1lcXG5wcm9mZXNzaW9uL1NNXFxucHJvZmVzc2lvbmFsL01ZU1xcbnByb2Zlc3Npb25hbGlzbS9NXFxucHJvZmVzc2lvbmFsaXphdGlvblxcbnByb2Zlc3Npb25hbGl6ZS9EU0dcXG5wcm9mZXNzb3IvU01cXG5wcm9mZXNzb3JpYWwvWVxcbnByb2Zlc3NvcnNoaXAvU01cXG5wcm9mZmVyL0dNRFNcXG5wcm9maWNpZW5jeS9NXFxucHJvZmljaWVudC9NWVNcXG5wcm9maXQvQkdEXFxucHJvZml0YWJpbGl0eS9NXFxucHJvZml0YWJsZS9VXFxucHJvZml0YWJseS9VXFxucHJvZml0ZWVyL01ER1NcXG5wcm9maXRlZXJpbmcvTVxcbnByb2ZpdGVyb2xlL1NNXFxucHJvZml0bGVzc1xcbnByb2ZsaWdhY3kvTVxcbnByb2ZsaWdhdGUvU01ZXFxucHJvZm9ybWFcXG5wcm9mb3VuZC9SWVRQXFxucHJvZm91bmRuZXNzL01cXG5wcm9mdW5kaXR5L1NNXFxucHJvZnVzZS9QWVxcbnByb2Z1c2VuZXNzL01cXG5wcm9nZW5pdG9yL1NNXFxucHJvZ2VueS9NXFxucHJvZ2VzdGVyb25lL01cXG5wcm9nZXN0aW4vU1xcbnByb2duYXRob3VzXFxucHJvZ25vc2VzXFxucHJvZ25vc2lzL01cXG5wcm9nbm9zdGljL01TXFxucHJvZ25vc3RpY2F0ZS9YR05EU1xcbnByb2dub3N0aWNhdGlvbi9NXFxucHJvZ25vc3RpY2F0b3IvTVNcXG5wcm9ncmFtL0NBU1xcbnByb2dyYW1tYWJsZS9NU1xcbnByb2dyYW1tYXRpY1xcbnByb2dyYW1tZWQvQUNcXG5wcm9ncmFtbWVyL01TXFxucHJvZ3JhbW1pbmcvU01cXG5wcm9ncmVzcy9NRFNHVlxcbnByb2dyZXNzaW9uL01TXFxucHJvZ3Jlc3NpdmUvUE1ZU1xcbnByb2dyZXNzaXZlbmVzcy9NXFxucHJvaGliaXQvREdWU1xcbnByb2hpYml0aW9uL1NNXFxucHJvaGliaXRpb25pc3QvTVNcXG5wcm9oaWJpdGl2ZS9ZXFxucHJvaGliaXRvcnlcXG5wcm9qZWN0L0dNRFNcXG5wcm9qZWN0aWxlL1NNXFxucHJvamVjdGlvbi9TTVxcbnByb2plY3Rpb25pc3QvU01cXG5wcm9qZWN0b3IvTVNcXG5wcm9rYXJ5b3RlL01TXFxucHJva2FyeW90aWNcXG5wcm9sZS9TXFxucHJvbGV0YXJpYW4vTVNcXG5wcm9sZXRhcmlhdC9NXFxucHJvbGlmZXJhdGUvRFNHTlxcbnByb2xpZmVyYXRpb24vTVxcbnByb2xpZmljXFxucHJvbGlmaWNhbGx5XFxucHJvbGl4L1lcXG5wcm9saXhpdHkvTVxcbnByb2xvZ3VlL1NNXFxucHJvbG9uZ2F0aW9uL1NNXFxucHJvbS9NXFxucHJvbWVuYWRlL01HRFNcXG5wcm9tZXRoaXVtL01cXG5wcm9taW5lbmNlL01cXG5wcm9taW5lbnQvWVxcbnByb21pc2N1aXR5L01cXG5wcm9taXNjdW91cy9ZXFxucHJvbWlzZS9EU01HXFxucHJvbWlzaW5nL1lcXG5wcm9taXNzb3J5XFxucHJvbW8vTVxcbnByb21vbnRvcnkvU01cXG5wcm9tb3RlL0RSWkdcXG5wcm9tb3Rlci9NXFxucHJvbW90aW9uYWxcXG5wcm9tcHQvSlBTTURSWVpUR1xcbnByb21wdGVkL1VcXG5wcm9tcHRlci9NXFxucHJvbXB0aW5nL01cXG5wcm9tcHRpdHVkZS9NXFxucHJvbXB0bmVzcy9NXFxucHJvbXVsZ2F0ZS9HTkRTXFxucHJvbXVsZ2F0aW9uL01cXG5wcm9tdWxnYXRvci9NU1xcbnByb25lL1BcXG5wcm9uZW5lc3MvTVxcbnByb25nL01EU1xcbnByb25naG9ybi9NU1xcbnByb25vbWluYWwvTVxcbnByb25vdW5jZS9EU0xHXFxucHJvbm91bmNlYWJsZS9VXFxucHJvbm91bmNlbWVudC9TTVxcbnByb250b1xcbnByb251bmNpYXRpb24vTVNcXG5wcm9vZi9BREdTTVxcbnByb29mcmVhZC9TUlpHXFxucHJvb2ZyZWFkZXIvTVxcbnByb3AvTVNcXG5wcm9wYWdhbmRhL01cXG5wcm9wYWdhbmRpc3QvTVNcXG5wcm9wYWdhbmRpemUvR0RTXFxucHJvcGFnYXRlL0RTR05cXG5wcm9wYWdhdGlvbi9NXFxucHJvcGFnYXRvci9TTVxcbnByb3BlbC9TXFxucHJvcGVsbGFudC9NU1xcbnByb3BlbGxlZFxcbnByb3BlbGxlci9TTVxcbnByb3BlbGxpbmdcXG5wcm9wZW5zaXR5L1NNXFxucHJvcGVyL01SWVRcXG5wcm9wZXJ0eS9EU01cXG5wcm9waGVjeS9TTVxcbnByb3BoZXNpZXIvTVxcbnByb3BoZXN5L0RSU01aR1xcbnByb3BoZXQvU01cXG5wcm9waGV0ZXNzL01TXFxucHJvcGhldGljXFxucHJvcGhldGljYWwvWVxcbnByb3BoeWxhY3RpYy9TTVxcbnByb3BoeWxheGVzXFxucHJvcGh5bGF4aXMvTVxcbnByb3BpbnF1aXR5L01cXG5wcm9waXRpYXRlL0RTR05cXG5wcm9waXRpYXRpb24vTVxcbnByb3BpdGlhdG9yeVxcbnByb3BpdGlvdXMvWVxcbnByb3BvbmVudC9TTVxcbnByb3BvcnRpb24vRVNNXFxucHJvcG9ydGlvbmFsL1lTXFxucHJvcG9ydGlvbmFsaXR5XFxucHJvcG9ydGlvbmF0ZS9FWVxcbnByb3Bvc2FsL01TXFxucHJvcHBlZFxcbnByb3BwaW5nXFxucHJvcHJhbm9sb2xcXG5wcm9wcmlldGFyeS9TTVxcbnByb3ByaWV0aWVzL01cXG5wcm9wcmlldG9yL1NNXFxucHJvcHJpZXRvcmlhbC9ZXFxucHJvcHJpZXRvcnNoaXAvTVxcbnByb3ByaWV0cmVzcy9NU1xcbnByb3ByaWV0eS9TTVxcbnByb3B1bHNpb24vTVxcbnByb3B1bHNpdmVcXG5wcm9yYXRlL0RTR1xcbnByb3JvZ2F0aW9uL01cXG5wcm9yb2d1ZS9HRFxcbnByb3NhaWNcXG5wcm9zYWljYWxseVxcbnByb3NjZW5pdW0vU01cXG5wcm9zY2l1dHRvL01cXG5wcm9zY3JpYmUvREdcXG5wcm9zY3JpcHRpb24vTVNcXG5wcm9zZS9NXFxucHJvc2VjdXRlL0RTWEdOXFxucHJvc2VjdXRpb24vTVxcbnByb3NlY3V0b3IvTVNcXG5wcm9zZWx5dGUvRFNNR1xcbnByb3NlbHl0aXNtL01cXG5wcm9zZWx5dGl6ZS9EUlNaR1xcbnByb3NlbHl0aXplci9NXFxucHJvc29jaWFsXFxucHJvc29keS9TTVxcbnByb3NwZWN0L01ER1ZTXFxucHJvc3BlY3RpdmUvWVxcbnByb3NwZWN0b3IvU01cXG5wcm9zcGVjdHVzL01TXFxucHJvc3Blci9HU0RcXG5wcm9zcGVyaXR5L01cXG5wcm9zcGVyb3VzL1lcXG5wcm9zdGF0ZS9NU1xcbnByb3N0aGVzZXNcXG5wcm9zdGhlc2lzL01cXG5wcm9zdGhldGljXFxucHJvc3RpdHV0ZS9NR05EU1xcbnByb3N0aXR1dGlvbi9NXFxucHJvc3RyYXRlL0dOWERTXFxucHJvc3RyYXRpb24vTVxcbnByb3N5L1JUXFxucHJvdGFjdGluaXVtL01cXG5wcm90YWdvbmlzdC9TTVxcbnByb3RlYW5cXG5wcm90ZWN0L0dWU0RcXG5wcm90ZWN0ZWQvVVxcbnByb3RlY3Rpb24vU01cXG5wcm90ZWN0aW9uaXNtL01cXG5wcm90ZWN0aW9uaXN0L01TXFxucHJvdGVjdGl2ZS9QWVxcbnByb3RlY3RpdmVuZXNzL01cXG5wcm90ZWN0b3IvTVNcXG5wcm90ZWN0b3JhdGUvTVNcXG5wcm90ZWdlL1NNXFxucHJvdGVnZWUvU1xcbnByb3RlaW4vU01cXG5wcm90ZXN0YW50L1NcXG5wcm90ZXN0YXRpb24vTVNcXG5wcm90b2NvbC9NU1xcbnByb3Rvbi9TTVxcbnByb3RvcGxhc20vTVxcbnByb3RvcGxhc21pY1xcbnByb3RvdHlwZS9NR1NcXG5wcm90b3R5cGljYWxcXG5wcm90b3pvYVxcbnByb3Rvem9hbi9NU1xcbnByb3Rvem9pY1xcbnByb3RyYWN0L0dEXFxucHJvdHJ1ZGUvR0RTXFxucHJvdHJ1c2lsZVxcbnByb3RydXNpb24vTVNcXG5wcm90dWJlcmFuY2UvTVNcXG5wcm90dWJlcmFudFxcbnByb3VkL1JZVFxcbnByb3YvTkJcXG5wcm92YWJpbGl0eS9NXFxucHJvdmFibHlcXG5wcm92ZS9FQUdEU1xcbnByb3ZlZC9VXFxucHJvdmVuL1VcXG5wcm92ZW5hbmNlL1NNXFxucHJvdmVuZGVyL01cXG5wcm92ZW5pZW5jZS9NXFxucHJvdmVyYmlhbC9ZXFxucHJvdmlkZS9EUlNaR1xcbnByb3ZpZGVkL1VcXG5wcm92aWRlbmNlL01cXG5wcm92aWRlbnQvWVxcbnByb3ZpZGVudGlhbC9ZXFxucHJvdmlkZXIvTVxcbnByb3ZpbmNlL01TXFxucHJvdmluY2lhbC9TTVlcXG5wcm92aW5jaWFsaXNtL01cXG5wcm92aXNpb25hbC9ZXFxucHJvdmlzby9TTVxcbnByb3ZvY2F0ZXVyL1NcXG5wcm92b2NhdGl2ZS9QWVxcbnByb3ZvY2F0aXZlbmVzcy9NXFxucHJvdm9rZS9EUlNaR1xcbnByb3Zva2VkL1VcXG5wcm92b2tlci9NXFxucHJvdm9raW5nL1lcXG5wcm92b2xvbmUvTVxcbnByb3Zvc3QvU01cXG5wcm93L01TXFxucHJvd2Vzcy9NXFxucHJvd2wvTURSU1pHXFxucHJvd2xlci9NXFxucHJveGltYWxcXG5wcm94aW1hdGVcXG5wcm94aW1pdHkvTVxcbnByb3h5L1NNXFxucHJ1ZGUvTVNcXG5wcnVkZW5jZS9NXFxucHJ1ZGVudC9ZXFxucHJ1ZGVudGlhbC9ZXFxucHJ1ZGVyeS9NXFxucHJ1ZGlzaC9ZUFxcbnBydWRpc2huZXNzL01cXG5wcnVuZS9NWkdEUlNcXG5wcnVuZXIvTVxcbnBydXJpZW5jZS9NXFxucHJ1cmllbnQvWVxcbnByeS9aVEdEUlNNXFxucHNhbG0vTVNcXG5wc2FsbWlzdC9TTVxcbnBzYWx0ZXJ5L1NNXFxucHNlcGhvbG9naXN0L1NcXG5wc2VwaG9sb2d5XFxucHNldWQvU1xcbnBzZXVkby9TXFxucHNldWRvbnltL1NNXFxucHNldWRvbnltb3VzXFxucHNldWRvc2NpZW5jZS9NU1xcbnBzZXVkeVxcbnBzaGF3L01TXFxucHNpL1NNXFxucHNpdHRhY29zaXMvTVxcbnBzb3JpYXNpcy9NXFxucHNzdFxcbnBzeWNoL01EU0dcXG5wc3ljaGUvTVxcbnBzeWNoZWRlbGlhXFxucHN5Y2hlZGVsaWMvU01cXG5wc3ljaGVkZWxpY2FsbHlcXG5wc3ljaGlhdHJpY1xcbnBzeWNoaWF0cmlzdC9TTVxcbnBzeWNoaWF0cnkvTVxcbnBzeWNoaWMvTVNcXG5wc3ljaGljYWwvWVxcbnBzeWNoby9TTVxcbnBzeWNob2FjdGl2ZVxcbnBzeWNob2FuYWx5c2VzXFxucHN5Y2hvYW5hbHlzaXMvTVxcbnBzeWNob2FuYWx5c3QvU01cXG5wc3ljaG9hbmFseXRpY1xcbnBzeWNob2FuYWx5dGljYWwvWVxcbnBzeWNob2FuYWx5emUvRFNHXFxucHN5Y2hvYmFiYmxlL01cXG5wc3ljaG9kcmFtYS9NU1xcbnBzeWNob2dlbmljXFxucHN5Y2hva2luZXNpc1xcbnBzeWNob2tpbmV0aWNcXG5wc3ljaG9sb2dpY2FsL1lcXG5wc3ljaG9sb2dpc3QvTVNcXG5wc3ljaG9sb2d5L1NNXFxucHN5Y2hvbWV0cmljXFxucHN5Y2hvbmV1cm9zZXNcXG5wc3ljaG9uZXVyb3Npcy9NXFxucHN5Y2hvcGF0aC9NXFxucHN5Y2hvcGF0aGljXFxucHN5Y2hvcGF0aG9sb2d5XFxucHN5Y2hvcGF0aHNcXG5wc3ljaG9wYXRoeS9NXFxucHN5Y2hvcGhhcm1hY29sb2d5XFxucHN5Y2hvcGh5c2lvbG9neVxcbnBzeWNob3MvU1xcbnBzeWNob3Npcy9NXFxucHN5Y2hvc29tYXRpY1xcbnBzeWNob3RoZXJhcGlzdC9NU1xcbnBzeWNob3RoZXJhcHkvU01cXG5wc3ljaG90aWMvU01cXG5wc3ljaG90aWNhbGx5XFxucHN5Y2hvdHJvcGljL01TXFxucHN5Y2hzXFxucHQvQ1xcbnB0YXJtaWdhbi9NU1xcbnB0ZXJvZGFjdHlsL01TXFxucHRvbWFpbmUvU01cXG5wdWIvU01cXG5wdWJlcnRhbFxcbnB1YmVydHkvTVxcbnB1YmVzL01cXG5wdWJlc2NlbmNlL01cXG5wdWJlc2NlbnRcXG5wdWJpY1xcbnB1YmlzL01cXG5wdWJsaWMvQU1cXG5wdWJsaWNhbi9BTVNcXG5wdWJsaWNhdGlvbi9BU01cXG5wdWJsaWNpc3QvTVNcXG5wdWJsaWNpdHkvTVxcbnB1YmxpY2l6ZS9HRFNcXG5wdWJsaWNseVxcbnB1Ymxpc2gvQUdEU1xcbnB1Ymxpc2hhYmxlXFxucHVibGlzaGVkL1VcXG5wdWJsaXNoZXIvTVNcXG5wdWJsaXNoaW5nL01cXG5wdWNlL01cXG5wdWNrL1pNUlNcXG5wdWNrZXIvTURHXFxucHVja2lzaC9ZUFxcbnB1Y2tpc2huZXNzL01cXG5wdWQvU1xcbnB1ZGRpbmcvU01cXG5wdWRkbGUvRFNNR1xcbnB1ZGRsaW5nL01cXG5wdWRlbmRhXFxucHVkZW5kdW0vTVxcbnB1ZGdpbmVzcy9NXFxucHVkZ3kvUFJUXFxucHVlYmxvL1NNXFxucHVlcmlsZVxcbnB1ZXJpbGl0eS9NXFxucHVlcnBlcmFsXFxucHVmZi9aR01EUlNcXG5wdWZmYmFsbC9TTVxcbnB1ZmZlci9NXFxucHVmZmluL1NNXFxucHVmZmluZXNzL01cXG5wdWZmeS9QUlRcXG5wdWcvU01cXG5wdWdpbGlzbS9NXFxucHVnaWxpc3QvU01cXG5wdWdpbGlzdGljXFxucHVnbmFjaW91cy9ZUFxcbnB1Z25hY2lvdXNuZXNzL01cXG5wdWduYWNpdHkvTVxcbnB1a2UvTUdEU1xcbnB1a2thXFxucHVsY2hyaXR1ZGUvTVxcbnB1bGNocml0dWRpbm91c1xcbnB1bGUvR0RTXFxucHVsbC9aR01EUlNcXG5wdWxsYmFjay9NU1xcbnB1bGxlci9NXFxucHVsbGV0L1NNXFxucHVsbGV5L1NNXFxucHVsbG91dC9NU1xcbnB1bGxvdmVyL1NNXFxucHVsbW9uYXJ5XFxucHVscC9HTURTXFxucHVscGluZXNzL01cXG5wdWxwaXQvU01cXG5wdWxwd29vZC9NXFxucHVscHkvUlBUXFxucHVsc2FyL1NNXFxucHVsc2F0ZS9YR05EU1xcbnB1bHNhdGlvbi9NXFxucHVsc2UvQU1HRFNcXG5wdWx2ZXJpemF0aW9uL01cXG5wdWx2ZXJpemUvRFNHXFxucHVtYS9NU1xcbnB1bWljZS9TTVxcbnB1bW1lbC9TR0RcXG5wdW1wL1pHTURSU1xcbnB1bXBlci9NXFxucHVtcGVybmlja2VsL01cXG5wdW1wa2luL01TXFxucHVuL1NNXFxucHVuY2gvTURSU1pHXFxucHVuY2hiYWcvU1xcbnB1bmNoZW9uL01TXFxucHVuY2hlci9NXFxucHVuY2hsaW5lL1NcXG5wdW5jaHkvVFJcXG5wdW5jdGlsaW8vTVxcbnB1bmN0aWxpb3VzL1BZXFxucHVuY3RpbGlvdXNuZXNzL01cXG5wdW5jdHVhbC9ZXFxucHVuY3R1YWxpdHkvTVxcbnB1bmN0dWF0ZS9HTkRTXFxucHVuY3R1YXRpb24vTVxcbnB1bmN0dXJlL0RTTUdcXG5wdW5kaXQvU01cXG5wdW5kaXRyeS9NXFxucHVuZ2VuY3kvTVxcbnB1bmdlbnQvWVxcbnB1bmluZXNzL01cXG5wdW5pc2gvQkxHRFNcXG5wdW5pc2hlZC9VXFxucHVuaXNoaW5nL1lcXG5wdW5pc2htZW50L01TXFxucHVuaXRpdmUvWVxcbnB1bmsvVE1SU1xcbnB1bm5lZFxcbnB1bm5ldC9TXFxucHVubmluZ1xcbnB1bnN0ZXIvU01cXG5wdW50L1pHTURSU1xcbnB1bnRlci9NXFxucHVueS9UUlBcXG5wdXAvU01cXG5wdXBhL01cXG5wdXBhZVxcbnB1cGFsXFxucHVwYXRlL0RTR1xcbnB1cGlsL01TXFxucHVwcGVkXFxucHVwcGV0L01TXFxucHVwcGV0ZWVyL1NNXFxucHVwcGV0cnkvTVxcbnB1cHBpbmdcXG5wdXBweS9TTVxcbnB1cmJsaW5kXFxucHVyY2hhc2UvRFJTTVpHQlxcbnB1cmNoYXNlci9NXFxucHVyZGFoL01cXG5wdXJlL1BZVFJcXG5wdXJlYnJlZC9TTVxcbnB1cmVlL01EU1xcbnB1cmVlaW5nXFxucHVyZW5lc3MvTVxcbnB1cmdhdGl2ZS9TTVxcbnB1cmdhdG9yaWFsXFxucHVyZ2F0b3J5L1NNXFxucHVyZ2UvTVpHRFJTXFxucHVyZ2VyL01cXG5wdXJpZmljYXRpb24vTVxcbnB1cmlmaWVyL01cXG5wdXJpZnkvTkRSU1pHXFxucHVyaW5lL01TXFxucHVyaXNtL01cXG5wdXJpc3QvTVNcXG5wdXJpc3RpY1xcbnB1cml0YW4vU01cXG5wdXJpdGFuaWNhbC9ZXFxucHVyaXRhbmlzbS9NXFxucHVyaXR5L01cXG5wdXJsL0dNRFNcXG5wdXJsaWV1L1NNXFxucHVybG9pbi9TR0RcXG5wdXJwbGUvTVRSU1xcbnB1cnBsaXNoXFxucHVycG9ydC9TTURHXFxucHVycG9ydGVkL1lcXG5wdXJwb3NlL0RTTVlHXFxucHVycG9zZWQvQVxcbnB1cnBvc2VmdWwvWVBcXG5wdXJwb3NlZnVsbmVzcy9NXFxucHVycG9zZWxlc3MvUFlcXG5wdXJyL0dNRFNcXG5wdXJzZS9NWkdEUlNcXG5wdXJzZXIvTVxcbnB1cnN1YW5jZS9NXFxucHVyc3VhbnRcXG5wdXJzdWUvWkdEUlNcXG5wdXJzdWVyL01cXG5wdXJzdWl0L1NNXFxucHVydWxlbmNlL01cXG5wdXJ1bGVudFxcbnB1cnZleS9EU0dcXG5wdXJ2ZXlhbmNlL01cXG5wdXJ2ZXlvci9TTVxcbnB1cnZpZXcvTVxcbnB1cy9NXFxucHVzaC9aR01EUlNcXG5wdXNoYmlrZS9TXFxucHVzaGNhcnQvU01cXG5wdXNoY2hhaXIvU1xcbnB1c2hlci9NXFxucHVzaGlseVxcbnB1c2hpbmVzcy9NXFxucHVzaG92ZXIvTVNcXG5wdXNocGluL1NcXG5wdXNoeS9UUlBcXG5wdXNpbGxhbmltaXR5L01cXG5wdXNpbGxhbmltb3VzL1lcXG5wdXNzL01TXFxucHVzc3kvVFJTTVxcbnB1c3N5Y2F0L01TXFxucHVzc3lmb290L0RTR1xcbnB1c3R1bGFyXFxucHVzdHVsZS9TTVxcbnB1dC9JU01cXG5wdXRhdGl2ZVxcbnB1dG91dC9NU1xcbnB1dHJlZmFjdGlvbi9NXFxucHV0cmVmYWN0aXZlXFxucHV0cmVmeS9HRFNcXG5wdXRyZXNjZW5jZS9NXFxucHV0cmVzY2VudFxcbnB1dHJpZFxcbnB1dHNjaC9NU1xcbnB1dHQvWkdNRFJTXFxucHV0dGVkL0lcXG5wdXR0ZWUvTVNcXG5wdXR0ZXIvTURSWkdcXG5wdXR0ZXJlci9NXFxucHV0dGluZy9JXFxucHV0dHkvR0RTTVxcbnB1dHovU1xcbnB1enpsZS9NWkdEUlNMXFxucHV6emxlbWVudC9NXFxucHV6emxlci9NXFxucHZ0XFxucHduL1NHRFxcbnB5ZWxvbmVwaHJpdGlzXFxucHlnbXkvU01cXG5weWxvbi9TTVxcbnB5bG9yaVxcbnB5bG9yaWNcXG5weWxvcnVzL01cXG5weW9ycmhlYS9NXFxucHlyYW1pZC9HU01EXFxucHlyYW1pZGFsXFxucHlyZS9NU1xcbnB5cmltaWRpbmUvTVNcXG5weXJpdGUvU01cXG5weXJpdGVzL01cXG5weXJvbWFuaWEvTVxcbnB5cm9tYW5pYWMvU01cXG5weXJvdGVjaG5pYy9TXFxucHlyb3RlY2huaWNhbFxcbnB5cm90ZWNobmljcy9NXFxucHlydXZhdGVcXG5weXRob24vU01cXG5weXgvTVNcXG5wemF6elxcbnFcXG5xclxcbnF0L1NcXG5xdHlcXG5xdWFcXG5xdWFjay9HTURTXFxucXVhY2tlcnkvTVxcbnF1YWQvTVNcXG5xdWFkcmFuZ2xlL1NNXFxucXVhZHJhbmd1bGFyXFxucXVhZHJhbnQvTVNcXG5xdWFkcmFwaG9uaWNcXG5xdWFkcmF0aWMvTVNcXG5xdWFkcmF0dXJlXFxucXVhZHJlbm5pYWxcXG5xdWFkcmVubml1bS9NU1xcbnF1YWRyaWNlcHMvTVNcXG5xdWFkcmlsYXRlcmFsL1NNXFxucXVhZHJpbGxlL1hNTlNcXG5xdWFkcmlsbGlvbi9NXFxucXVhZHJpcGxlZ2lhL01cXG5xdWFkcmlwbGVnaWMvU01cXG5xdWFkcml2aXVtL01cXG5xdWFkcnVwZWQvTVNcXG5xdWFkcnVwZWRhbFxcbnF1YWRydXBsZS9NR0RTXFxucXVhZHJ1cGxldC9NU1xcbnF1YWRydXBsaWNhdGUvTUdORFNcXG5xdWFkcnVwbGljYXRpb24vTVxcbnF1YWZmL0dNRFNcXG5xdWFnbWlyZS9TTVxcbnF1YWhvZy9NU1xcbnF1YWlsL0dNRFNcXG5xdWFpbnQvUFJZVFxcbnF1YWludG5lc3MvTVxcbnF1YWtlL01HRFNcXG5xdWFreVxcbnF1YWxpZmljYXRpb24vRU1cXG5xdWFsaWZpZWQvVVxcbnF1YWxpZmllci9TTVxcbnF1YWxpZnkvRUdYTkRTXFxucXVhbGl0YXRpdmUvWVxcbnF1YWxpdHkvU01cXG5xdWFsbS9NU1xcbnF1YWxtaXNoXFxucXVhbmRhcnkvU01cXG5xdWFuZ28vU1xcbnF1YW50YVxcbnF1YW50aWZpYWJsZVxcbnF1YW50aWZpY2F0aW9uL01cXG5xdWFudGlmaWVyL01cXG5xdWFudGlmeS9ORFJTWkdcXG5xdWFudGl0YXRpb25cXG5xdWFudGl0YXRpdmUvWVxcbnF1YW50aXR5L1NNXFxucXVhbnRpemF0aW9uXFxucXVhbnRpemVcXG5xdWFudHVtL01cXG5xdWFyYW50aW5lL01HRFNcXG5xdWFyay9NU1xcbnF1YXJyZWwvU1pHTURSXFxucXVhcnJlbGVyL01cXG5xdWFycmVsc29tZS9QXFxucXVhcnJlbHNvbWVuZXNzL01cXG5xdWFycnkvRFNNR1xcbnF1YXJ0L01TXFxucXVhcnRlci9TR01EWVxcbnF1YXJ0ZXJiYWNrL0dNRFNcXG5xdWFydGVyZGVjay9NU1xcbnF1YXJ0ZXJmaW5hbC9TTVxcbnF1YXJ0ZXJseS9TTVxcbnF1YXJ0ZXJtYXN0ZXIvTVNcXG5xdWFydGVyc3RhZmYvTVxcbnF1YXJ0ZXJzdGF2ZXNcXG5xdWFydGV0L1NNXFxucXVhcnRvL01TXFxucXVhcnR6L01cXG5xdWFzYXIvTVNcXG5xdWFzaC9HRFNcXG5xdWFzaVxcbnF1YXRyYWluL01TXFxucXVhdmVyL01EU0dcXG5xdWF2ZXJ5XFxucXVheS9NU1xcbnF1YXlzaWRlL1NcXG5xdWVhc2lseVxcbnF1ZWFzaW5lc3MvTVxcbnF1ZWFzeS9UUFJcXG5xdWVlbi9HTURZU1xcbnF1ZWVubHkvUlRcXG5xdWVlci9QVEdNRFJZU1xcbnF1ZWVybmVzcy9NXFxucXVlbGwvR0RTXFxucXVlbmNoL1pHRFJTQlxcbnF1ZW5jaGFibGUvVVxcbnF1ZW5jaGVyL01cXG5xdWVuY2hsZXNzXFxucXVlcnVsb3VzL1lQXFxucXVlcnVsb3VzbmVzcy9NXFxucXVlcnkvRFNNR1xcbnF1ZXNcXG5xdWVzYWRpbGxhL01TXFxucXVlc3QvSUZBTVNcXG5xdWVzdGVkXFxucXVlc3RpbmdcXG5xdWVzdGlvbi9TTURSWkdCSlxcbnF1ZXN0aW9uYWJsZS9VXFxucXVlc3Rpb25hYmx5L1VcXG5xdWVzdGlvbmVkL1VcXG5xdWVzdGlvbmVyL01cXG5xdWVzdGlvbmluZy9NWVxcbnF1ZXN0aW9ubmFpcmUvU01cXG5xdWV1ZSdzXFxucXVldWUvQ0RTXFxucXVldWluZ1xcbnF1aWJibGUvRFJTTVpHXFxucXVpYmJsZXIvTVxcbnF1aWNoZS9TTVxcbnF1aWNrL01OUllYVFBcXG5xdWlja2VuL0RHXFxucXVpY2tmaXJlXFxucXVpY2tpZS9TTVxcbnF1aWNrbGltZS9NXFxucXVpY2tuZXNzL01cXG5xdWlja3NhbmQvTVNcXG5xdWlja3NpbHZlci9NXFxucXVpY2tzdGVwL01TXFxucXVpZC9NU1xcbnF1aWVzY2VuY2UvTVxcbnF1aWVzY2VudC9ZXFxucXVpZXQvU01ETlJZWFRHUFxcbnF1aWV0ZW4vREdcXG5xdWlldGlzbVxcbnF1aWV0bmVzcy9NXFxucXVpZXR1ZGUvSUVNXFxucXVpZXR1cy9NU1xcbnF1aWZmL1NcXG5xdWlsbC9TTVxcbnF1aWx0L1NNRFJaR1xcbnF1aWx0ZXIvTVxcbnF1aWx0aW5nL01cXG5xdWluL1NcXG5xdWluY2UvU01cXG5xdWluZS9TXFxucXVpbmlkaW5lXFxucXVpbmluZS9NXFxucXVpbm9hXFxucXVpbnN5L01cXG5xdWludC9TTVxcbnF1aW50ZXNzZW5jZS9TTVxcbnF1aW50ZXNzZW50aWFsL1lcXG5xdWludGV0L1NNXFxucXVpbnR1cGxlL01HRFNcXG5xdWludHVwbGV0L01TXFxucXVpcC9NU1xcbnF1aXBwZWRcXG5xdWlwcGluZ1xcbnF1aXBzdGVyL1NNXFxucXVpcmUnc1xcbnF1aXJlL0lBU1xcbnF1aXJrL1NNREdcXG5xdWlya2luZXNzL01cXG5xdWlya3kvUlRQXFxucXVpcnQvU01cXG5xdWlzbGluZy9TTVxcbnF1aXQvU1xcbnF1aXRjbGFpbS9NU1xcbnF1aXRlXFxucXVpdHRhbmNlL01cXG5xdWl0dGVyL1NNXFxucXVpdHRpbmdcXG5xdWl2ZXIvU01ER1xcbnF1aXZlcnlcXG5xdWl4b3RpY1xcbnF1aXhvdGljYWxseVxcbnF1aXovTVxcbnF1aXp6ZWRcXG5xdWl6emVyL1NNXFxucXVpenplc1xcbnF1aXp6aWNhbC9ZXFxucXVpenppbmdcXG5xdW8vSFxcbnF1b2luL1NNXFxucXVvaXQvU01ER1xcbnF1b25kYW1cXG5xdW9yYXRlL0lcXG5xdW9ydW0vU01cXG5xdW90L0JcXG5xdW90YS9TTVxcbnF1b3RhYmlsaXR5L01cXG5xdW90YXRpb24vU01cXG5xdW90ZSdzXFxucXVvdGUvVURTR1xcbnF1b3RpZGlhblxcbnF1b3RpZW50L1NNXFxucXdlcnR5XFxuci9TXFxucmFiYmV0L0dNRFNcXG5yYWJiaS9TTVxcbnJhYmJpbmF0ZS9NXFxucmFiYmluaWNcXG5yYWJiaW5pY2FsXFxucmFiYml0L0dNRFNcXG5yYWJibGUvTVNcXG5yYWJpZC9QWVxcbnJhYmlkbmVzcy9NXFxucmFiaWVzL01cXG5yYWNjb29uL01TXFxucmFjZS9NWkdEUlNcXG5yYWNlY291cnNlL1NNXFxucmFjZWdvZXIvU1xcbnJhY2Vob3JzZS9NU1xcbnJhY2VtZS9NU1xcbnJhY2VyL01cXG5yYWNldHJhY2svTVNcXG5yYWNld2F5L01TXFxucmFjaWFsL1lcXG5yYWNpYWxpc20vTVxcbnJhY2lhbGlzdC9NU1xcbnJhY2lseVxcbnJhY2luZXNzL01cXG5yYWNpbmcvTVxcbnJhY2lzbS9NXFxucmFjaXN0L1NNXFxucmFjay9HTURTXFxucmFja2V0L1NNREdcXG5yYWNrZXRlZXIvU01ER1xcbnJhY2tldGVlcmluZy9NXFxucmFjb250ZXVyL1NNXFxucmFjcXVldGJhbGwvU01cXG5yYWN5L1BSVFxcbnJhZC9TTVxcbnJhZGFyL1NNXFxucmFkYXJzY29wZS9TTVxcbnJhZGRsZWRcXG5yYWRpYWwvU01ZXFxucmFkaWFuL1NcXG5yYWRpYW5jZS9NXFxucmFkaWFudC9ZXFxucmFkaWF0ZS9EU0dOWFxcbnJhZGlhdGlvbi9NXFxucmFkaWF0b3IvU01cXG5yYWRpY2FsL1NNWVxcbnJhZGljYWxpc20vTVxcbnJhZGljYWxpemF0aW9uL01cXG5yYWRpY2FsaXplL0RTR1xcbnJhZGljY2hpby9NXFxucmFkaWlcXG5yYWRpby9NREdTXFxucmFkaW9hY3RpdmUvWVxcbnJhZGlvYWN0aXZpdHkvTVxcbnJhZGlvY2FyYm9uL01cXG5yYWRpb2dyYW0vTVNcXG5yYWRpb2dyYXBoZXIvU01cXG5yYWRpb2dyYXBoeS9NXFxucmFkaW9pc290b3BlL01TXFxucmFkaW9sb2dpc3QvU01cXG5yYWRpb2xvZ3kvTVxcbnJhZGlvbWFuL01cXG5yYWRpb21lblxcbnJhZGlvbWV0ZXIvTVNcXG5yYWRpb21ldHJpY1xcbnJhZGlvbWV0cnkvTVxcbnJhZGlvcGhvbmUvU01cXG5yYWRpb3Njb3B5L01cXG5yYWRpb3NvbmRlL1NNXFxucmFkaW9zdXJnZXJ5XFxucmFkaW90ZWxlZ3JhcGgvTVxcbnJhZGlvdGVsZWdyYXBoc1xcbnJhZGlvdGVsZWdyYXBoeS9NXFxucmFkaW90ZWxlcGhvbmUvTVNcXG5yYWRpb3RoZXJhcGlzdC9NU1xcbnJhZGlvdGhlcmFweS9NXFxucmFkaXNoL01TXFxucmFkaXVtL01cXG5yYWRpdXMvTVxcbnJhZG9uL01cXG5yYWZmaWEvTVxcbnJhZmZpc2gvWVBcXG5yYWZmaXNobmVzcy9NXFxucmFmZmxlL0RTTUdcXG5yYWZ0L1pHTURSU1xcbnJhZnRlci9NXFxucmFmdGluZy9NXFxucmFnL1NHTURcXG5yYWdhL01TXFxucmFnYW11ZmZpbi9NU1xcbnJhZ2JhZy9NXFxucmFnZS9NU1xcbnJhZ2dhXFxucmFnZ2VkL1JZVFBcXG5yYWdnZWRuZXNzL01cXG5yYWdnZWR5L1JUXFxucmFnZ2luZ1xcbnJhZ2luZy9ZXFxucmFnbGFuL1NNXFxucmFnb3V0L1NNXFxucmFndGFnL1NcXG5yYWd0aW1lL01cXG5yYWd3ZWVkL01cXG5yYWd3b3J0XFxucmFoXFxucmFpZC9aR01EUlNcXG5yYWlkZXIvTVxcbnJhaWwnc1xcbnJhaWwvQ0dEU1xcbnJhaWxjYXJkL1NcXG5yYWlsaW5nL1NNXFxucmFpbGxlcnkvU01cXG5yYWlscm9hZC9TWkdNRFJcXG5yYWlscm9hZGVyL01cXG5yYWlscm9hZGluZy9NXFxucmFpbHdheS9TTVxcbnJhaWx3YXltYW5cXG5yYWlsd2F5bWVuXFxucmFpbWVudC9NXFxucmFpbi9HTURTXFxucmFpbmJvdy9TTVxcbnJhaW5jb2F0L1NNXFxucmFpbmRyb3AvU01cXG5yYWluZmFsbC9TTVxcbnJhaW5tYWtlci9TTVxcbnJhaW5tYWtpbmcvTVxcbnJhaW5wcm9vZlxcbnJhaW5zdG9ybS9NU1xcbnJhaW53YXRlci9NXFxucmFpbnkvUlRcXG5yYWlzZS9NWkdEUlNcXG5yYWlzZXIvTVxcbnJhaXNpbi9TTVxcbnJhamFoL01cXG5yYWphaHNcXG5yYWtlL01HRFNcXG5yYWtpc2gvWVBcXG5yYWtpc2huZXNzL01cXG5yYWxseS9EU01HXFxucmFtL1NNXFxucmFtYmxlL0RSU01aR0pcXG5yYW1ibGVyL01cXG5yYW1idW5jdGlvdXMvUFlcXG5yYW1idW5jdGlvdXNuZXNzL01cXG5yYW1la2luL1NNXFxucmFtaWUvTVxcbnJhbWlmaWNhdGlvbi9NXFxucmFtaWZ5L0RTWE5HXFxucmFtamV0L1NNXFxucmFtbWVkXFxucmFtbWluZ1xcbnJhbXAvR01TXFxucmFtcGFnZS9EU01HXFxucmFtcGFuY3kvTVxcbnJhbXBhbnQvWVxcbnJhbXBhcnQvU01cXG5yYW1yb2QvU01cXG5yYW1yb2RkZWRcXG5yYW1yb2RkaW5nXFxucmFtc2hhY2tsZVxcbnJhbi9BXFxucmFuY2gvTURSU1pHXFxucmFuY2hlci9NXFxucmFuY2hpbmcvTVxcbnJhbmNpZC9QXFxucmFuY2lkaXR5L01cXG5yYW5jaWRuZXNzL01cXG5yYW5jb3IvTVxcbnJhbmNvcm91cy9ZXFxucmFuZC9NXFxucmFuZGluZXNzL01cXG5yYW5kb20vUFNZXFxucmFuZG9taXphdGlvbi9NXFxucmFuZG9taXplL0RTR1xcbnJhbmRvbW5lc3MvTVNcXG5yYW5keS9SVFBcXG5yYW5lZS9NU1xcbnJhbmcvWlJcXG5yYW5nZSdzXFxucmFuZ2UvQ0dEU1xcbnJhbmdlZmluZGVyL1NcXG5yYW5nZXIvTVxcbnJhbmdpbmVzcy9NXFxucmFuZ3kvUlRQXFxucmFuay9UR0pQTURSWVNcXG5yYW5raW5nL01cXG5yYW5rbGUvRFNHXFxucmFua25lc3MvTVxcbnJhbnNhY2svU0dEXFxucmFuc29tL1NaR01EUlxcbnJhbnNvbWVyL01cXG5yYW5zb213YXJlXFxucmFudC9aR01ESlJTXFxucmFudGVyL01cXG5yYXAvU1pHTURSXFxucmFwYWNpb3VzL1BZXFxucmFwYWNpb3VzbmVzcy9NXFxucmFwYWNpdHkvTVxcbnJhcGUvTVNcXG5yYXBlci9NXFxucmFwZXNlZWQvTVxcbnJhcGlkL1BNUllUU1xcbnJhcGlkaXR5L01cXG5yYXBpZG5lc3MvTVxcbnJhcGllci9TTVxcbnJhcGluZS9NXFxucmFwaXN0L1NNXFxucmFwcGVkXFxucmFwcGVsL1NNXFxucmFwcGVsbGVkXFxucmFwcGVsbGluZ1xcbnJhcHBlci9TTVxcbnJhcHBpbmdcXG5yYXBwb3J0L01TXFxucmFwcG9ydGV1ci9TXFxucmFwcHJvY2hlbWVudC9TTVxcbnJhcHNjYWxsaW9uL01TXFxucmFwdC9ZUFxcbnJhcHRuZXNzL01cXG5yYXB0b3IvU1xcbnJhcHR1cmUvTVNcXG5yYXB0dXJvdXMvWVxcbnJhcmUvWVRHUERSU1xcbnJhcmViaXQvTVNcXG5yYXJlZmFjdGlvbi9NXFxucmFyZWZ5L0dEU1xcbnJhcmVuZXNzL01cXG5yYXJpdHkvU01cXG5yYXNjYWwvU01ZXFxucmFzaC9aVE1SU1lQXFxucmFzaGVyL01cXG5yYXNobmVzcy9NXFxucmFzcC9HTURTXFxucmFzcGJlcnJ5L1NNXFxucmFzcHkvUlRcXG5yYXN0ZXJcXG5yYXQvU01cXG5yYXRhdG91aWxsZS9NXFxucmF0YmFnL1NcXG5yYXRjaGV0L0dNRFNcXG5yYXRlL0pYTVpHTkRSU1xcbnJhdGVkL1VcXG5yYXRlcGF5ZXIvU1xcbnJhdGVyL01cXG5yYXRoZXJcXG5yYXRoc2tlbGxlci9TTVxcbnJhdGlmaWNhdGlvbi9NXFxucmF0aWZpZXIvTVxcbnJhdGlmeS9ORFJTWkdcXG5yYXRpbmcvTVxcbnJhdGlvL01TXFxucmF0aW9jaW5hdGUvR05EU1xcbnJhdGlvY2luYXRpb24vTVxcbnJhdGlvbi9NREdcXG5yYXRpb25hbC9TTVlcXG5yYXRpb25hbGUvTVNcXG5yYXRpb25hbGlzbS9NXFxucmF0aW9uYWxpc3QvU01cXG5yYXRpb25hbGlzdGljXFxucmF0aW9uYWxpdHkvTVxcbnJhdGlvbmFsaXphdGlvbi9NU1xcbnJhdGlvbmFsaXplL0RTR1xcbnJhdGxpa2VcXG5yYXRsaW5lL1NNXFxucmF0dGFuL1NNXFxucmF0dGVkXFxucmF0dGVyL1NNXFxucmF0dGluZ1xcbnJhdHRsZS9EUlNNWkdKXFxucmF0dGxlYnJhaW4vU01EXFxucmF0dGxlci9NXFxucmF0dGxlc25ha2UvU01cXG5yYXR0bGV0cmFwL1NNXFxucmF0dGx5XFxucmF0dHJhcC9TTVxcbnJhdHR5L1JUXFxucmF1Y291cy9ZUFxcbnJhdWNvdXNuZXNzL01cXG5yYXVuY2hpbHlcXG5yYXVuY2hpbmVzcy9NXFxucmF1bmNoeS9UUlBcXG5yYXZhZ2UvRFJTTVpHXFxucmF2YWdlci9NXFxucmF2YWdlcy9NXFxucmF2ZS9KTVpHRFJTXFxucmF2ZWwnc1xcbnJhdmVsL1VEU0dcXG5yYXZlbGluZy9TXFxucmF2ZW4vTURTR1xcbnJhdmVub3VzL1lcXG5yYXZpbmUvU01cXG5yYXZpbmcvTVxcbnJhdmlvbGkvU01cXG5yYXZpc2gvRFJTWkdMXFxucmF2aXNoZXIvTVxcbnJhdmlzaGluZy9ZXFxucmF2aXNobWVudC9NXFxucmF3L1BUTVJcXG5yYXdib25lZFxcbnJhd2hpZGUvTVxcbnJhd25lc3MvTVxcbnJheS9TTVxcbnJheW9uL01cXG5yYXplL0dEU1xcbnJhem9yL01TXFxucmF6b3JiYWNrL01TXFxucmF6ei9HTURTXFxucmF6em1hdGF6ei9NXFxucmNwdFxcbnJkXFxucmUvRFNNWVRHVkpcXG5yZWFjaC9NRFNHQlxcbnJlYWNoYWJsZS9VXFxucmVhY3F1aXJlL0RTR1xcbnJlYWN0L1ZcXG5yZWFjdGFuY2VcXG5yZWFjdGFudC9TTVxcbnJlYWN0aW9uYXJ5L1NNXFxucmVhY3Rpdml0eVxcbnJlYWQvWkdNUkJKU1xcbnJlYWRhYmlsaXR5L1NNXFxucmVhZGVyL01cXG5yZWFkZXJzaGlwL1NNXFxucmVhZGlseVxcbnJlYWRpbmVzcy9NXFxucmVhZGluZy9NXFxucmVhZG1pdHRlZFxcbnJlYWRvdXQvU01cXG5yZWFkeS9EUlNUR1BcXG5yZWFmZm9yZXN0YXRpb25cXG5yZWFsL1RNUllQU1xcbnJlYWxpc20vTVxcbnJlYWxpc3QvU01cXG5yZWFsaXN0aWMvVVxcbnJlYWxpc3RpY2FsbHkvVVxcbnJlYWxpdGllc1xcbnJlYWxpdHkvVU1cXG5yZWFsaXphdGlvbi9NU1xcbnJlYWxpemUvRFNCR1xcbnJlYWxpemVkL1VcXG5yZWFsbS9NU1xcbnJlYWxuZXNzL01cXG5yZWFscG9saXRpay9NXFxucmVhbHR5L01cXG5yZWFtL1pHTURSU1xcbnJlYW1lci9NXFxucmVhcC9aR0RSU1xcbnJlYXBlci9NXFxucmVhci9HTURTXFxucmVhcmd1YXJkL01TXFxucmVhcm1vc3RcXG5yZWFyd2FyZC9TXFxucmVhc29uL1NNRFJaR0JcXG5yZWFzb25hYmxlL1VQXFxucmVhc29uYWJsZW5lc3MvVU1cXG5yZWFzb25hYmx5L1VcXG5yZWFzb25lci9NXFxucmVhc29uaW5nL01cXG5yZWFzc3VyaW5nL1lcXG5yZWJhdGUvTVxcbnJlYmVsL01TXFxucmViZWxsaW9uL01TXFxucmViZWxsaW91cy9ZUFxcbnJlYmVsbGlvdXNuZXNzL01cXG5yZWJpZC9TXFxucmViaWRkaW5nXFxucmViaXJ0aC9NXFxucmVib2lsL1NER1xcbnJlYnVpbGQvU0dcXG5yZWJ1a2UvRFNNR1xcbnJlYnVraW5nL1lcXG5yZWJ1dHRhbC9NU1xcbnJlYydkXFxucmVjL01cXG5yZWNhbGNpdHJhbmNlL01cXG5yZWNhbGNpdHJhbnRcXG5yZWNhbnQvU0RHXFxucmVjYW50YXRpb24vU01cXG5yZWNhcC9NU1xcbnJlY2FwaXRhbGl6YXRpb25cXG5yZWNjZS9TXFxucmVjZFxcbnJlY2VpcHQvU01ER1xcbnJlY2VpdmFibGVzL01cXG5yZWNlaXZlL0RSU1pHQlxcbnJlY2VpdmVyL01cXG5yZWNlaXZlcnNoaXAvTVxcbnJlY2VudC9SWVRQXFxucmVjZW50bmVzcy9NXFxucmVjZXB0YWNsZS9TTVxcbnJlY2VwdGlvbi9NU1xcbnJlY2VwdGlvbmlzdC9TTVxcbnJlY2VwdGl2ZS9QWVxcbnJlY2VwdGl2ZW5lc3MvTVxcbnJlY2VwdGl2aXR5L01cXG5yZWNlcHRvci9TTVxcbnJlY2Vzcy9NRFNHVlxcbnJlY2Vzc2lvbmFsL1NNXFxucmVjZXNzaW9uYXJ5XFxucmVjZXNzaXZlL1NNXFxucmVjaGVyY2hlXFxucmVjaWRpdmlzbS9NXFxucmVjaWRpdmlzdC9TTVxcbnJlY2lwZS9TTVxcbnJlY2lwaWVudC9TTVxcbnJlY2lwcm9jYWwvU01ZXFxucmVjaXByb2NhdGUvR05EU1xcbnJlY2lwcm9jYXRpb24vTVxcbnJlY2lwcm9jaXR5L01cXG5yZWNpdGFsL1NNXFxucmVjaXRhbGlzdC9NU1xcbnJlY2l0YXRpdmUvTVNcXG5yZWNpdGVyL1NNXFxucmVja2xlc3MvWVBcXG5yZWNrbGVzc25lc3MvTVxcbnJlY2tvbi9TSkRHXFxucmVja29uaW5nL01cXG5yZWNsYW1hdGlvbi9NXFxucmVjbGluZS9EUlNaR1xcbnJlY2xpbmVyL01cXG5yZWNsdXNlL1NNVlxcbnJlY29nbml6YWJsZS9VXFxucmVjb2duaXphYmx5L1VcXG5yZWNvZ25pemUvRFJTR0JcXG5yZWNvZ25pemVkL1VcXG5yZWNvbWJpbmF0aW9uXFxucmVjb21wZW5zZS9EU01HXFxucmVjb21waWxhdGlvblxcbnJlY29tcGlsZS9HRFxcbnJlY29uL1NcXG5yZWNvbmNpbGUvR0RTQlxcbnJlY29uY2lsaWF0aW9uL1NcXG5yZWNvbmRpdGVcXG5yZWNvbmZpZ3VyYXRpb25cXG5yZWNvbmZpZ3VyZS9EXFxucmVjb25uYWlzc2FuY2UvTVNcXG5yZWNvbm5vaXRlci9ER1NcXG5yZWNvbnN0cnVjdC9WXFxucmVjb25zdHJ1Y3RlZC9VXFxucmVjb3JkZWQvVVxcbnJlY29yZGVyL01TXFxucmVjb3JkaW5nL01TXFxucmVjb3VwL0RHXFxucmVjb3Vyc2UvTVxcbnJlY292ZXJhYmxlL1VcXG5yZWNvdmVyeS9TTVxcbnJlY3JlYW50L01TXFxucmVjcmVhdGlvbmFsXFxucmVjcmltaW5hdGUvRFNHTlhcXG5yZWNyaW1pbmF0aW9uL01cXG5yZWNyaW1pbmF0b3J5XFxucmVjcnVkZXNjZS9HRFNcXG5yZWNydWRlc2NlbmNlL01cXG5yZWNydWRlc2NlbnRcXG5yZWNydWl0L0xTTURSWkdcXG5yZWNydWl0ZXIvTVxcbnJlY3J1aXRtZW50L01cXG5yZWN0YWwvWVxcbnJlY3RhbmdsZS9NU1xcbnJlY3Rhbmd1bGFyXFxucmVjdGlmaWFibGVcXG5yZWN0aWZpY2F0aW9uL01cXG5yZWN0aWZpZXIvTVxcbnJlY3RpZnkvWE5EUlNaR1xcbnJlY3RpbGluZWFyXFxucmVjdGl0dWRlL01cXG5yZWN0by9NU1xcbnJlY3Rvci9TTVxcbnJlY3RvcnkvU01cXG5yZWN0dW0vU01cXG5yZWN1bWJlbnRcXG5yZWN1cGVyYXRlL0dOVkRTXFxucmVjdXBlcmF0aW9uL01cXG5yZWN1ci9TXFxucmVjdXJyZWRcXG5yZWN1cnJlbmNlL1NNXFxucmVjdXJyaW5nXFxucmVjdXJzaW9uL1NcXG5yZWN1c2UvRFNHXFxucmVjeWNsYWJsZS9TTVxcbnJlY3ljbGluZy9NXFxucmVkL1BTTVxcbnJlZGFjdC9TREdcXG5yZWRhY3Rpb24vTVxcbnJlZGFjdG9yL1NNXFxucmVkYmlyZC9TTVxcbnJlZGJyZWFzdC9NU1xcbnJlZGJyaWNrXFxucmVkY2FwL1NNXFxucmVkY29hdC9TTVxcbnJlZGN1cnJhbnQvU1xcbnJlZGRlbi9TREdcXG5yZWRkZXJcXG5yZWRkZXN0XFxucmVkZGlzaFxcbnJlZGVlbS9SWkJcXG5yZWRlZW1lci9NXFxucmVkZW1wdGlvbi9NXFxucmVkZW1wdGl2ZVxcbnJlZGhlYWQvU01EXFxucmVkaXJlY3Rpb25cXG5yZWRpc3RyaWN0L0dEXFxucmVkaXZpZGUvR0RTXFxucmVkbGluaW5nL01cXG5yZWRuZWNrL1NNXFxucmVkbmVzcy9NXFxucmVkby9HXFxucmVkb2xlbmNlL01cXG5yZWRvbGVudFxcbnJlZG91YnQvU0JNXFxucmVkb3VidGFibHlcXG5yZWRvdW5kL1NER1xcbnJlZHJhdy9TR1xcbnJlZHNraW4vU01cXG5yZWR1Y2UvRFJTWkdcXG5yZWR1Y2VyL01cXG5yZWR1Y2libGVcXG5yZWR1Y3Rhc2UvTVxcbnJlZHVjdGlvbi9TTVxcbnJlZHVjdGlvbmlzdFxcbnJlZHVjdGl2ZVxcbnJlZHVuZGFuY3kvU01cXG5yZWR1bmRhbnQvWVxcbnJlZHdvb2QvU01cXG5yZWR5ZS9EU1xcbnJlZWRpbmVzcy9NXFxucmVlZHkvUlRQXFxucmVlZi9aR01EUlNcXG5yZWVmZXIvTVxcbnJlZWsvR01EU1xcbnJlZWwnc1xcbnJlZWwvVUdEU1xcbnJlZXZlL0dcXG5yZWV4cG9ydC9TREdcXG5yZWYvU1pNXFxucmVmYXNoaW9uL0RHU1xcbnJlZmVjdGlvbi9NXFxucmVmZWN0b3J5L1NNXFxucmVmZXIvQlxcbnJlZmVyZWUvRFNNXFxucmVmZXJlZWluZ1xcbnJlZmVyZW5jZS9NR0RTXFxucmVmZXJlbmR1bS9NU1xcbnJlZmVyZW50L1NNXFxucmVmZXJlbnRpYWxcXG5yZWZlcnJhbC9TTVxcbnJlZmVycmVkXFxucmVmZXJyZXIvU01cXG5yZWZlcnJpbmdcXG5yZWZmZWRcXG5yZWZmaW5nXFxucmVmaWxsL0JNXFxucmVmaW5lZC9VXFxucmVmaW5lbWVudC9TTVxcbnJlZmluZXIvU01cXG5yZWZpbmVyeS9TXFxucmVmaXR0aW5nXFxucmVmbGF0ZS9YRFNHTlxcbnJlZmxhdGlvbmFyeVxcbnJlZmxlY3QvR1ZTRFxcbnJlZmxlY3Rpb24vTVNcXG5yZWZsZWN0aXZlL1lcXG5yZWZsZWN0aXZpdHlcXG5yZWZsZWN0b3IvTVNcXG5yZWZsZXhpdmUvU01ZXFxucmVmbGV4aXZpdHlcXG5yZWZsZXhvbG9neVxcbnJlZm9yZ2UvRFNHXFxucmVmb3JtL01aXFxucmVmb3JtYXQvVlxcbnJlZm9ybWF0b3J5L1NNXFxucmVmb3JtYXR0aW5nXFxucmVmb3JtZWQvVVxcbnJlZm9ybWlzdC9TXFxucmVmb3J0aWZ5L0dEU1xcbnJlZnJhY3QvU0dWRFxcbnJlZnJhY3Rpb24vTVxcbnJlZnJhY3RvcnkvU01cXG5yZWZyYWluL1NHTURcXG5yZWZyZXNoL1pHTERSU1xcbnJlZnJlc2hlci9NXFxucmVmcmVzaGluZy9ZXFxucmVmcmVzaG1lbnQvU01cXG5yZWZyZXNobWVudHMvTVxcbnJlZnJpZ2VyYW50L1NNXFxucmVmcmlnZXJhdGUvRFNHTlxcbnJlZnJpZ2VyYXRpb24vTVxcbnJlZnJpZ2VyYXRvci9NU1xcbnJlZnVnZS9TTVxcbnJlZnVnZWUvU01cXG5yZWZ1bGdlbmNlL01cXG5yZWZ1bGdlbnRcXG5yZWZ1bmQvQlxcbnJlZnVyYmlzaG1lbnQvTVNcXG5yZWZ1c2FsL01TXFxucmVmdXRhdGlvbi9NU1xcbnJlZnV0ZS9CRFJTWkdcXG5yZWZ1dGVyL01cXG5yZWdcXG5yZWdhbC9EWUdcXG5yZWdhbGVtZW50L01cXG5yZWdhbGlhL01cXG5yZWdhcmQvRVNNREdcXG5yZWdhcmRsZXNzXFxucmVnYXJkcy9NXFxucmVnYXRoZXIvREdTXFxucmVnYXR0YS9TTVxcbnJlZ2VuY3kvU01cXG5yZWdlbmVyYWN5L01cXG5yZWdlbmVyYXRlL1ZcXG5yZWdleC9NXFxucmVnZXhwL1NcXG5yZWdnYWUvTVxcbnJlZ2ljaWRhbFxcbnJlZ2ljaWRlL01TXFxucmVnaW1lL1NNXFxucmVnaW1lbi9TTVxcbnJlZ2ltZW50L01ER1NcXG5yZWdpbWVudGFsXFxucmVnaW1lbnRhdGlvbi9NXFxucmVnaW9uL1NNXFxucmVnaW9uYWwvWVxcbnJlZ2lvbmFsaXNtL01TXFxucmVnaXN0ZXIvR01EU1xcbnJlZ2lzdGVyZWQvVVxcbnJlZ2lzdHJhbnQvTVNcXG5yZWdpc3RyYXIvTVNcXG5yZWdpc3RyYXRpb24vU01cXG5yZWdpc3RyeS9TTVxcbnJlZ25hbnRcXG5yZWdyZXNzL01EU0dWXFxucmVncmVzc2lvbi9NU1xcbnJlZ3JldC9TTVxcbnJlZ3JldGZ1bC9ZXFxucmVncmV0dGFibGVcXG5yZWdyZXR0YWJseVxcbnJlZ3JldHRlZFxcbnJlZ3JldHRpbmdcXG5yZWdyaW5kL0dTXFxucmVncm91bmRcXG5yZWdyb3VwL0RHU1xcbnJlZ3VsYXIvTVlTXFxucmVndWxhcml0eS9TTVxcbnJlZ3VsYXJpemF0aW9uL01cXG5yZWd1bGFyaXplL0RTR1xcbnJlZ3VsYXRlL0NEU0dOVlxcbnJlZ3VsYXRlZC9VXFxucmVndWxhdGlvbi9DTVxcbnJlZ3VsYXRpb25zXFxucmVndWxhdG9yL01TXFxucmVndWxhdG9yeVxcbnJlZ3VyZ2l0YXRlL0RTR05cXG5yZWd1cmdpdGF0aW9uL01cXG5yZWhhYi9NU1xcbnJlaGFiYmVkXFxucmVoYWJiaW5nXFxucmVoYWJpbGl0YXRlL0dOVkRTXFxucmVoYWJpbGl0YXRpb24vTVxcbnJlaGFuZy9TREdcXG5yZWhlYXJzL0dEXFxucmVoZWFyc2FsL01TXFxucmVoZWFyc2VkL1VcXG5yZWhpXFxucmVodW5nXFxucmVpZnkvTkRTR1xcbnJlaWduL01EU0dcXG5yZWltYnVyc2UvQkRTR0xcXG5yZWltYnVyc2VtZW50L01TXFxucmVpbi9HRFxcbnJlaW5kZWVyL01cXG5yZWluZm9yY2UvTEdEU1xcbnJlaW5mb3JjZW1lbnQvU01cXG5yZWluaXRpYWxpemVcXG5yZWluc3RhbGwvREdcXG5yZWluc3RhdGVtZW50L01cXG5yZWluc3VyYW5jZVxcbnJlaXRlcmF0ZS9WXFxucmVqZWN0L0dTTURcXG5yZWplY3Rpb24vU01cXG5yZWpvaWNlL0pHRFNcXG5yZWpvaWNpbmcvTVxcbnJlam9pbmRlci9TTVxcbnJlanV2ZW5hdGUvRFNHTlxcbnJlanV2ZW5hdGlvbi9NXFxucmVsXFxucmVsYXRlL0RSU0JYWkdOVlxcbnJlbGF0ZWRuZXNzL01cXG5yZWxhdGVyL01cXG5yZWxhdGlvbi9NXFxucmVsYXRpb25hbFxcbnJlbGF0aW9uc2hpcC9NU1xcbnJlbGF0aXZlL01ZU1xcbnJlbGF0aXZpc20vTVxcbnJlbGF0aXZpc3QvU1xcbnJlbGF0aXZpc3RpY1xcbnJlbGF0aXZpdHkvTVxcbnJlbGF4L0RSU1pHXFxucmVsYXhhbnQvTVNcXG5yZWxheGF0aW9uL1NNXFxucmVsYXhlci9NXFxucmVsYXkvRFxcbnJlbGVhc2UvQlxcbnJlbGVhc2VkL1VcXG5yZWxlZ2F0ZS9HTkRTXFxucmVsZW50L1NHRFxcbnJlbGVudGxlc3MvUFlcXG5yZWxlbnRsZXNzbmVzcy9NXFxucmVsZXZhbmNlL01cXG5yZWxldmFuY3kvTVxcbnJlbGV2YW50L1lcXG5yZWxpYWJpbGl0eS9VTVxcbnJlbGlhYmxlL1VcXG5yZWxpYWJseS9VXFxucmVsaWFuY2UvTVxcbnJlbGlhbnRcXG5yZWxpYy9NU1xcbnJlbGllZi9TTVxcbnJlbGlldmUvWkdEUlNcXG5yZWxpZXZlci9NXFxucmVsaWdpb24vU01cXG5yZWxpZ2lvc2l0eVxcbnJlbGlnaW91cy9NWVBcXG5yZWxpZ2lvdXNuZXNzL01cXG5yZWxpbmUvRFNHXFxucmVsaW5xdWlzaC9MRFNHXFxucmVsaW5xdWlzaG1lbnQvTVxcbnJlbGlxdWFyeS9TTVxcbnJlbGlzaC9HTURTXFxucmVsaXN0L1NHRFxcbnJlbG9jYXRlL0JcXG5yZWx1Y3RhbmNlL01cXG5yZWx1Y3RhbnQvWVxcbnJlbHkvR0RTXFxucmVtL01cXG5yZW1haW4vU0dEXFxucmVtYWluZGVyL0dNRFNcXG5yZW1hbmQvU0dEXFxucmVtYXBwaW5nXFxucmVtYXJrL0JcXG5yZW1hcmthYmxlbmVzcy9NXFxucmVtYXJrYWJseVxcbnJlbWFya2VkL1VcXG5yZW1lZGlhYmxlXFxucmVtZWR5L0dEU01cXG5yZW1lbWJlci9ER1xcbnJlbWVtYmVyZWQvVVxcbnJlbWVtYnJhbmNlL01TXFxucmVtaW5kZXIvTVxcbnJlbWluaXNjZS9HRFNcXG5yZW1pbmlzY2VuY2UvTVNcXG5yZW1pbmlzY2VudC9ZXFxucmVtaXNzL1BZXFxucmVtaXNzbmVzcy9NXFxucmVtaXQvU1xcbnJlbWl0dGFuY2UvU01cXG5yZW1pdHRlZFxcbnJlbWl0dGluZy9VXFxucmVtaXgvRFNHXFxucmVtbmFudC9NU1xcbnJlbW9kZWwvR0RTXFxucmVtb2xkL1NHRFxcbnJlbW9uc3RyYW50L1NNXFxucmVtb25zdHJhdGUvRFNHXFxucmVtb3JzZS9NXFxucmVtb3JzZWZ1bC9ZXFxucmVtb3JzZWxlc3MvUFlcXG5yZW1vcnNlbGVzc25lc3MvTVxcbnJlbW90ZS9SU01ZVFBcXG5yZW1vdGVuZXNzL01cXG5yZW1vdmFsL1NNXFxucmVtdW5lcmF0ZS9HTlZYRFNcXG5yZW11bmVyYXRpb24vTVxcbnJlbmFpc3NhbmNlL01TXFxucmVuYWxcXG5yZW5hc2NlbmNlL1NcXG5yZW5kL0dTXFxucmVuZGVyL1NHTURKXFxucmVuZGVyaW5nL01cXG5yZW5kZXp2b3VzL0dNRFNcXG5yZW5kaXRpb24vTVNcXG5yZW5lZ2FkZS9EU01HXFxucmVuZWdlL0RSU1pHXFxucmVuZWdlci9NXFxucmVuZXcvRFNCR1xcbnJlbmV3YWwvTVNcXG5yZW5uZXQvTVxcbnJlbm5pbi9NXFxucmVub3VuY2UvTERTR1xcbnJlbm91bmNlbWVudC9NXFxucmVub3ZhdGUvRFNYR05cXG5yZW5vdmF0aW9uL01cXG5yZW5vdmF0b3IvTVNcXG5yZW5vd24vTURcXG5yZW50L1pHTURSU1xcbnJlbnRhbC9TTVxcbnJlbnRlci9NXFxucmVudW5jaWF0aW9uL1NNXFxucmVvcGVuL1NER1xcbnJlb3JnL01EU0dcXG5yZXAvU01cXG5yZXBhaW50L0dEU1xcbnJlcGFpci9CWlJcXG5yZXBhaXJlci9NXFxucmVwYWlybWFuL01cXG5yZXBhaXJtZW5cXG5yZXBhcmFibGVcXG5yZXBhcmF0aW9uL01TXFxucmVwYXJhdGlvbnMvTVxcbnJlcGFydGVlL01cXG5yZXBhdHJpYXRlL1hEU01HTlxcbnJlcGF0cmlhdGlvbi9NXFxucmVwZWF0L1NNRFJaR0JcXG5yZXBlYXRhYmlsaXR5XFxucmVwZWF0YWJsZS9VXFxucmVwZWF0YWJseVxcbnJlcGVhdGVkL1lcXG5yZXBlYXRlci9NXFxucmVwZWF0aW5nL01cXG5yZXBlbC9TXFxucmVwZWxsZWRcXG5yZXBlbGxlbnQvU01cXG5yZXBlbGxpbmdcXG5yZXBlbnQvU0RHXFxucmVwZW50YW5jZS9NXFxucmVwZW50YW50L1lcXG5yZXBlcmN1c3Npb24vU1xcbnJlcGVydG9pcmUvTVNcXG5yZXBlcnRvcnkvU01cXG5yZXBldGl0aW9uL01TXFxucmVwZXRpdGlvdXMvWVBcXG5yZXBldGl0aW91c25lc3MvTVxcbnJlcGV0aXRpdmUvWVBcXG5yZXBldGl0aXZlbmVzcy9NXFxucmVwaG90b2dyYXBoL0RHXFxucmVwbGFjZWFibGVcXG5yZXBsYW50L0dTRFxcbnJlcGxlbmlzaC9MR0RTXFxucmVwbGVuaXNobWVudC9NXFxucmVwbGV0ZS9QRFNHTlxcbnJlcGxldGVuZXNzL01cXG5yZXBsZXRpb24vTVxcbnJlcGxpY2EvU01cXG5yZXBsaWNhdGUvRFNHTlhcXG5yZXBsaWNhdGlvbi9NXFxucmVwbGljYXRvci9TXFxucmVwb3J0YWdlL01cXG5yZXBvcnRlZC9ZXFxucmVwb3J0b3JpYWxcXG5yZXBvc2VmdWxcXG5yZXBvc2l0aW9uXFxucmVwb3NpdG9yeS9TTVxcbnJlcHJlaGVuZC9ER1NcXG5yZXByZWhlbnNpYmlsaXR5L01cXG5yZXByZWhlbnNpYmxlXFxucmVwcmVoZW5zaWJseVxcbnJlcHJlaGVuc2lvbi9NXFxucmVwcmVzZW50L0dEU1xcbnJlcHJlc2VudGF0aW9uYWxcXG5yZXByZXNlbnRhdGl2ZS9NU1xcbnJlcHJlc2VudGVkL1VcXG5yZXByZXNzaW9uL01TXFxucmVwcmVzc2l2ZS9QWVxcbnJlcHJpZXZlL0RTTUdcXG5yZXByaW1hbmQvR1NNRFxcbnJlcHJpc2FsL1NNXFxucmVwcmlzZS9TTUdcXG5yZXByb2FjaC9HTURTQlxcbnJlcHJvYWNoZnVsL1lcXG5yZXByb2JhdGUvTVNcXG5yZXByb2R1Y3RpdmVcXG5yZXByb2dyYW1taW5nXFxucmVwcm92aW5nL1lcXG5yZXB0aWxlL1NNXFxucmVwdGlsaWFuL01TXFxucmVwdWJsaWMvU1xcbnJlcHVibGljYW5pc20vTVxcbnJlcHVkaWF0ZS9YR05EU1xcbnJlcHVkaWF0aW9uL01cXG5yZXB1ZGlhdG9yL01TXFxucmVwdWduYW5jZS9NXFxucmVwdWduYW50XFxucmVwdWxzaW9uL01cXG5yZXB1bHNpdmUvWVBcXG5yZXB1bHNpdmVuZXNzL01cXG5yZXB1cmNoYXNlL0dEU1xcbnJlcHV0YWJpbGl0eS9NXFxucmVwdXRhYmx5L0VcXG5yZXB1dGF0aW9uL01TXFxucmVwdXRlL0RTTUdCXFxucmVwdXRlZC9ZXFxucmVxdWVzdC9HRFJcXG5yZXF1aWVtL1NNXFxucmVxdWlyZS9MREdcXG5yZXF1aXJlbWVudC9NU1xcbnJlcXVpc2l0ZS9YTU5TXFxucmVxdWlzaXRpb24vR01EXFxucmVxdWl0YWwvTVxcbnJlcXVpdGUvRFJTWkdcXG5yZXF1aXRlZC9VXFxucmVxdWl0ZXIvTVxcbnJlcmVhZC9TR1xcbnJlcmVjb3JkL0dEU1xcbnJlcnVubmluZ1xcbnJlc2FtcGxlL0dEU1xcbnJlc2F0XFxucmVzY2luZC9TREdcXG5yZXNjaXNzaW9uL01cXG5yZXNjdWUvRFJTTVpHXFxucmVzY3Vlci9NXFxucmVzZWFsL0JcXG5yZXNlbWJsZS9EU0dcXG5yZXNlbmRcXG5yZXNlbnQvTFNER1xcbnJlc2VudGZ1bC9ZUFxcbnJlc2VudGZ1bG5lc3MvTVxcbnJlc2VudG1lbnQvTVNcXG5yZXNlcnBpbmUvTVxcbnJlc2VydmF0aW9uL01TXFxucmVzZXJ2ZWQvVVlcXG5yZXNlcnZlZG5lc3MvTVxcbnJlc2VydmlzdC9TTVxcbnJlc2Vydm9pci9TTVxcbnJlc2V0dGluZ1xcbnJlc2hpcHBpbmdcXG5yZXNpZGVuY2UvU01cXG5yZXNpZGVuY3kvU01cXG5yZXNpZGVudC9NU1xcbnJlc2lkZW50aWFsXFxucmVzaWR1YVxcbnJlc2lkdWFsL01TXFxucmVzaWR1ZS9TTVxcbnJlc2lkdXVtL01cXG5yZXNpZ25hdGlvbi9TTVxcbnJlc2lnbmVkL1lcXG5yZXNpbGllbmNlL01cXG5yZXNpbGllbmN5L01cXG5yZXNpbGllbnQvWVxcbnJlc2lub3VzXFxucmVzaXN0L1NNRFJaR1xcbnJlc2lzdGFuY2UvU01cXG5yZXNpc3RhbnQvVVxcbnJlc2lzdGlibGVcXG5yZXNpc3Rpdml0eVxcbnJlc2lzdGxlc3NcXG5yZXNpc3Rvci9NU1xcbnJlc2l0L1NcXG5yZXNpdHRpbmdcXG5yZXNvbGRcXG5yZXNvbGUvRFNHXFxucmVzb2x1dGUvUFlcXG5yZXNvbHV0ZW5lc3MvTVxcbnJlc29sdmUvUkJNXFxucmVzb2x2ZWQvVVxcbnJlc29uYW5jZS9TTVxcbnJlc29uYW50L1lcXG5yZXNvbmF0ZS9HRFNcXG5yZXNvbmF0b3IvU01cXG5yZXNvcnB0aW9uL01cXG5yZXNvdW5kL1NHRFxcbnJlc291bmRpbmcvWVxcbnJlc291cmNlZnVsL1lQXFxucmVzb3VyY2VmdWxuZXNzL01cXG5yZXNwXFxucmVzcGVjdC9FU0dWTURcXG5yZXNwZWN0YWJpbGl0eS9NXFxucmVzcGVjdGFibGVcXG5yZXNwZWN0YWJseVxcbnJlc3BlY3RmdWwvRVlcXG5yZXNwZWN0ZnVsbmVzcy9NXFxucmVzcGVjdGl2ZS9ZXFxucmVzcGVsbC9TR0RcXG5yZXNwaXJhdGlvbi9NXFxucmVzcGlyYXRvci9TTVxcbnJlc3BpcmF0b3J5XFxucmVzcGlyZS9ER1xcbnJlc3BsZW5kZW5jZS9NXFxucmVzcGxlbmRlbnQvWVxcbnJlc3BvbmQvU0dEXFxucmVzcG9uZGVudC9TTVxcbnJlc3BvbnNlL01TXFxucmVzcG9uc2liaWxpdHkvU01cXG5yZXNwb25zaWJsZVxcbnJlc3BvbnNpYmx5XFxucmVzcG9uc2l2ZS9VWVBcXG5yZXNwb25zaXZlbmVzcy9VTVxcbnJlc3QvR1ZNRFNcXG5yZXN0YXRlL0dEU1xcbnJlc3RhdXJhbnQvU01cXG5yZXN0YXVyYXRldXIvTVNcXG5yZXN0ZnVsL1lQXFxucmVzdGZ1bGxlclxcbnJlc3RmdWxsZXN0XFxucmVzdGZ1bG5lc3MvTVxcbnJlc3RpdHV0aW9uL01cXG5yZXN0aXZlL1lQXFxucmVzdGl2ZW5lc3MvTVxcbnJlc3RsZXNzL1BZXFxucmVzdGxlc3NuZXNzL01cXG5yZXN0b3JhdGlvbi9TTVxcbnJlc3RvcmF0aXZlL1NNXFxucmVzdG9yZXIvU01cXG5yZXN0cmFpbmVkL1VcXG5yZXN0cmFpbnQvTVNcXG5yZXN0cmljdC9TREdWXFxucmVzdHJpY3RlZC9VXFxucmVzdHJpY3Rpb24vTVNcXG5yZXN0cmljdGl2ZS9ZUFxcbnJlc3RyaWN0aXZlbmVzcy9NXFxucmVzdHJpbmcvU0dcXG5yZXN0cm9vbS9TTVxcbnJlc3RydWN0dXJpbmcvU01cXG5yZXN1bHQvR1NNRFxcbnJlc3VsdGFudC9TTVxcbnJlc3VtZS9EU01HXFxucmVzdW1wdGlvbi9NU1xcbnJlc3VwcGx5L0RTR1xcbnJlc3VyZ2VuY2UvTVNcXG5yZXN1cmdlbnRcXG5yZXN1cnJlY3QvR1NEXFxucmVzdXJyZWN0aW9uL01TXFxucmVzdXNjaXRhdGUvR05EU1xcbnJlc3VzY2l0YXRpb24vTVxcbnJlc3VzY2l0YXRvci9TTVxcbnJldGFpbGVyL01TXFxucmV0YWluL1NEUlpHXFxucmV0YWluZXIvTVxcbnJldGFrZS9HXFxucmV0YWxpYXRlL0RTR05WWFxcbnJldGFsaWF0aW9uL01cXG5yZXRhbGlhdG9yeVxcbnJldGFyZC9TTURSWkdcXG5yZXRhcmRhbnQvU01cXG5yZXRhcmRhdGlvbi9NXFxucmV0YXJkZXIvTVxcbnJldGNoL0RTR1xcbnJldGVhY2gvR1NcXG5yZXRlbnRpb24vTVxcbnJldGVudGl2ZS9ZUFxcbnJldGVudGl2ZW5lc3MvTVxcbnJldGhpbmsvU0dNXFxucmV0aG91Z2h0XFxucmV0aWNlbmNlL01cXG5yZXRpY2VudC9ZXFxucmV0aWN1bGF0ZWRcXG5yZXRpY3VsYXRpb24vTVNcXG5yZXRpY3VsdW1cXG5yZXRpbmEvU01cXG5yZXRpbmFsXFxucmV0aW5vYmxhc3RvbWFcXG5yZXRpbnVlL1NNXFxucmV0aXJlZS9TTVxcbnJldGlyZW1lbnQvTVNcXG5yZXRvcnQvR01EXFxucmV0cmFjZS9HRFNcXG5yZXRyYWN0L0RCR1xcbnJldHJhY3RpbGVcXG5yZXRyYWN0aW9uL1NcXG5yZXRyYWluL0RHU1xcbnJldHJlYWQvRFxcbnJldHJlbmNobWVudC9NU1xcbnJldHJpYnV0aW9uL01TXFxucmV0cmlidXRpdmVcXG5yZXRyaWV2YWwvU01cXG5yZXRyaWV2ZS9EUlNNWkdCXFxucmV0cmlldmVyL01cXG5yZXRyby9NU1xcbnJldHJvYWN0aXZlL1lcXG5yZXRyb2ZpcmUvR0RTXFxucmV0cm9maXQvU01cXG5yZXRyb2ZpdHRlZFxcbnJldHJvZml0dGluZ1xcbnJldHJvZ3JhZGUvRFNHXFxucmV0cm9ncmVzcy9HVkRTXFxucmV0cm9ncmVzc2lvbi9NXFxucmV0cm9yb2NrZXQvTVNcXG5yZXRyb3NwZWN0L01EU0dWXFxucmV0cm9zcGVjdGlvbi9NXFxucmV0cm9zcGVjdGl2ZS9NWVNcXG5yZXRyb3ZpcnVzL01TXFxucmV0c2luYS9NXFxucmV0dXJuYWJsZS9TTVxcbnJldHVybmVlL1NNXFxucmV2L1pWTVxcbnJldmFtcGluZy9NXFxucmV2ZWFsL0dKU0RcXG5yZXZlYWxlZC9VXFxucmV2ZWFsaW5nL1lcXG5yZXZlaWxsZS9NXFxucmV2ZWwvSk1EUlNaR1xcbnJldmVsYXRpb24vU01cXG5yZXZlbGF0b3J5XFxucmV2ZWxlci9NXFxucmV2ZWxyeS9TTVxcbnJldmVuZ2UvTUdEU1xcbnJldmVudWVyL1NNXFxucmV2ZXJiXFxucmV2ZXJiZXJhdGUvRFNHTlhcXG5yZXZlcmJlcmF0aW9uL01cXG5yZXZlcmUvRFNHXFxucmV2ZXJlbmNlL0RTTUdcXG5yZXZlcmVuZC9TTVxcbnJldmVyZW50L1lcXG5yZXZlcmVudGlhbC9ZXFxucmV2ZXJpZS9NU1xcbnJldmVycy9NXFxucmV2ZXJzYWwvU01cXG5yZXZlcnNlL1lcXG5yZXZlcnNpYmlsaXR5XFxucmV2ZXJzaWJsZVxcbnJldmVyc2libHlcXG5yZXZlcnQvR1NEXFxucmV2ZXJ0aWJsZVxcbnJldmV0bWVudC9TTVxcbnJldmlsZS9EUlNMWkdcXG5yZXZpbGVtZW50L01cXG5yZXZpbGVyL01cXG5yZXZpc2VyL01TXFxucmV2aXNpb24vU01cXG5yZXZpc2lvbmlzbS9NXFxucmV2aXNpb25pc3QvU01cXG5yZXZpdmFsL01TXFxucmV2aXZhbGlzbS9NXFxucmV2aXZhbGlzdC9TTVxcbnJldml2ZS9EU0dcXG5yZXZpdmlmaWNhdGlvbi9NXFxucmV2b2NhYmxlXFxucmV2b2tlL0RTR1xcbnJldm9sdC9HRFxcbnJldm9sdGluZy9ZXFxucmV2b2x1dGlvbi9TTVxcbnJldm9sdXRpb25hcnkvU01cXG5yZXZvbHV0aW9uaXN0L1NNXFxucmV2b2x1dGlvbml6ZS9EU0dcXG5yZXZvbHZlL0JaR0RSU1xcbnJldm9sdmVyL01cXG5yZXZ1ZS9NU1xcbnJldnVsc2lvbi9NXFxucmV2dmVkXFxucmV2dmluZ1xcbnJld2FyZGVkL1VcXG5yZXdhcmRpbmcvVVxcbnJld2FybS9HU0RcXG5yZXdhc2gvR0RTXFxucmV3ZWF2ZS9HU1xcbnJld2VkZGluZ1xcbnJld2luZC9NQlxcbnJld291bmRcXG5yZXdyaXRlL01HU1xcbnJoYXBzb2RpY1xcbnJoYXBzb2RpY2FsXFxucmhhcHNvZGl6ZS9HRFNcXG5yaGFwc29keS9TTVxcbnJoZWEvTVNcXG5yaGVuaXVtL01cXG5yaGVvc3RhdC9TTVxcbnJoZXN1cy9NU1xcbnJoZXRvcmljL01cXG5yaGV0b3JpY2FsL1lcXG5yaGV0b3JpY2lhbi9TTVxcbnJoZXVtL01cXG5yaGV1bWF0aWMvTVNcXG5yaGV1bWF0aWNhbGx5XFxucmhldW1hdGlzbS9NXFxucmhldW1hdG9pZFxcbnJoZXVteVxcbnJoaW5lc3RvbmUvU01cXG5yaGluaXRpcy9NXFxucmhpbm8vTVNcXG5yaGlub2Nlcm9zL01TXFxucmhpbm9wbGFzdHlcXG5yaGlub3ZpcnVzL01TXFxucmhpem9tZS9NU1xcbnJoby9TTVxcbnJob2RpdW0vTVxcbnJob2RvZGVuZHJvbi9TTVxcbnJob21ib2lkL1NNXFxucmhvbWJvaWRhbFxcbnJob21idXMvTVNcXG5yaHViYXJiL01TXFxucmh5bWUvTVpHRFJTXFxucmh5bWVyL01cXG5yaHltZXN0ZXIvTVNcXG5yaHl0aG0vU01cXG5yaHl0aG1pY1xcbnJoeXRobWljYWwvWVxcbnJpYWwvTVNcXG5yaWIvU01cXG5yaWJhbGRcXG5yaWJhbGRyeS9NXFxucmliYmVkXFxucmliYmVyL1NNXFxucmliYmluZ1xcbnJpYmJvbi9TTVxcbnJpYm9mbGF2aW4vTVxcbnJpY2UvTVpHRFJTXFxucmljZXIvTVxcbnJpY2gvVE1SU1lQXFxucmljaG5lc3MvTVxcbnJpY2svR01EU1xcbnJpY2tldHMvTVxcbnJpY2tldHkvUlRcXG5yaWNrcmFjay9NXFxucmlja3NoYXcvTVNcXG5yaWNvY2hldC9HTURTXFxucmljb3R0YS9NXFxucmlkL1NcXG5yaWRkYW5jZS9NXFxucmlkZGVuXFxucmlkZGluZ1xcbnJpZGRsZS9EU01HXFxucmlkZS9NWkdSU1xcbnJpZGVyL01cXG5yaWRlcmxlc3NcXG5yaWRlcnNoaXAvTVxcbnJpZGdlL01HRFNcXG5yaWRnZXBvbGUvU01cXG5yaWRneVxcbnJpZGljdWxlL01HRFNcXG5yaWRpY3Vsb3VzL1lQXFxucmlkaWN1bG91c25lc3MvTVxcbnJpZGluZy9NXFxucmlmZS9UUlxcbnJpZmYvR01EU1xcbnJpZmZsZS9EU01HXFxucmlmZnJhZmYvTVxcbnJpZmxlL01aR0RSU1xcbnJpZmxlbWFuL01cXG5yaWZsZW1lblxcbnJpZmxlci9NXFxucmlmbGluZy9NXFxucmlmdC9HTURTXFxucmlnL1NNXFxucmlnYXRvbmkvTVxcbnJpZ2dlZFxcbnJpZ2dlci9TTVxcbnJpZ2dpbmcvTVxcbnJpZ2h0L01EUllTUFRHXFxucmlnaHRlb3VzL1VQXFxucmlnaHRlb3VzbHlcXG5yaWdodGVvdXNuZXNzL1VNXFxucmlnaHRmdWwvUFlcXG5yaWdodGZ1bG5lc3MvTVxcbnJpZ2h0aXNtL01cXG5yaWdodGlzdC9TTVxcbnJpZ2h0bW9zdFxcbnJpZ2h0bmVzcy9NXFxucmlnaHRvXFxucmlnaHRzaXplL0RTR1xcbnJpZ2h0d2FyZC9TXFxucmlnaWQvWVBcXG5yaWdpZGl0eS9NXFxucmlnaWRuZXNzL01cXG5yaWdtYXJvbGUvTVNcXG5yaWdvci9NU1xcbnJpZ29yb3VzL1lQXFxucmlnb3JvdXNuZXNzL01cXG5yaWxlL0dEU1xcbnJpbGwvTVNcXG5yaW0vU0dNRFxcbnJpbWUvTVNcXG5yaW1sZXNzXFxucmltbWVkXFxucmltbWluZ1xcbnJpbmQvTVNcXG5yaW5nL1pHTURSSlxcbnJpbmdlci9NXFxucmluZ2dpdC9NU1xcbnJpbmdsZWFkZXIvTVNcXG5yaW5nbGV0L01TXFxucmluZ2xpa2VcXG5yaW5nbWFzdGVyL01TXFxucmluZ3NpZGUvTVxcbnJpbmd0b25lL1NNXFxucmluZ3dvcm0vTVxcbnJpbmsvTVNcXG5yaW5zZS9NR0RTXFxucmlvdC9aR01EUlNcXG5yaW90ZXIvTVxcbnJpb3RpbmcvTVxcbnJpb3RvdXMvUFlcXG5yaXAvU1hUTU5SXFxucmlwYXJpYW5cXG5yaXBjb3JkL01TXFxucmlwZS9ZUFxcbnJpcGVuL0RHXFxucmlwZW5lZC9VXFxucmlwZW5lc3MvTVxcbnJpcG9mZi9TTVxcbnJpcG9zdGUvTUdEU1xcbnJpcHBlZFxcbnJpcHBlci9TTVxcbnJpcHBpbmdcXG5yaXBwbGUvRFNNR1xcbnJpcHBseVxcbnJpcHNhdy9TTVxcbnJpcHRpZGUvTVNcXG5yaXNlL0pNWkdSU1xcbnJpc2VuXFxucmlzZXIvTVxcbnJpc2liaWxpdHkvTVxcbnJpc2libGVcXG5yaXNpbmcvTVxcbnJpc2svR01EU1xcbnJpc2tpbHlcXG5yaXNraW5lc3MvTVxcbnJpc2t5L1JQVFxcbnJpc290dG8vTVNcXG5yaXNxdWVcXG5yaXNzb2xlL1NcXG5yaXRlL01TXFxucml0dWFsL1NNWVxcbnJpdHVhbGlzbS9NXFxucml0dWFsaXN0aWNcXG5yaXR1YWxpc3RpY2FsbHlcXG5yaXR1YWxpemVkXFxucml0enkvUlRcXG5yaXYvWk5SXFxucml2YWwvTURTR1xcbnJpdmFsZWQvVVxcbnJpdmFscnkvU01cXG5yaXZlL0NHRFNcXG5yaXZlci9NXFxucml2ZXJiYW5rL1NNXFxucml2ZXJiZWQvTVNcXG5yaXZlcmJvYXQvU01cXG5yaXZlcmZyb250XFxucml2ZXJzaWRlL01TXFxucml2ZXQvTURSU1pHXFxucml2ZXRlci9NXFxucml2aWVyYS9TXFxucml2dWxldC9NU1xcbnJpeWFsL01TXFxucm1cXG5yb2FjaC9HTURTXFxucm9hZC9JTVNcXG5yb2FkYmVkL1NNXFxucm9hZGJsb2NrL01EU0dcXG5yb2FkaG91c2UvU01cXG5yb2FkaWUvTVNcXG5yb2Fka2lsbC9NXFxucm9hZHJ1bm5lci9TTVxcbnJvYWRzaG93L1NNXFxucm9hZHNpZGUvU01cXG5yb2Fkc3Rlci9TTVxcbnJvYWR3YXkvU01cXG5yb2Fkd29yay9TTVxcbnJvYWR3b3J0aHlcXG5yb2FtL1pHRFJTXFxucm9hbWVyL01cXG5yb2FtaW5nL01cXG5yb2FuL01TXFxucm9hci9aR01EUlNcXG5yb2FyZXIvTVxcbnJvYXJpbmcvTVxcbnJvYXN0L1pHTURSU0pcXG5yb2FzdGVyL01cXG5yb2FzdGluZy9NXFxucm9iL1NcXG5yb2JiZWRcXG5yb2JiZXIvTVNcXG5yb2JiZXJ5L1NNXFxucm9iYmluZ1xcbnJvYmUnc1xcbnJvYmUvRUdEU1xcbnJvYmluL01TXFxucm9ib2NhbGwvU0dNRFxcbnJvYm90L01TXFxucm9ib3RpYy9TXFxucm9ib3RpY3MvTVxcbnJvYm90aXplL0dEU1xcbnJvYnVzdC9SWVBUXFxucm9idXN0bmVzcy9NXFxucm9jay9aR01EUlNcXG5yb2NrYWJpbGx5L01cXG5yb2NrYm91bmRcXG5yb2NrZXIvTVxcbnJvY2tlcnkvU1xcbnJvY2tldC9NRFNHXFxucm9ja2V0cnkvTVxcbnJvY2tmYWxsL1NNXFxucm9ja2luZXNzL01cXG5yb2NreS9UUlBcXG5yb2NvY28vTVxcbnJvZC9TTVxcbnJvZGVcXG5yb2RlbnQvTVNcXG5yb2Rlby9NU1xcbnJvZS9TTVxcbnJvZWJ1Y2svU01cXG5yb2VudGdlbi9NU1xcbnJvZ2VyL0dEU1xcbnJvZ3VlJ3NcXG5yb2d1ZS9LU1xcbnJvZ3VlcnkvTVxcbnJvZ3Vpc2gvWVBcXG5yb2d1aXNobmVzcy9NXFxucm9pbC9HRFNcXG5yb2lzdGVyL1pHRFJTXFxucm9pc3RlcmVyL01cXG5yb2xlL01TXFxucm9sbC9NRFJaR0pTXFxucm9sbGJhY2svU01cXG5yb2xsZXIvTVxcbnJvbGxlcmJsYWRpbmdcXG5yb2xsZXJza2F0aW5nL01cXG5yb2xsaWNrL1NER1xcbnJvbGxpY2tpbmcvTVxcbnJvbGxtb3AvU1xcbnJvbGxvdmVyL1NNXFxucm9tYWluZS9NU1xcbnJvbWFuL01cXG5yb21hbmNlL01aR0RSU1xcbnJvbWFuY2VyL01cXG5yb21hbnRpYy9NU1xcbnJvbWFudGljYWxseVxcbnJvbWFudGljaXNtL01cXG5yb21hbnRpY2lzdC9TTVxcbnJvbWFudGljaXplL0RTR1xcbnJvbWVvL01TXFxucm9tcC9NRFJaR1NcXG5yb21wZXIvTVxcbnJvbmRvL1NNXFxucm9vZC9NU1xcbnJvb2YvTURSWkdTXFxucm9vZmVyL01cXG5yb29maW5nL01cXG5yb29mbGVzc1xcbnJvb2Z0b3AvU01cXG5yb29rL01ER1NcXG5yb29rZXJ5L1NNXFxucm9va2llL1NNXFxucm9vbS9NRFJaR1NcXG5yb29tZXIvTVxcbnJvb21ldHRlL1NNXFxucm9vbWZ1bC9TTVxcbnJvb21pbmVzcy9NXFxucm9vbW1hdGUvU01cXG5yb29teS9SVFBcXG5yb29zdC9TTURSWkdcXG5yb29zdGVyL01cXG5yb290L01EUlpHU1xcbnJvb3Rlci9NXFxucm9vdGtpdC9TTVxcbnJvb3RsZXNzL1BcXG5yb290bGV0L1NNXFxucm9wZS9NWkdEUlNcXG5yb3Blci9NXFxucm9weS9SVFxcbnJvc2FyeS9TTVxcbnJvc2UvTVNcXG5yb3NlYXRlXFxucm9zZWJ1ZC9TTVxcbnJvc2VidXNoL01TXFxucm9zZW1hcnkvTVxcbnJvc2V0dGUvU01cXG5yb3Nld2F0ZXIvTVxcbnJvc2V3b29kL01TXFxucm9zaWx5XFxucm9zaW4vU01ER1xcbnJvc2luZXNzL01cXG5yb3N0ZXIvU01cXG5yb3N0cnVtL01TXFxucm9zeS9SVFBcXG5yb3QvU01cXG5yb3RhL1NcXG5yb3RhcnkvU01cXG5yb3RhdGUvRFNHTlhcXG5yb3RhdGlvbi9NXFxucm90YXRpb25hbFxcbnJvdGF0b3J5XFxucm90ZS9NXFxucm90Z3V0L01cXG5yb3Rpc3NlcmllL1NNXFxucm90b2dyYXZ1cmUvTVNcXG5yb3Rvci9TTVxcbnJvdG90aWxsZXIvTVNcXG5yb3R0ZWRcXG5yb3R0ZW4vVFBSWVxcbnJvdHRlbm5lc3MvTVxcbnJvdHRlci9TXFxucm90dGluZ1xcbnJvdHR3ZWlsZXIvU1xcbnJvdHVuZC9QXFxucm90dW5kYS9NU1xcbnJvdHVuZGl0eS9NXFxucm90dW5kbmVzcy9NXFxucm91ZS9NU1xcbnJvdWdlL0RTTUdcXG5yb3VnaC9NRE5SWVhUR1BcXG5yb3VnaGFnZS9NXFxucm91Z2hjYXN0XFxucm91Z2hlbi9HRFxcbnJvdWdoaG91c2UvTUdEU1xcbnJvdWdobmVjay9HTURTXFxucm91Z2huZXNzL01cXG5yb3VnaHNcXG5yb3VnaHNob2RcXG5yb3VsZXR0ZS9NXFxucm91bmQvUFNNRFJZWlRHXFxucm91bmRhYm91dC9TTVxcbnJvdW5kZWwvU1xcbnJvdW5kZWxheS9NU1xcbnJvdW5kaG91c2UvU01cXG5yb3VuZGlzaFxcbnJvdW5kbmVzcy9NXFxucm91bmR1cC9NU1xcbnJvdW5kd29ybS9TTVxcbnJvdXNlL0RTR1xcbnJvdXN0L1NER1xcbnJvdXN0YWJvdXQvU01cXG5yb3V0L01SWlNcXG5yb3V0ZSdzXFxucm91dGUvQURTR1xcbnJvdXRlaW5nXFxucm91dGVyL01cXG5yb3V0aW5lL01ZU1xcbnJvdXRpbml6ZS9HRFNcXG5yb3V4XFxucm92ZS9aR0RSU1xcbnJvdmVyL01cXG5yb3cvU1pHTURSXFxucm93YW4vU1xcbnJvd2JvYXQvTVNcXG5yb3dkaWx5XFxucm93ZGluZXNzL01cXG5yb3dkeS9QUlNNVFxcbnJvd2R5aXNtL01cXG5yb3dlbC9TTURHXFxucm93ZXIvTVxcbnJvd2luZy9NXFxucm93bG9jay9TXFxucm95YWwvU01ZXFxucm95YWxpc3QvU01cXG5yb3lhbHRpZXMvTVxcbnJveWFsdHkvU01cXG5ycG1cXG5ycHNcXG5ydFxcbnJ0ZVxcbnJ1Yi9TTVxcbnJ1YmF0by9TTVxcbnJ1YmJlZFxcbnJ1YmJlci9TTVxcbnJ1YmJlcml6ZS9HRFNcXG5ydWJiZXJuZWNrL01EUlNaR1xcbnJ1YmJlcm5lY2tlci9NXFxucnViYmVyeVxcbnJ1YmJpbmcvU1xcbnJ1YmJpc2gvTURTR1xcbnJ1YmJpc2h5XFxucnViYmxlL01cXG5ydWJkb3duL1NNXFxucnViZS9NU1xcbnJ1YmVsbGEvTVxcbnJ1YmljdW5kXFxucnViaWRpdW0vTVxcbnJ1YmxlL1NNXFxucnVicmljL1NNXFxucnVieS9SU01UXFxucnVjaGVkXFxucnVjay9ER1NcXG5ydWNrc2Fjay9NU1xcbnJ1Y2t1cy9NU1xcbnJ1Y3Rpb25zXFxucnVkZGVyL1NNXFxucnVkZGVybGVzc1xcbnJ1ZGRpbmVzcy9NXFxucnVkZHkvUlRQXFxucnVkZS9ZVFJQXFxucnVkZW5lc3MvTVxcbnJ1ZGltZW50L1NNXFxucnVkaW1lbnRhcnlcXG5ydWUvRFNNR1xcbnJ1ZWZ1bC9QWVxcbnJ1ZWZ1bG5lc3MvTVxcbnJ1ZmYvTURZR1NcXG5ydWZmaWFuL01ZU1xcbnJ1ZmZsZS9EU01HXFxucnVmZmxlZC9VXFxucnVnL1NNXFxucnVnYnkvTVxcbnJ1Z2dlZC9QVFJZXFxucnVnZ2VkbmVzcy9NXFxucnVnZ2VyXFxucnVncmF0L1NNXFxucnVpbi9NREdTXFxucnVpbmF0aW9uL01cXG5ydWlub3VzL1lcXG5ydWxlL01aR0pEUlNcXG5ydWxlci9NXFxucnVsaW5nL01cXG5ydW0vU01cXG5ydW1iYS9TTURHXFxucnVtYmxlL0RTSk1HXFxucnVtYmxpbmcvTVxcbnJ1bWJ1c3Rpb3VzXFxucnVtaW5hbnQvTVNcXG5ydW1pbmF0ZS9YR05WRFNcXG5ydW1pbmF0aW9uL01cXG5ydW1pbmF0aXZlL1lcXG5ydW1tYWdlL0RTTUdcXG5ydW1tZXJcXG5ydW1tZXN0XFxucnVtbXkvTVxcbnJ1bW9yL1NNREdcXG5ydW1vcm1vbmdlci9TTVxcbnJ1bXAvTVlTXFxucnVtcGxlL0RTTUdcXG5ydW1wdXMvTVNcXG5ydW4vQVNNXFxucnVuYWJvdXQvTVNcXG5ydW5hcm91bmQvU01cXG5ydW5hd2F5L01TXFxucnVuZG93bi9TTVxcbnJ1bmUvTVNcXG5ydW5nL01TXFxucnVuaWNcXG5ydW5sZXQvU01cXG5ydW5uZWwvU01cXG5ydW5uZXIvU01cXG5ydW5uaW5nL01cXG5ydW5ueS9SVFxcbnJ1bm9mZi9TTVxcbnJ1bnQvTVNcXG5ydW50aW1lXFxucnVudHkvUlRcXG5ydW53YXkvU01cXG5ydXBlZS9TTVxcbnJ1cGlhaC9NXFxucnVwaWFoc1xcbnJ1cHR1cmUvTUdEU1xcbnJ1cmFsXFxucnVzZS9NU1xcbnJ1c2gvTURSU1pHXFxucnVzaGVyL01cXG5ydXNoeVxcbnJ1c2svTVNcXG5ydXNzZXQvU01cXG5ydXN0L01ER1NcXG5ydXN0aWMvU01cXG5ydXN0aWNhbGx5XFxucnVzdGljYXRlL0dEU1xcbnJ1c3RpY2F0aW9uL01cXG5ydXN0aWNpdHkvTVxcbnJ1c3RpbmVzcy9NXFxucnVzdGxlL0RSU0pNWkdcXG5ydXN0bGVyL01cXG5ydXN0cHJvb2YvU0RHXFxucnVzdHkvUlBOVFxcbnJ1dC9TTVxcbnJ1dGFiYWdhL1NNXFxucnV0aGVuaXVtL01cXG5ydXRoZXJmb3JkaXVtL01cXG5ydXRobGVzcy9ZUFxcbnJ1dGhsZXNzbmVzcy9NXFxucnV0dGVkXFxucnV0dGluZ1xcbnJ1dHR5L1JUXFxucnllL01cXG5zL05ZWEJcXG5zYWJiYXRoL01cXG5zYWJiYXRoc1xcbnNhYmJhdGljYWwvU01cXG5zYWJlci9NU1xcbnNhYmxlL01TXFxuc2Fib3QvTVNcXG5zYWJvdGFnZS9EU01HXFxuc2Fib3RldXIvU01cXG5zYWJyYS9NU1xcbnNhYy9TTVxcbnNhY2NoYXJpbi9NXFxuc2FjY2hhcmluZVxcbnNhY2VyZG90YWxcXG5zYWNoZW0vU01cXG5zYWNoZXQvU01cXG5zYWNrL1pHTURSSlNcXG5zYWNrY2xvdGgvTVxcbnNhY2tlci9NXFxuc2Fja2Z1bC9NU1xcbnNhY2tpbmcvTVxcbnNhY3JhXFxuc2FjcmFtZW50L01TXFxuc2FjcmFtZW50YWxcXG5zYWNyZWQvWVBcXG5zYWNyZWRuZXNzL01cXG5zYWNyaWZpY2UvRFNNR1xcbnNhY3JpZmljaWFsL1lcXG5zYWNyaWxlZ2UvTVNcXG5zYWNyaWxlZ2lvdXMvWVxcbnNhY3Jpc3Rhbi9NU1xcbnNhY3Jpc3R5L1NNXFxuc2Fjcm9pbGlhYy9NU1xcbnNhY3Jvc2FuY3QvUFxcbnNhY3Jvc2FuY3RuZXNzL01cXG5zYWNydW0vTVxcbnNhZC9QWVxcbnNhZGRlbi9TREdcXG5zYWRkZXJcXG5zYWRkZXN0XFxuc2FkZGxlJ3NcXG5zYWRkbGUvVURTR1xcbnNhZGRsZWJhZy9NU1xcbnNhZGRsZXIvU1xcbnNhZGRsZXJ5XFxuc2FkZXNcXG5zYWRodS9TXFxuc2FkaXNtL01cXG5zYWRpc3QvU01cXG5zYWRpc3RpY1xcbnNhZGlzdGljYWxseVxcbnNhZG5lc3MvTVxcbnNhZG9tYXNvY2hpc20vTVxcbnNhZG9tYXNvY2hpc3QvTVNcXG5zYWRvbWFzb2NoaXN0aWNcXG5zYWZhcmkvU0dNRFxcbnNhZmUvTVlUUFJTXFxuc2FmZWd1YXJkL1NNREdcXG5zYWZla2VlcGluZy9NXFxuc2FmZW5lc3MvTVxcbnNhZmV0eS9TTVxcbnNhZmZsb3dlci9NU1xcbnNhZmZyb24vTVNcXG5zYWcvU01cXG5zYWdhL01TXFxuc2FnYWNpb3VzL1lcXG5zYWdhY2l0eS9NXFxuc2FnZS9NWVRSU1xcbnNhZ2VicnVzaC9NXFxuc2FnZ2VkXFxuc2FnZ2luZ1xcbnNhZ2d5L1JUXFxuc2Fnby9NXFxuc2FndWFyby9NU1xcbnNhaGliL01TXFxuc2FpZC9VXFxuc2FpbC9HTURTSlxcbnNhaWxib2FyZC9NUlpHU1xcbnNhaWxib2FyZGVyL01cXG5zYWlsYm9hcmRpbmcvTVxcbnNhaWxib2F0L01TXFxuc2FpbGNsb3RoL01cXG5zYWlsZmlzaC9NU1xcbnNhaWxpbmcvTVxcbnNhaWxvci9TTVxcbnNhaWxwbGFuZS9NU1xcbnNhaW50L01EWVNcXG5zYWludGhvb2QvTVxcbnNhaW50bGlrZVxcbnNhaW50bGluZXNzL01cXG5zYWludGx5L1BSVFxcbnNhaXRoXFxuc2FrZS9NXFxuc2FsYWFtL1NNREdcXG5zYWxhYmxlL1VcXG5zYWxhY2lvdXMvUFlcXG5zYWxhY2lvdXNuZXNzL01cXG5zYWxhY2l0eS9NXFxuc2FsYWQvTVNcXG5zYWxhbWFuZGVyL1NNXFxuc2FsYW1pL1NNXFxuc2FsYXJ5L0RTTVxcbnNhbGUvQUJNU1xcbnNhbGVyb29tL1NcXG5zYWxlc2NsZXJrL1NNXFxuc2FsZXNnaXJsL1NNXFxuc2FsZXNsYWR5L1NNXFxuc2FsZXNtYW4vTVxcbnNhbGVzbWFuc2hpcC9NXFxuc2FsZXNtZW5cXG5zYWxlc3Blb3BsZS9NXFxuc2FsZXNwZXJzb24vTVNcXG5zYWxlc3Jvb20vU1xcbnNhbGVzd29tYW4vTVxcbnNhbGVzd29tZW5cXG5zYWxpZW5jZS9NXFxuc2FsaWVudC9TTVlcXG5zYWxpbmUvU01cXG5zYWxpbml0eS9NXFxuc2FsaXZhL01cXG5zYWxpdmFyeVxcbnNhbGl2YXRlL0dORFNcXG5zYWxpdmF0aW9uL01cXG5zYWxsb3cvUlRQXFxuc2FsbG93bmVzcy9NXFxuc2FsbHkvRFNNR1xcbnNhbG1vbi9TTVxcbnNhbG1vbmVsbGEvTVxcbnNhbG1vbmVsbGFlXFxuc2Fsb24vTVNcXG5zYWxvb24vU01cXG5zYWxzYS9NU1xcbnNhbHQnc1xcbnNhbHQvQ1RHRFNcXG5zYWx0Ym94L01TXFxuc2FsdGNlbGxhci9TTVxcbnNhbHRlZC9VXFxuc2FsdGVyXFxuc2FsdGluZS9TTVxcbnNhbHRpbmVzcy9NXFxuc2FsdHBldGVyL01cXG5zYWx0c2hha2VyL1NNXFxuc2FsdHdhdGVyL01cXG5zYWx0eS9SVFBcXG5zYWx1YnJpb3VzL0lcXG5zYWx1dGFyeVxcbnNhbHV0YXRpb24vTVNcXG5zYWx1dGF0b3JpYW4vTVNcXG5zYWx1dGF0b3J5XFxuc2FsdXRlL0RTTUdcXG5zYWx2YWdlL0RTTUdcXG5zYWx2YWdlYWJsZVxcbnNhbHZhdGlvbi9NXFxuc2FsdmUvTVpHRFJTXFxuc2FsdmVyL01cXG5zYWx2by9NU1xcbnNhbWFyaXVtL01cXG5zYW1iYS9NRFNHXFxuc2FtZS9TUFxcbnNhbWVuZXNzL01cXG5zYW1leVxcbnNhbWl6ZGF0L1NcXG5zYW1vc2EvU1xcbnNhbW92YXIvU01cXG5zYW1wYW4vU01cXG5zYW1wbGUvRFJTTVpHSlxcbnNhbXBsZXIvTVxcbnNhbXBsaW5nL01cXG5zYW11cmFpL1NNXFxuc2FuYXRvcml1bS9TTVxcbnNhbmN0aWZpY2F0aW9uL01cXG5zYW5jdGlmeS9HRFNOXFxuc2FuY3RpbW9uaW91cy9ZUFxcbnNhbmN0aW1vbmlvdXNuZXNzL01cXG5zYW5jdGltb255L01cXG5zYW5jdGlvbi9HU01EXFxuc2FuY3Rpb25lZC9VXFxuc2FuY3RpdHkvTVxcbnNhbmN0dWFyeS9TTVxcbnNhbmN0dW0vU01cXG5zYW5kL1pHTURSU1xcbnNhbmRhbC9TTVxcbnNhbmRhbHdvb2QvTVxcbnNhbmRiYWcvU01cXG5zYW5kYmFnZ2VkXFxuc2FuZGJhZ2dlci9TTVxcbnNhbmRiYWdnaW5nXFxuc2FuZGJhbmsvTVNcXG5zYW5kYmFyL1NNXFxuc2FuZGJsYXN0L1pHTURSU1xcbnNhbmRibGFzdGVyL01cXG5zYW5kYm94L01TXFxuc2FuZGNhc3RsZS9NU1xcbnNhbmRlci9NXFxuc2FuZGhvZy9TTVxcbnNhbmRpbmVzcy9NXFxuc2FuZGxvdC9TTVxcbnNhbmRsb3R0ZXIvTVNcXG5zYW5kbWFuL01cXG5zYW5kbWVuXFxuc2FuZHBhcGVyL0dNRFNcXG5zYW5kcGlwZXIvTVNcXG5zYW5kcGl0L1NcXG5zYW5kc3RvbmUvTVxcbnNhbmRzdG9ybS9TTVxcbnNhbmR3aWNoL01EU0dcXG5zYW5keS9SVFBcXG5zYW5lL0lZVFJcXG5zYW5lbmVzcy9NXFxuc2FuZy9TXFxuc2FuZ2Zyb2lkL01cXG5zYW5ncmlhL01cXG5zYW5ndWluYXJ5XFxuc2FuZ3VpbmUvWVxcbnNhbml0YXJpYW4vU01cXG5zYW5pdGFyaXVtL1NNXFxuc2FuaXRhcnkvSVVcXG5zYW5pdGF0aW9uL01cXG5zYW5pdGl6ZS9aR0RSU1xcbnNhbml0eS9JTVxcbnNhbmtcXG5zYW5zXFxuc2Fuc2VyaWZcXG5zYXAvU01cXG5zYXBpZW5jZS9NXFxuc2FwaWVuc1xcbnNhcGllbnRcXG5zYXBsZXNzXFxuc2FwbGluZy9NU1xcbnNhcHBlZFxcbnNhcHBlci9TXFxuc2FwcGhpcmUvU01cXG5zYXBwaW5lc3MvTVxcbnNhcHBpbmdcXG5zYXBweS9QUlRcXG5zYXByb3BoeXRlL1NNXFxuc2Fwcm9waHl0aWNcXG5zYXBzdWNrZXIvU01cXG5zYXB3b29kL01cXG5zYXJhbi9NXFxuc2FyY2FzbS9NU1xcbnNhcmNhc3RpY1xcbnNhcmNhc3RpY2FsbHlcXG5zYXJjb21hL01TXFxuc2FyY29waGFnaVxcbnNhcmNvcGhhZ3VzL01cXG5zYXJkaW5lL01TXFxuc2FyZG9uaWNcXG5zYXJkb25pY2FsbHlcXG5zYXJnZS9NU1xcbnNhcmkvTVNcXG5zYXJreVxcbnNhcm5pZS9TXFxuc2Fyb25nL1NNXFxuc2Fyc2FwYXJpbGxhL01TXFxuc2FydG9yaWFsL1lcXG5zYXNoL01TXFxuc2FzaGF5L1NHTURcXG5zYXNzL0dNRFNcXG5zYXNzYWZyYXMvTVNcXG5zYXNzeS9SVFxcbnNhdFxcbnNhdGFuaWNcXG5zYXRhbmljYWwvWVxcbnNhdGFuaXNtL01cXG5zYXRhbmlzdC9NU1xcbnNhdGF5XFxuc2F0Y2hlbC9NU1xcbnNhdGUvR0RTXFxuc2F0ZWVuL01cXG5zYXRlbGxpdGUvRFNNR1xcbnNhdGlhYmxlL0lcXG5zYXRpYXRlL0dORFNcXG5zYXRpYXRpb24vTVxcbnNhdGlldHkvTVxcbnNhdGluL01cXG5zYXRpbndvb2QvU01cXG5zYXRpbnlcXG5zYXRpcmUvU01cXG5zYXRpcmljXFxuc2F0aXJpY2FsL1lcXG5zYXRpcmlzdC9TTVxcbnNhdGlyaXplL0RTR1xcbnNhdGlzZmFjdGlvbi9FTVxcbnNhdGlzZmFjdGlvbnNcXG5zYXRpc2ZhY3RvcmlseS9VXFxuc2F0aXNmYWN0b3J5L1VcXG5zYXRpc2ZpZWQvVVxcbnNhdGlzZnkvRURTR1xcbnNhdGlzZnlpbmcvVVxcbnNhdGlzZnlpbmdseVxcbnNhdG9yaS9NXFxuc2F0cmFwL1NNXFxuc2F0c3VtYS9TXFxuc2F0dXJhdGUvRFNHTlxcbnNhdHVyYXRlZC9VXFxuc2F0dXJhdGlvbi9NXFxuc2F0dXJuaW5lXFxuc2F0eXIvTVNcXG5zYXR5cmlhc2lzL01cXG5zYXR5cmljXFxuc2F1Y2UvTVpHRFJTXFxuc2F1Y2VwYW4vU01cXG5zYXVjZXIvTVxcbnNhdWNpbHlcXG5zYXVjaW5lc3MvTVxcbnNhdWN5L1JQVFxcbnNhdWVya3JhdXQvTVxcbnNhdW5hL01EU0dcXG5zYXVudGVyL01ER1NcXG5zYXVyaWFuXFxuc2F1cm9wb2QvU01cXG5zYXVzYWdlL01TXFxuc2F1dGUvTVNcXG5zYXV0ZWVkXFxuc2F1dGVpbmdcXG5zYXZhZ2UvRFJTTVlUR1BcXG5zYXZhZ2VuZXNzL01cXG5zYXZhZ2VyeS9TTVxcbnNhdmFubmEvTVNcXG5zYXZhbnQvU01cXG5zYXZlL0JKTVpHRFJTXFxuc2F2ZWQvVVxcbnNhdmVyL01cXG5zYXZpbmcvTVxcbnNhdmluZ3MvTVxcbnNhdmlvci9TTVxcbnNhdm9yL01EU0dcXG5zYXZvcmluZXNzL01cXG5zYXZvcnkvUFRSU01cXG5zYXZveS9NU1xcbnNhdnZ5L0RSU01UR1xcbnNhdy9TR01EXFxuc2F3Ym9uZXMvTVxcbnNhd2J1Y2svTVNcXG5zYXdkdXN0L01cXG5zYXdmbHkvU01cXG5zYXdob3JzZS9TTVxcbnNhd21pbGwvTVNcXG5zYXd5ZXIvU01cXG5zYXgvTVNcXG5zYXhpZnJhZ2UvU01cXG5zYXhvcGhvbmUvTVNcXG5zYXhvcGhvbmlzdC9TTVxcbnNheSdzXFxuc2F5L1VTR1xcbnNheWluZy9TTVxcbnNjYWIvTVNcXG5zY2FiYmFyZC9NU1xcbnNjYWJiZWRcXG5zY2FiYmluZXNzL01cXG5zY2FiYmluZ1xcbnNjYWJieS9QVFJcXG5zY2FiaWVzL01cXG5zY2Ficm91c1xcbnNjYWQvTVNcXG5zY2FmZm9sZC9TTUdcXG5zY2FmZm9sZGluZy9NXFxuc2NhZy9TXFxuc2NhZ2dlZFxcbnNjYWxhYmlsaXR5XFxuc2NhbGFyL1NcXG5zY2FsYXdhZy9NU1xcbnNjYWxkL01EU0dcXG5zY2FsZSdzXFxuc2NhbGUvQ0dEU1xcbnNjYWxlbGVzc1xcbnNjYWxlbmVcXG5zY2FsaW5lc3MvTVxcbnNjYWxsaW9uL01TXFxuc2NhbGxvcC9HU01EXFxuc2NhbHAvTURSU1pHXFxuc2NhbHBlbC9TTVxcbnNjYWxwZXIvTVxcbnNjYWx5L1JUUFxcbnNjYW0vTVNcXG5zY2FtbWVkXFxuc2NhbW1lci9TXFxuc2NhbW1pbmdcXG5zY2FtcC9NUlNaXFxuc2NhbXBlci9HTURcXG5zY2FtcGkvTVxcbnNjYW4vTVNcXG5zY2FuZGFsL1NNXFxuc2NhbmRhbGl6ZS9EU0dcXG5zY2FuZGFsbW9uZ2VyL1NNXFxuc2NhbmRhbG91cy9ZXFxuc2NhbmRpdW0vTVxcbnNjYW5uZWRcXG5zY2FubmVyL1NNXFxuc2Nhbm5pbmdcXG5zY2Fuc2lvbi9NXFxuc2NhbnQvQ0RTVEdcXG5zY2FudGVyXFxuc2NhbnRpbHlcXG5zY2FudGluZXNzL01cXG5zY2FudGx5XFxuc2NhbnRuZXNzL01cXG5zY2FudHkvUlNQVFxcbnNjYXBlZ29hdC9TR01EXFxuc2NhcGVncmFjZS9NU1xcbnNjYXB1bGEvTVxcbnNjYXB1bGFlXFxuc2NhcHVsYXIvU01cXG5zY2FyL0dNRFNcXG5zY2FyYWIvU01cXG5zY2FyY2UvUllUUFxcbnNjYXJjZW5lc3MvTVxcbnNjYXJjaXR5L1NNXFxuc2NhcmUvTVNcXG5zY2FyZWNyb3cvTVNcXG5zY2FyZW1vbmdlci9TTUdcXG5zY2FyZi9NRFNHXFxuc2NhcmlmaWNhdGlvbi9NXFxuc2NhcmlmeS9ORFNHXFxuc2NhcmlseVxcbnNjYXJpbmVzcy9NXFxuc2NhcmxhdGluYS9NXFxuc2NhcmxldC9NXFxuc2NhcnAvTURSU1pHXFxuc2NhcnBlci9ER1xcbnNjYXJyZWRcXG5zY2FycmluZ1xcbnNjYXJ2ZXNcXG5zY2FyeS9SVFBcXG5zY2F0L01TXFxuc2NhdGhpbmcvWVxcbnNjYXRvbG9naWNhbFxcbnNjYXRvbG9neS9NXFxuc2NhdHRlZFxcbnNjYXR0ZXIvR0pTTURcXG5zY2F0dGVyYnJhaW4vU01EXFxuc2NhdHRlcmluZy9NXFxuc2NhdHRlcnNob3RcXG5zY2F0dGluZ1xcbnNjYXR0eVxcbnNjYXZlbmdlL1pHRFJTXFxuc2NhdmVuZ2VyL01cXG5zY2VuYXJpby9NU1xcbnNjZW5hcmlzdC9NU1xcbnNjZW5lL01TXFxuc2NlbmVyeS9NXFxuc2NlbmljXFxuc2NlbmljYWxseVxcbnNjZW50L0NNU1xcbnNjZW50ZWQvVVxcbnNjZW50aW5nXFxuc2NlbnRsZXNzXFxuc2NlcHRlci9NU1xcbnNjaFxcbnNjaGFkZW5mcmV1ZGVcXG5zY2hlZHVsZSdzXFxuc2NoZWR1bGUvQURTR1xcbnNjaGVkdWxlZC9VXFxuc2NoZWR1bGVyL1NcXG5zY2hlbWFcXG5zY2hlbWF0YVxcbnNjaGVtYXRpYy9TTVxcbnNjaGVtYXRpY2FsbHlcXG5zY2hlbWF0aXplL0dEU1xcbnNjaGVtZS9EUlNNWkdcXG5zY2hlbWVyL01cXG5zY2hlcnpvL01TXFxuc2NoaWxsaW5nL01TXFxuc2NoaXNtL1NNXFxuc2NoaXNtYXRpYy9TTVxcbnNjaGlzdC9NXFxuc2NoaXN0b3NvbWlhc2lzXFxuc2NoaXpvL1NNXFxuc2NoaXpvaWQvTVNcXG5zY2hpem9waHJlbmlhL01cXG5zY2hpem9waHJlbmljL1NNXFxuc2NobGVtaWVsL1NNXFxuc2NobGVwL1NNXFxuc2NobGVwcGVkXFxuc2NobGVwcGluZ1xcbnNjaGxvY2svTVxcbnNjaG1hbHR6L01cXG5zY2htYWx0enkvVFJcXG5zY2htby9NXFxuc2NobW9lc1xcbnNjaG1vb3plL0RSU1pHXFxuc2NobXVjay9NU1xcbnNjaG5hcHBzL01cXG5zY2huYXV6ZXIvU01cXG5zY2huaXR6ZWwvU01cXG5zY2hub29rL01TXFxuc2Nobm96L01TXFxuc2Nobm96emxlL1NNXFxuc2Nob2xhci9NWVNcXG5zY2hvbGFyc2hpcC9NU1xcbnNjaG9sYXN0aWNcXG5zY2hvbGFzdGljYWxseVxcbnNjaG9sYXN0aWNpc21cXG5zY2hvb2wvU0dNRFxcbnNjaG9vbGJhZy9NU1xcbnNjaG9vbGJvb2svU01cXG5zY2hvb2xib3kvTVNcXG5zY2hvb2xjaGlsZC9NXFxuc2Nob29sY2hpbGRyZW4vTVxcbnNjaG9vbGRheXNcXG5zY2hvb2xlZC9VXFxuc2Nob29sZmVsbG93L1NNXFxuc2Nob29sZ2lybC9TTVxcbnNjaG9vbGhvdXNlL1NNXFxuc2Nob29saW5nL01cXG5zY2hvb2xraWQvU1xcbnNjaG9vbG1hcm0vU01cXG5zY2hvb2xtYXJtaXNoXFxuc2Nob29sbWFzdGVyL01TXFxuc2Nob29sbWF0ZS9TTVxcbnNjaG9vbG1pc3RyZXNzL01TXFxuc2Nob29scm9vbS9TTVxcbnNjaG9vbHRlYWNoZXIvTVNcXG5zY2hvb2x3b3JrL01cXG5zY2hvb2x5YXJkL1NNXFxuc2Nob29uZXIvU01cXG5zY2h1c3MvR01EU1xcbnNjaHVzc2Jvb21lci9NU1xcbnNjaHdhL01TXFxuc2NpXFxuc2NpYXRpY1xcbnNjaWF0aWNhL01cXG5zY2llbmNlL0ZNU1xcbnNjaWVudGlmaWMvVVxcbnNjaWVudGlmaWNhbGx5L1VcXG5zY2llbnRpc3QvU01cXG5zY2ltaXRhci9TTVxcbnNjaW50aWxsYS9NU1xcbnNjaW50aWxsYXRlL0RTR05cXG5zY2ludGlsbGF0aW9uL01cXG5zY2lvbi9NU1xcbnNjaXNzb3IvR0RTXFxuc2NsZXJvc2VzXFxuc2NsZXJvc2lzL01cXG5zY2xlcm90aWNcXG5zY29mZi9NRFJTWkdcXG5zY29mZmVyL01cXG5zY29mZmxhdy9NU1xcbnNjb2xkL01EU0dKXFxuc2NvbGRpbmcvTVxcbnNjb2xpb3Npcy9NXFxuc2NvbmNlL1NNXFxuc2NvbmUvTVNcXG5zY29vcC9NRFNHXFxuc2Nvb3BmdWwvTVNcXG5zY29vdC9EUlNaR1xcbnNjb290ZXIvTVxcbnNjb3BlL01HRFNcXG5zY29yYnV0aWNcXG5zY29yY2gvTURSU1pHXFxuc2NvcmNoZXIvTVxcbnNjb3JlL01aR0RSU1xcbnNjb3JlYm9hcmQvU01cXG5zY29yZWNhcmQvTVNcXG5zY29yZWtlZXBlci9NU1xcbnNjb3JlbGVzc1xcbnNjb3JlbGluZS9TXFxuc2NvcmVyL01cXG5zY29ybi9NRFJTWkdcXG5zY29ybmVyL01cXG5zY29ybmZ1bC9ZXFxuc2NvcnBpb24vTVNcXG5zY290Y2gvTURTR1xcbnNjb3RjaHNcXG5zY291bmRyZWwvTVNcXG5zY291ci9EUlNaR1xcbnNjb3VyZXIvTVxcbnNjb3VyZ2UvRFNNR1xcbnNjb3V0L01EUlNaR1xcbnNjb3V0aW5nL01cXG5zY291dG1hc3Rlci9NU1xcbnNjb3cvTVNcXG5zY293bC9NRFNHXFxuc2NyYWJibGUvTVpHRFJTXFxuc2NyYWJibGVyL01cXG5zY3JhZy9NU1xcbnNjcmFnZ2x5L1JUXFxuc2NyYWdneS9UUlxcbnNjcmFtL1NcXG5zY3JhbWJsZSdzXFxuc2NyYW1ibGUvVUdEU1xcbnNjcmFtYmxlci9NU1xcbnNjcmFtbWVkXFxuc2NyYW1taW5nXFxuc2NyYXAvTURSU1pHSlxcbnNjcmFwYm9vay9TTVxcbnNjcmFwZS9TTVxcbnNjcmFwZXIvTVxcbnNjcmFwaGVhcC9TTVxcbnNjcmFwaWVcXG5zY3JhcHBlZFxcbnNjcmFwcGVyL01TXFxuc2NyYXBwaW5nXFxuc2NyYXBweS9UUlxcbnNjcmFweWFyZC9TTVxcbnNjcmF0Y2gvR01EU1xcbnNjcmF0Y2hjYXJkL1NcXG5zY3JhdGNoZWQvVVxcbnNjcmF0Y2hpbHlcXG5zY3JhdGNoaW5lc3MvTVxcbnNjcmF0Y2hwYWQvU1xcbnNjcmF0Y2h5L1BSVFxcbnNjcmF3bC9TTURHXFxuc2NyYXdseVxcbnNjcmF3bmluZXNzL01cXG5zY3Jhd255L1BUUlxcbnNjcmVhbS9TTURSWkdcXG5zY3JlYW1lci9NXFxuc2NyZWFtaW5nL1lcXG5zY3JlZS9NRFNcXG5zY3JlZWNoL0dNRFNcXG5zY3JlZWNoeS9UUlxcbnNjcmVlZC9TXFxuc2NyZWVuL1NKTURHXFxuc2NyZWVuaW5nL01cXG5zY3JlZW5wbGF5L1NNXFxuc2NyZWVuc2F2ZXIvU01cXG5zY3JlZW5zaG90L1NcXG5zY3JlZW53cml0ZXIvU01cXG5zY3JlZW53cml0aW5nL01cXG5zY3JldydzXFxuc2NyZXcvVURTR1xcbnNjcmV3YmFsbC9NU1xcbnNjcmV3ZHJpdmVyL01TXFxuc2NyZXdpbmVzcy9NXFxuc2NyZXd3b3JtL1NNXFxuc2NyZXd5L1BSVFxcbnNjcmliYWxcXG5zY3JpYmJsZS9NWkdEUlNcXG5zY3JpYmJsZXIvTVxcbnNjcmliZSdzXFxuc2NyaWJlL0NLSVNcXG5zY3JpbS9NU1xcbnNjcmltbWFnZS9NR0RTXFxuc2NyaW1wL1NER1xcbnNjcmltc2hhdy9NREdTXFxuc2NyaXAvTVNcXG5zY3JpcHQvRlNNREdcXG5zY3JpcHRlZC9VXFxuc2NyaXB0dXJhbFxcbnNjcmlwdHVyZS9NU1xcbnNjcmlwdHdyaXRlci9TTVxcbnNjcml2ZW5lci9TTVxcbnNjcm9kL01cXG5zY3JvZnVsYS9NXFxuc2Nyb2Z1bG91c1xcbnNjcm9nL1NcXG5zY3JvbGwvR1NNRFxcbnNjcm9vZ2UvTVNcXG5zY3JvdGFcXG5zY3JvdGFsXFxuc2Nyb3R1bS9NXFxuc2Nyb3VuZ2UvRFJTWkdcXG5zY3JvdW5nZXIvTVxcbnNjcm91bmd5L1RSXFxuc2NydWIvTVNcXG5zY3J1YmJlZFxcbnNjcnViYmVyL1NNXFxuc2NydWJiaW5nXFxuc2NydWJieS9SVFxcbnNjcnVmZi9TTVxcbnNjcnVmZmlseVxcbnNjcnVmZmluZXNzL01cXG5zY3J1ZmZ5L1JQVFxcbnNjcnVtL1NcXG5zY3J1bWhhbGZcXG5zY3J1bWhhbHZlc1xcbnNjcnVtbWFnZS9TXFxuc2NydW1tZWRcXG5zY3J1bW1pbmdcXG5zY3J1bXAvU0dEXFxuc2NydW1wdGlvdXMvWVxcbnNjcnVtcHlcXG5zY3J1bmNoL01EU0dcXG5zY3J1bmNoeS9TTVxcbnNjcnVwbGUvTUdEU1xcbnNjcnVwdWxvc2l0eS9NXFxuc2NydXB1bG91cy9VUFlcXG5zY3J1cHVsb3VzbmVzcy9VTVxcbnNjcnV0aW5lZXIvU1xcbnNjcnV0aW5pemUvR0RTXFxuc2NydXRpbnkvTVxcbnNjdWJhL01EU0dcXG5zY3VkL01TXFxuc2N1ZGRlZFxcbnNjdWRkaW5nXFxuc2N1ZmYvTURTR1xcbnNjdWZmbGUvTUdEU1xcbnNjdWxsL01EUlNaR1xcbnNjdWxsZXIvTVxcbnNjdWxsZXJ5L1NNXFxuc2N1bGxpb24vU01cXG5zY3VscHQvU0dEXFxuc2N1bHB0b3IvU01cXG5zY3VscHRyZXNzL01TXFxuc2N1bHB0dXJhbFxcbnNjdWxwdHVyZS9EU01HXFxuc2N1bS9NU1xcbnNjdW1iYWcvTVNcXG5zY3VtbWVkXFxuc2N1bW1pbmdcXG5zY3VtbXkvVFJcXG5zY3VwcGVyL01ER1NcXG5zY3VyZi9NXFxuc2N1cmZ5XFxuc2N1cnJpbGl0eS9NXFxuc2N1cnJpbG91cy9QWVxcbnNjdXJyaWxvdXNuZXNzL01cXG5zY3VycnkvR0RTTVxcbnNjdXJ2aWx5XFxuc2N1cnZ5L1RSTVxcbnNjdXRjaGVvbi9TTVxcbnNjdXR0bGUvTUdEU1xcbnNjdXR0bGVidXR0L01cXG5zY3V6enkvVFJcXG5zY3l0aGUvRFNNR1xcbnNlYS9TTVxcbnNlYWJlZC9TTVxcbnNlYWJpcmQvTVNcXG5zZWFib2FyZC9TTVxcbnNlYWJvcm5lXFxuc2VhY29hc3QvU01cXG5zZWFmYXJlci9TTVxcbnNlYWZhcmluZy9NXFxuc2VhZmxvb3IvU01cXG5zZWFmb29kL01cXG5zZWFmcm9udC9TTVxcbnNlYWdvaW5nXFxuc2VhZ3VsbC9NU1xcbnNlYWhvcnNlL01TXFxuc2VhbCdzXFxuc2VhbC9BVVNER1xcbnNlYWxhbnQvTVNcXG5zZWFsZXIvU01cXG5zZWFsc2tpbi9NXFxuc2VhbS9HTUROU1xcbnNlYW1hbi9NXFxuc2VhbWFuc2hpcC9NXFxuc2VhbWxlc3MvWVxcbnNlYW1vdW50L01TXFxuc2VhbXN0cmVzcy9NU1xcbnNlYW15L1JUXFxuc2VhbmNlL1NNXFxuc2VhcGxhbmUvU01cXG5zZWFwb3J0L01TXFxuc2Vhci9HTURTXFxuc2VhcmNoL0FaR01EUlNcXG5zZWFyY2hhYmxlL1VcXG5zZWFyY2hlci9BTVxcbnNlYXJjaGluZy9ZXFxuc2VhcmNobGlnaHQvTVNcXG5zZWFyaW5nL1lcXG5zZWFzY2FwZS9TTVxcbnNlYXNoZWxsL1NNXFxuc2Vhc2hvcmUvU01cXG5zZWFzaWNrL1BcXG5zZWFzaWNrbmVzcy9NXFxuc2Vhc2lkZS9NU1xcbnNlYXNvbi9TR01EQkpcXG5zZWFzb25hYmxlL1VcXG5zZWFzb25hYmx5L1VcXG5zZWFzb25hbC9ZXFxuc2Vhc29uYWxpdHlcXG5zZWFzb25lZC9VXFxuc2Vhc29uaW5nL01cXG5zZWF0J3NcXG5zZWF0L1VHRFNcXG5zZWF0aW5nL01cXG5zZWF0bWF0ZS9TTVxcbnNlYXdhbGwvTVNcXG5zZWF3YXJkL01TXFxuc2Vhd2F0ZXIvTVxcbnNlYXdheS9TTVxcbnNlYXdlZWQvTVNcXG5zZWF3b3J0aGluZXNzL01cXG5zZWF3b3J0aHkvUFxcbnNlYmFjZW91c1xcbnNlYm9ycmhlYS9NXFxuc2VidW1cXG5zZWMneVxcbnNlYy9TTVxcbnNlY2FudC9TTVxcbnNlY2F0ZXVyc1xcbnNlY2VkZS9EU0dcXG5zZWNlc3Npb24vTVxcbnNlY2Vzc2lvbmlzdC9NU1xcbnNlY2x1ZGUvR0RTXFxuc2VjbHVzaW9uL01cXG5zZWNsdXNpdmVcXG5zZWNvbmQvU0xaR01EUllcXG5zZWNvbmRhcmlseVxcbnNlY29uZGFyeS9TTVxcbnNlY29uZGVyL01cXG5zZWNvbmRoYW5kXFxuc2Vjb25kbWVudC9TXFxuc2VjcmVjeS9NXFxuc2VjcmV0L1NHVk1EWVxcbnNlY3JldGFyaWFsXFxuc2VjcmV0YXJpYXQvTVNcXG5zZWNyZXRhcnkvU01cXG5zZWNyZXRhcnlzaGlwL01cXG5zZWNyZXRlL1hOU1xcbnNlY3JldGlvbi9NXFxuc2VjcmV0aXZlL1BZXFxuc2VjcmV0aXZlbmVzcy9NXFxuc2VjcmV0b3J5XFxuc2VjdC9JTVNcXG5zZWN0YXJpYW4vTVNcXG5zZWN0YXJpYW5pc20vTVxcbnNlY3RhcnkvU01cXG5zZWN0aW9uL0FFU01cXG5zZWN0aW9uYWwvTVNcXG5zZWN0aW9uYWxpc20vTVxcbnNlY3Rpb25lZFxcbnNlY3Rpb25pbmdcXG5zZWN0b3IvRVNNXFxuc2VjdWxhclxcbnNlY3VsYXJpc20vTVxcbnNlY3VsYXJpc3QvU01cXG5zZWN1bGFyaXphdGlvbi9NXFxuc2VjdWxhcml6ZS9EU0dcXG5zZWN1cmUvRFJTWVRHXFxuc2VjdXJlZC9VXFxuc2VjdXJpdHkvSVNNXFxuc2VjeVxcbnNlZGFuL01TXFxuc2VkYXRlL0RSU1lUR05WUFxcbnNlZGF0ZW5lc3MvTVxcbnNlZGF0aW9uL01cXG5zZWRhdGl2ZS9TTVxcbnNlZGVudGFyeVxcbnNlZGdlL01cXG5zZWRneVxcbnNlZGltZW50L01TXFxuc2VkaW1lbnRhcnlcXG5zZWRpbWVudGF0aW9uL01cXG5zZWRpdGlvbi9NXFxuc2VkaXRpb3VzXFxuc2VkdWNlL0RSU1pHXFxuc2VkdWNlci9NXFxuc2VkdWN0aW9uL1NNXFxuc2VkdWN0aXZlL1lQXFxuc2VkdWN0aXZlbmVzcy9NXFxuc2VkdWN0cmVzcy9NU1xcbnNlZHVsb3VzL1lcXG5zZWUvUlNNWlxcbnNlZWQnc1xcbnNlZWQvQUdEU1xcbnNlZWRiZWQvTVNcXG5zZWVkY2FzZS9NU1xcbnNlZWRlZC9VXFxuc2VlZGVyL1NNXFxuc2VlZGluZXNzL01cXG5zZWVkbGVzc1xcbnNlZWRsaW5nL01TXFxuc2VlZHBvZC9NU1xcbnNlZWR5L1JQVFxcbnNlZWluZy9TXFxuc2Vlay9aR1JTXFxuc2Vla2VyL01cXG5zZWVtL0dEU1xcbnNlZW1pbmcvWVxcbnNlZW1saW5lc3MvVU1cXG5zZWVtbHkvVVJUUFxcbnNlZW4vVVxcbnNlZXAvR0RTXFxuc2VlcGFnZS9NXFxuc2Vlci9NXFxuc2VlcnN1Y2tlci9NXFxuc2Vlc2F3L1NNREdcXG5zZWV0aGUvRFNHXFxuc2VnZmF1bHQvU1xcbnNlZ21lbnQvR1NNRFxcbnNlZ21lbnRhdGlvbi9NXFxuc2VnbWVudGVkL1VcXG5zZWdyZWdhdGUvQ0RTR05cXG5zZWdyZWdhdGVkL1VcXG5zZWdyZWdhdGlvbi9DTVxcbnNlZ3JlZ2F0aW9uaXN0L01TXFxuc2VndWUvTUdEU1xcbnNlZ3VlaW5nXFxuc2VpZ25ldXIvU01cXG5zZWlnbmlvci9TTVxcbnNlaW5lL01aR0RSU1xcbnNlaW5lci9NXFxuc2Vpc21pY1xcbnNlaXNtaWNhbGx5XFxuc2Vpc21vZ3JhcGgvWk1SXFxuc2Vpc21vZ3JhcGhlci9NXFxuc2Vpc21vZ3JhcGhpY1xcbnNlaXNtb2dyYXBoc1xcbnNlaXNtb2dyYXBoeS9NXFxuc2Vpc21vbG9naWNcXG5zZWlzbW9sb2dpY2FsXFxuc2Vpc21vbG9naXN0L01TXFxuc2Vpc21vbG9neS9NXFxuc2VpemUvR0RTXFxuc2VpenVyZS9NU1xcbnNlbGRvbVxcbnNlbGVjdC9DU0dWRFxcbnNlbGVjdGlvbi9TTVxcbnNlbGVjdGl2ZS9ZXFxuc2VsZWN0aXZpdHkvTVxcbnNlbGVjdG1hbi9NXFxuc2VsZWN0bWVuXFxuc2VsZWN0bmVzcy9NXFxuc2VsZWN0b3IvTVNcXG5zZWxlbml1bS9NXFxuc2VsZW5vZ3JhcGhlci9NU1xcbnNlbGVub2dyYXBoeS9NXFxuc2VsZi9NXFxuc2VsZmllL1NNXFxuc2VsZmlzaC9VWVBcXG5zZWxmaXNobmVzcy9VTVxcbnNlbGZsZXNzL1BZXFxuc2VsZmxlc3NuZXNzL01cXG5zZWxmc2FtZVxcbnNlbGwnc1xcbnNlbGwvQVpHUlNcXG5zZWxsZXInc1xcbnNlbGxvZmYvTVNcXG5zZWxsb3RhcGUvRFNHXFxuc2VsbG91dC9NU1xcbnNlbHR6ZXIvTVNcXG5zZWx2YWdlL01TXFxuc2VsdmVzXFxuc2VtYW50aWMvU1xcbnNlbWFudGljYWxseVxcbnNlbWFudGljaXN0L01TXFxuc2VtYW50aWNzL01cXG5zZW1hcGhvcmUvRFNNR1xcbnNlbWJsYW5jZS9BU01cXG5zZW1lbi9NXFxuc2VtZXN0ZXIvU01cXG5zZW1pL01TXFxuc2VtaWFubnVhbC9ZXFxuc2VtaWFyaWRcXG5zZW1pYXV0b21hdGljL01TXFxuc2VtaWJyZXZlL1NcXG5zZW1pY2lyY2xlL1NNXFxuc2VtaWNpcmN1bGFyXFxuc2VtaWNvbG9uL01TXFxuc2VtaWNvbmR1Y3RpbmdcXG5zZW1pY29uZHVjdG9yL01TXFxuc2VtaWNvbnNjaW91c1xcbnNlbWlkYXJrbmVzcy9NXFxuc2VtaWRldGFjaGVkXFxuc2VtaWZpbmFsL1NNXFxuc2VtaWZpbmFsaXN0L01TXFxuc2VtaWdsb3NzL1NcXG5zZW1pbW9udGhseS9TTVxcbnNlbWluYWxcXG5zZW1pbmFyL01TXFxuc2VtaW5hcmlhbi9TTVxcbnNlbWluYXJ5L1NNXFxuc2VtaW9mZmljaWFsXFxuc2VtaW90aWMvU1xcbnNlbWlvdGljcy9NXFxuc2VtaXBlcm1lYWJsZVxcbnNlbWlwcmVjaW91c1xcbnNlbWlwcml2YXRlXFxuc2VtaXByby9TXFxuc2VtaXByb2Zlc3Npb25hbC9TTVxcbnNlbWlxdWF2ZXIvU1xcbnNlbWlyZXRpcmVkXFxuc2VtaXNraWxsZWRcXG5zZW1pc29saWRcXG5zZW1pc3dlZXRcXG5zZW1pdG9uZS9TTVxcbnNlbWl0cmFpbGVyL01TXFxuc2VtaXRyYW5zcGFyZW50XFxuc2VtaXRyb3BpY2FsXFxuc2VtaXZvd2VsL1NNXFxuc2VtaXdlZWtseS9TTVxcbnNlbWl5ZWFybHlcXG5zZW1vbGluYS9NXFxuc2VtcHN0cmVzcy9NU1xcbnNlbmF0ZS9TTVxcbnNlbmF0b3IvTVNcXG5zZW5hdG9yaWFsXFxuc2VuZC9aR1JTXFxuc2VuZGVyL01cXG5zZW5kb2ZmL01TXFxuc2VuZXNjZW5jZS9NXFxuc2VuZXNjZW50XFxuc2VuaWxlXFxuc2VuaWxpdHkvTVxcbnNlbmlvci9TTVxcbnNlbmlvcml0eS9NXFxuc2VubmEvTVxcbnNlbm9yL01TXFxuc2Vub3JhL1NNXFxuc2Vub3JpdGEvU01cXG5zZW5zYXRpb24vTVNcXG5zZW5zYXRpb25hbC9ZXFxuc2Vuc2F0aW9uYWxpc20vTVxcbnNlbnNhdGlvbmFsaXN0L01TXFxuc2Vuc2F0aW9uYWxpemUvR0RTXFxuc2Vuc2UvTUdEU1xcbnNlbnNlbGVzcy9QWVxcbnNlbnNlbGVzc25lc3MvTVxcbnNlbnNpYmlsaXRpZXNcXG5zZW5zaWJpbGl0eS9JTVxcbnNlbnNpYmxlL1BcXG5zZW5zaWJsZW5lc3MvTVxcbnNlbnNpYmx5L0lcXG5zZW5zaXRpdmUvU01ZUFxcbnNlbnNpdGl2ZW5lc3MvTVxcbnNlbnNpdGl2aXRpZXNcXG5zZW5zaXRpdml0eS9JTVxcbnNlbnNpdGl6YXRpb24vQ01cXG5zZW5zaXRpemUvQ0RTR1xcbnNlbnNvci9TTVxcbnNlbnNvcnlcXG5zZW5zdWFsL1lcXG5zZW5zdWFsaXN0L1NNXFxuc2Vuc3VhbGl0eS9NXFxuc2Vuc3VvdXMvWVBcXG5zZW5zdW91c25lc3MvTVxcbnNlbnQvRkFVXFxuc2VudGVuY2UvTUdEU1xcbnNlbnRlbnRpb3VzL1lcXG5zZW50aWVuY2UvSU1cXG5zZW50aWVudC9JXFxuc2VudGltZW50L1NNXFxuc2VudGltZW50YWwvWVxcbnNlbnRpbWVudGFsaXNtL01cXG5zZW50aW1lbnRhbGlzdC9NU1xcbnNlbnRpbWVudGFsaXR5L01cXG5zZW50aW1lbnRhbGl6YXRpb24vTVxcbnNlbnRpbWVudGFsaXplL0dEU1xcbnNlbnRpbmVsL01TXFxuc2VudHJ5L1NNXFxuc2VwYWwvTVNcXG5zZXBhcmFiaWxpdHkvSU1cXG5zZXBhcmFibGVcXG5zZXBhcmFibHkvSVxcbnNlcGFyYXRlL1hNWUdOVkRTUFxcbnNlcGFyYXRlbmVzcy9NXFxuc2VwYXJhdGlvbi9NXFxuc2VwYXJhdGlzbS9NXFxuc2VwYXJhdGlzdC9NU1xcbnNlcGFyYXRvci9NU1xcbnNlcGlhL01cXG5zZXBzaXMvTVxcbnNlcHRhXFxuc2VwdGFsXFxuc2VwdGV0L1NNXFxuc2VwdGljXFxuc2VwdGljZW1pYS9NXFxuc2VwdGljZW1pY1xcbnNlcHR1YWdlbmFyaWFuL01TXFxuc2VwdHVtL01cXG5zZXB1bGNoZXIvR01EU1xcbnNlcHVsY2hyYWxcXG5zZXFcXG5zZXF1ZWwvU01cXG5zZXF1ZW5jZS9NWkdEUlNcXG5zZXF1ZW5jaW5nL01cXG5zZXF1ZW50aWFsL0ZZXFxuc2VxdWVzdGVyL1NER1xcbnNlcXVlc3RyYXRlL1hHTkRTXFxuc2VxdWVzdHJhdGlvbi9NXFxuc2VxdWluL1NNRFxcbnNlcXVpbm5lZFxcbnNlcXVpdHVyXFxuc2VxdW9pYS9NU1xcbnNlcmFnbGlvL01TXFxuc2VyYXBlL1NNXFxuc2VyYXBoL01cXG5zZXJhcGhpY1xcbnNlcmFwaHNcXG5zZXJlL1RSXFxuc2VyZW5hZGUvTUdEU1xcbnNlcmVuZGlwaXRvdXNcXG5zZXJlbmRpcGl0eS9NXFxuc2VyZW5lL1JQWVRcXG5zZXJlbmVuZXNzL01cXG5zZXJlbml0eS9NXFxuc2VyZi9NU1xcbnNlcmZkb20vTVxcbnNlcmdlL01cXG5zZXJnZWFudC9NU1xcbnNlcmlhbC9TTVlcXG5zZXJpYWxpemF0aW9uL1NNXFxuc2VyaWFsaXplL0dEU0JcXG5zZXJpZXMvTVxcbnNlcmlmL01TXFxuc2VyaWdyYXBoL01cXG5zZXJpZ3JhcGhzXFxuc2VyaW5lXFxuc2VyaW91cy9QWVxcbnNlcmlvdXNuZXNzL01cXG5zZXJtb24vU01cXG5zZXJtb25pemUvR0RTXFxuc2Vyb2xvZ3kvTVxcbnNlcm90b25pblxcbnNlcm91c1xcbnNlcnBlbnQvTVNcXG5zZXJwZW50aW5lL01cXG5zZXJyYXRlL1hORFxcbnNlcnJhdGlvbi9NXFxuc2VycmllZFxcbnNlcnVtL01TXFxuc2VydmFudC9NU1xcbnNlcnZlJ3MvQUZcXG5zZXJ2ZS9GQUNHRFNcXG5zZXJ2ZXIvU01cXG5zZXJ2ZXJ5L1NcXG5zZXJ2aWNlL0VNU1xcbnNlcnZpY2VhYmlsaXR5L01cXG5zZXJ2aWNlYWJsZVxcbnNlcnZpY2VkXFxuc2VydmljZW1hbi9NXFxuc2VydmljZW1lblxcbnNlcnZpY2V3b21hbi9NXFxuc2VydmljZXdvbWVuXFxuc2VydmljaW5nXFxuc2VydmlldHRlL01TXFxuc2VydmlsZVxcbnNlcnZpbGl0eS9NXFxuc2VydmluZydzXFxuc2VydmluZ3NcXG5zZXJ2aXRvci9NU1xcbnNlcnZpdHVkZS9NXFxuc2Vydm8vTVNcXG5zZXJ2b21lY2hhbmlzbS9TTVxcbnNlcnZvbW90b3IvTVNcXG5zZXNhbWUvU01cXG5zZXNxdWljZW50ZW5uaWFsL01TXFxuc2Vzc2lvbi9NU1xcbnNldC9BSVNNXFxuc2V0YmFjay9NU1xcbnNldHNjcmV3L1NNXFxuc2V0c3F1YXJlL1NcXG5zZXR0L0JKWkdSU1xcbnNldHRlZS9NU1xcbnNldHRlci9NXFxuc2V0dGluZy9NXFxuc2V0dGxlJ3NcXG5zZXR0bGUvQVVHRFNcXG5zZXR0bGVtZW50L0FNXFxuc2V0dGxlbWVudHNcXG5zZXR0bGVyL1NNXFxuc2V0dXAvTVNcXG5zZXZlbi9NSFNcXG5zZXZlbnRlZW4vU01IXFxuc2V2ZW50ZWVudGgvTVxcbnNldmVudGVlbnRoc1xcbnNldmVudGgvTVxcbnNldmVudGhzXFxuc2V2ZW50aWV0aC9NXFxuc2V2ZW50aWV0aHNcXG5zZXZlbnR5L1NNSFxcbnNldmVyL0VUR0RTXFxuc2V2ZXJhbC9NWVxcbnNldmVyYW5jZS9TTVxcbnNldmVyZS9ZUFJcXG5zZXZlcmVuZXNzL01cXG5zZXZlcml0eS9NXFxuc2V3L0FTR0RcXG5zZXdhZ2UvTVxcbnNld2VyL01TXFxuc2V3ZXJhZ2UvTVxcbnNld2luZy9NXFxuc2V3bi9BXFxuc2V4L0dNRFNcXG5zZXhhZ2VuYXJpYW4vU01cXG5zZXhpbHlcXG5zZXhpbmVzcy9NXFxuc2V4aXNtL01cXG5zZXhpc3QvTVNcXG5zZXhsZXNzXFxuc2V4b2xvZ2lzdC9TTVxcbnNleG9sb2d5L01cXG5zZXhwb3QvTVNcXG5zZXh0YW50L1NNXFxuc2V4dGV0L01TXFxuc2V4dGluZ1xcbnNleHRvbi9NU1xcbnNleHR1cGxldC9TTVxcbnNleHVhbC9ZXFxuc2V4dWFsaXR5L01cXG5zZXh5L1BUUlxcbnNmXFxuc2hcXG5zaGFiYmlseVxcbnNoYWJiaW5lc3MvTVxcbnNoYWJieS9QVFJcXG5zaGFjay9NRFNHXFxuc2hhY2tsZSdzXFxuc2hhY2tsZS9VR0RTXFxuc2hhZC9HTURTSlxcbnNoYWRlL01TXFxuc2hhZGlseVxcbnNoYWRpbmVzcy9NXFxuc2hhZGluZy9NXFxuc2hhZG93L1NHTURcXG5zaGFkb3dib3gvR0RTXFxuc2hhZG93eS9SVFxcbnNoYWR5L1JQVFxcbnNoYWZ0L01EU0dcXG5zaGFnL01TXFxuc2hhZ2dlZFxcbnNoYWdnaW5lc3MvTVxcbnNoYWdnaW5nXFxuc2hhZ2d5L1RQUlxcbnNoYWgvTVxcbnNoYWhzXFxuc2hha2UvTVpHUlNcXG5zaGFrZWRvd24vU01cXG5zaGFrZW4vVVxcbnNoYWtlb3V0L01TXFxuc2hha2VyL01cXG5zaGFrZXVwL01TXFxuc2hha2lseVxcbnNoYWtpbmVzcy9NXFxuc2hha3kvUlBUXFxuc2hhbGUvTVxcbnNoYWxsXFxuc2hhbGxvdC9NU1xcbnNoYWxsb3cvVFBNUllTXFxuc2hhbGxvd25lc3MvTVxcbnNoYWxvbVxcbnNoYWx0XFxuc2hhbS9HTURTXFxuc2hhbWFuL1NNXFxuc2hhbWFuaWNcXG5zaGFtYW5pc21cXG5zaGFtYW5pc3RpY1xcbnNoYW1ibGUvTUdEU1xcbnNoYW1ibGVzL01cXG5zaGFtYm9saWNcXG5zaGFtZS9NU1xcbnNoYW1lZmFjZWQvWVxcbnNoYW1lZnVsL1BZXFxuc2hhbWVmdWxuZXNzL01cXG5zaGFtZWxlc3MvWVBcXG5zaGFtZWxlc3NuZXNzL01cXG5zaGFtbWVkXFxuc2hhbW1pbmdcXG5zaGFtcG9vL1pHTURSU1xcbnNoYW1wb29lci9NXFxuc2hhbXJvY2svTVNcXG5zaGFuJ3RcXG5zaGFuZHkvU1xcbnNoYW5naGFpL0RTR1xcbnNoYW5rL01TXFxuc2hhbnR1bmcvTVxcbnNoYW50eS9TTVxcbnNoYW50eXRvd24vU01cXG5zaGFwZSdzXFxuc2hhcGUvQUdEU1xcbnNoYXBlZC9VXFxuc2hhcGVsZXNzL1lQXFxuc2hhcGVsZXNzbmVzcy9NXFxuc2hhcGVsaW5lc3MvTVxcbnNoYXBlbHkvUFRSXFxuc2hhcmQvTVNcXG5zaGFyZS9NWkdEUlNcXG5zaGFyZWFibGVcXG5zaGFyZWNyb3AvU1xcbnNoYXJlY3JvcHBlZFxcbnNoYXJlY3JvcHBlci9NU1xcbnNoYXJlY3JvcHBpbmdcXG5zaGFyZWhvbGRlci9TTVxcbnNoYXJlaG9sZGluZy9TXFxuc2hhcmVyL01cXG5zaGFyZXdhcmUvTVxcbnNoYXJpYS9NXFxuc2hhcmlhaFxcbnNoYXJrL01EU0dcXG5zaGFya3NraW4vTVxcbnNoYXJwL01ETlJZU1BYWlRHXFxuc2hhcnBlbi9BREdTXFxuc2hhcnBlbmVyL01TXFxuc2hhcnBlci9NXFxuc2hhcnBpZS9NU1xcbnNoYXJwaXNoXFxuc2hhcnBuZXNzL01cXG5zaGFycHNob290ZXIvU01cXG5zaGFycHNob290aW5nL01cXG5zaGF0dGVyL0dNRFNcXG5zaGF0dGVycHJvb2ZcXG5zaGF2ZS9NWkdEUlNKXFxuc2hhdmVuL1VcXG5zaGF2ZXIvTVxcbnNoYXZpbmcvTVxcbnNoYXdsL01TXFxuc2hheS9NU1xcbnNoZSdkXFxuc2hlJ2xsXFxuc2hlL0RTTVxcbnNoZWFmL01cXG5zaGVhci9NRFJTWkdcXG5zaGVhcmVyL01cXG5zaGVhdGgvSk1cXG5zaGVhdGhlL1VHRFNcXG5zaGVhdGhpbmcvTVxcbnNoZWF0aHNcXG5zaGVhdmUvRFNNR1xcbnNoZWJhbmcvTVNcXG5zaGViZWVuL1NcXG5zaGVkL01TXFxuc2hlZGRpbmdcXG5zaGVlbi9NXFxuc2hlZW55L1RSXFxuc2hlZXAvTVxcbnNoZWVwZG9nL01TXFxuc2hlZXBmb2xkL1NNXFxuc2hlZXBoZXJkZXIvTVNcXG5zaGVlcGlzaC9ZUFxcbnNoZWVwaXNobmVzcy9NXFxuc2hlZXBza2luL01TXFxuc2hlZXIvTURSU1BUR1xcbnNoZWVybmVzcy9NXFxuc2hlZXQvTVNHXFxuc2hlZXRpbmcvTVxcbnNoZWV0bGlrZVxcbnNoZWlrZG9tL01TXFxuc2hlaWtoL01cXG5zaGVpa2hzXFxuc2hlaWxhL1NcXG5zaGVrZWwvU01cXG5zaGVsZi9NXFxuc2hlbGwvTURSU0dcXG5zaGVsbGFjL01TXFxuc2hlbGxhY2tlZFxcbnNoZWxsYWNraW5nL01TXFxuc2hlbGxmaXJlL01cXG5zaGVsbGZpc2gvTVNcXG5zaGVsdGVyL0dNRFNcXG5zaGVsdmUvR0RTXFxuc2hlbHZpbmcvTVxcbnNoZW5hbmlnYW4vU01cXG5zaGVwaGVyZC9TTURHXFxuc2hlcGhlcmRlc3MvTVNcXG5zaGVyYmV0L1NNXFxuc2hlcmlmZi9TTVxcbnNoZXJyeS9TTVxcbnNoZXcvR0RTXFxuc2hld25cXG5zaGhcXG5zaGlhdHN1L01cXG5zaGliYm9sZXRoL01cXG5zaGliYm9sZXRoc1xcbnNoaWVsZC9NREdTXFxuc2hpZnQvR01EU1xcbnNoaWZ0aWx5XFxuc2hpZnRpbmVzcy9NXFxuc2hpZnRsZXNzL1BZXFxuc2hpZnRsZXNzbmVzcy9NXFxuc2hpZnR5L1JQVFxcbnNoaWl0YWtlL1NNXFxuc2hpbGwvR01EU0pcXG5zaGlsbGVsYWdoL01cXG5zaGlsbGVsYWdoc1xcbnNoaWxsaW5nL01cXG5zaGltL01TXFxuc2hpbW1lZFxcbnNoaW1tZXIvU01ER1xcbnNoaW1tZXJ5XFxuc2hpbW1pbmdcXG5zaGltbXkvRFNNR1xcbnNoaW4vWkdNRFJTXFxuc2hpbmJvbmUvU01cXG5zaGluZGlnL1NNXFxuc2hpbmUvTVNcXG5zaGluZXIvTVxcbnNoaW5nbGUvRFNNR1xcbnNoaW5ndWFyZC9NXFxuc2hpbmluZXNzL01cXG5zaGlubmVkXFxuc2hpbm5pbmdcXG5zaGlubnkvRFNHXFxuc2hpbnNwbGludHMvTVxcbnNoaW55L1RSUFxcbnNoaXAnc1xcbnNoaXAvQUxTXFxuc2hpcGJvYXJkL01TXFxuc2hpcGJ1aWxkZXIvU01cXG5zaGlwYnVpbGRpbmcvTVxcbnNoaXBsb2FkL1NNXFxuc2hpcG1hdGUvU01cXG5zaGlwbWVudC9BTVxcbnNoaXBtZW50c1xcbnNoaXBvd25lci9NU1xcbnNoaXBwZWQvQVxcbnNoaXBwZXIvU01cXG5zaGlwcGluZy9NXFxuc2hpcHNoYXBlXFxuc2hpcHdyZWNrL0dNRFNcXG5zaGlwd3JpZ2h0L01TXFxuc2hpcHlhcmQvU01cXG5zaGlyZS9NU1xcbnNoaXJrL1pHRFJTXFxuc2hpcmtlci9NXFxuc2hpcnIvR01EU0pcXG5zaGlycmluZy9NXFxuc2hpcnQvR01EU1xcbnNoaXJ0ZnJvbnQvU01cXG5zaGlydGluZy9NXFxuc2hpcnRsZXNzXFxuc2hpcnRzbGVldmUvU01cXG5zaGlydHRhaWwvU01cXG5zaGlydHdhaXN0L01TXFxuc2hpcnR5XFxuc2hpdC9TTSFcXG5zaGl0ZmFjZWQvIVxcbnNoaXRoZWFkL1MhXFxuc2hpdGxvYWQvIVxcbnNoaXR0ZWQvIVxcbnNoaXR0aW5nLyFcXG5zaGl0dHkvUlQhXFxuc2hpdi9aTVJTXFxuc2hpdmVyL01ER1xcbnNoaXZlcnlcXG5zaG9hbC9HTURTXFxuc2hvYXQvTVNcXG5zaG9jay9aR01EUlNcXG5zaG9ja2VyL01cXG5zaG9ja2luZy9ZXFxuc2hvY2twcm9vZlxcbnNob2QvVVxcbnNob2RkaWx5XFxuc2hvZGRpbmVzcy9NXFxuc2hvZGR5L1BSTVRcXG5zaG9lL01TXFxuc2hvZWhvcm4vR01EU1xcbnNob2VpbmdcXG5zaG9lbGFjZS9NU1xcbnNob2VtYWtlci9TTVxcbnNob2VzaGluZS9TTVxcbnNob2VzdHJpbmcvU01cXG5zaG9ldHJlZS9NU1xcbnNob2d1bi9NU1xcbnNob2d1bmF0ZS9NXFxuc2hvbmVcXG5zaG9vL0dEU1xcbnNob29rXFxuc2hvb3QvWkdNUlNKXFxuc2hvb3Rlci9NXFxuc2hvb3RpbmcvTVxcbnNob290b3V0L01TXFxuc2hvcC9NU1xcbnNob3BhaG9saWMvTVNcXG5zaG9wZml0dGVyL1NcXG5zaG9wZml0dGluZ1xcbnNob3Bmcm9udC9TXFxuc2hvcGtlZXBlci9NU1xcbnNob3BsaWZ0L0RSWkdTXFxuc2hvcGxpZnRlci9NXFxuc2hvcGxpZnRpbmcvTVxcbnNob3BwZS9NWkdEUlNcXG5zaG9wcGVyL01cXG5zaG9wcGluZy9NXFxuc2hvcHRhbGsvTVxcbnNob3B3b3JuXFxuc2hvcmUvTUdEU1xcbnNob3JlYmlyZC9TTVxcbnNob3JlbGluZS9NU1xcbnNob3JpbmcvTVxcbnNob3J0L1hUR01ETlJZU1BcXG5zaG9ydGFnZS9NU1xcbnNob3J0YnJlYWQvTVxcbnNob3J0Y2FrZS9NU1xcbnNob3J0Y2hhbmdlL0RTR1xcbnNob3J0Y29taW5nL01TXFxuc2hvcnRjcnVzdFxcbnNob3J0Y3V0L01TXFxuc2hvcnRlbi9KR0RcXG5zaG9ydGVuaW5nL01cXG5zaG9ydGZhbGwvTVNcXG5zaG9ydGhhbmQvTURcXG5zaG9ydGhvcm4vTVNcXG5zaG9ydGlzaFxcbnNob3J0bGlzdC9ER1NcXG5zaG9ydG5lc3MvTVxcbnNob3J0c2lnaHRlZC9QWVxcbnNob3J0c2lnaHRlZG5lc3MvTVxcbnNob3J0c3RvcC9NU1xcbnNob3J0d2F2ZS9NU1xcbnNob3J0eS9TTVxcbnNob3QvTVNcXG5zaG90Z3VuL1NNXFxuc2hvdGd1bm5lZFxcbnNob3RndW5uaW5nXFxuc2hvdWxkXFxuc2hvdWxkJ3ZlXFxuc2hvdWxkZXIvTURHU1xcbnNob3VsZG4ndFxcbnNob3V0L1pHTURSU1xcbnNob3V0ZXIvTVxcbnNob3ZlL01HRFNcXG5zaG92ZWwvTURTR1xcbnNob3ZlbGZ1bC9TTVxcbnNob3cvSlpHTURSU1xcbnNob3diaXovTVxcbnNob3dib2F0L01ER1NcXG5zaG93Y2FzZS9NR0RTXFxuc2hvd2Rvd24vTVNcXG5zaG93ZXIvTURHXFxuc2hvd2VycHJvb2ZcXG5zaG93ZXJ5XFxuc2hvd2dpcmwvTVNcXG5zaG93Z3JvdW5kL1NcXG5zaG93aWx5XFxuc2hvd2luZXNzL01cXG5zaG93aW5nL01cXG5zaG93anVtcGluZ1xcbnNob3dtYW4vTVxcbnNob3dtYW5zaGlwL01cXG5zaG93bWVuXFxuc2hvd25cXG5zaG93b2ZmL1NNXFxuc2hvd3BpZWNlL1NNXFxuc2hvd3BsYWNlL1NNXFxuc2hvd3Jvb20vTVNcXG5zaG93c3RvcHBlci9NU1xcbnNob3dzdG9wcGluZ1xcbnNob3d0aW1lXFxuc2hvd3kvVFJQXFxuc2hwdFxcbnNocmFua1xcbnNocmFwbmVsL01cXG5zaHJlZC9NU1xcbnNocmVkZGVkXFxuc2hyZWRkZXIvTVNcXG5zaHJlZGRpbmdcXG5zaHJldy9NU1xcbnNocmV3ZC9SWVBUXFxuc2hyZXdkbmVzcy9NXFxuc2hyZXdpc2hcXG5zaHJpZWsvTURTR1xcbnNocmlmdC9NXFxuc2hyaWtlL01TXFxuc2hyaWxsL0RSU1BUR1xcbnNocmlsbG5lc3MvTVxcbnNocmlsbHlcXG5zaHJpbXAvTURSU1pHXFxuc2hyaW5lL01TXFxuc2hyaW5rL01TQkdcXG5zaHJpbmthZ2UvTVxcbnNocml2ZS9HRFNcXG5zaHJpdmVsL1NHRFxcbnNocml2ZW5cXG5zaHJvdWQvR01EU1xcbnNocnViL01TXFxuc2hydWJiZXJ5L1NNXFxuc2hydWJieS9SVFxcbnNocnVnL01TXFxuc2hydWdnZWRcXG5zaHJ1Z2dpbmdcXG5zaHJ1bmsvTlxcbnNodGljay9NU1xcbnNodWNrL0dNRFNcXG5zaHVja3MvU1xcbnNodWRkZXIvTURTR1xcbnNodWZmbGUvQU1HRFNcXG5zaHVmZmxlYm9hcmQvU01cXG5zaHVmZmxlci9TTVxcbnNodW4vU1xcbnNodW5uZWRcXG5zaHVubmluZ1xcbnNodW50L01TREdcXG5zaHVzaC9EU0dcXG5zaHV0L1NcXG5zaHV0ZG93bi9TTVxcbnNodXRleWUvTVxcbnNodXRvZmYvU01cXG5zaHV0b3V0L1NNXFxuc2h1dHRlci9TTURHXFxuc2h1dHRlcmJ1Zy9NU1xcbnNodXR0aW5nXFxuc2h1dHRsZS9EU01HXFxuc2h1dHRsZWNvY2svR01EU1xcbnNoeS9UR0RSU01ZXFxuc2h5ZXJcXG5zaHllc3RcXG5zaHluZXNzL01cXG5zaHlzdGVyL1NNXFxuc2liaWxhbnQvU01cXG5zaWJsaW5nL1NNXFxuc2lieWwvTVNcXG5zaWJ5bGxpbmVcXG5zaWMvU1xcbnNpY2NlZFxcbnNpY2NpbmdcXG5zaWNrL1BYVEdETlJZU1xcbnNpY2tiYXkvU1xcbnNpY2tiZWQvU01cXG5zaWNrZW4vREdcXG5zaWNrZW5pbmcvWVxcbnNpY2tpZS9NU1xcbnNpY2tpc2hcXG5zaWNrbGUvTVNcXG5zaWNrbHkvUlRcXG5zaWNrbmVzcy9NU1xcbnNpY2tvL01TXFxuc2lja291dC9TTVxcbnNpY2tyb29tL01TXFxuc2lkZSdzXFxuc2lkZS9BR0RTXFxuc2lkZWFybS9TTVxcbnNpZGViYXIvU01cXG5zaWRlYm9hcmQvU01cXG5zaWRlYnVybnMvTVxcbnNpZGVjYXIvU01cXG5zaWRla2ljay9TTVxcbnNpZGVsaWdodC9NU1xcbnNpZGVsaW5lL0RTTUdcXG5zaWRlbG9uZ1xcbnNpZGVtYW4vTVxcbnNpZGVtZW5cXG5zaWRlcGllY2UvTVNcXG5zaWRlcmVhbFxcbnNpZGVzYWRkbGUvTVNcXG5zaWRlc2hvdy9NU1xcbnNpZGVzcGxpdHRpbmdcXG5zaWRlc3RlcC9NU1xcbnNpZGVzdGVwcGVkXFxuc2lkZXN0ZXBwaW5nXFxuc2lkZXN0cm9rZS9EU01HXFxuc2lkZXN3aXBlL0RTTUdcXG5zaWRldHJhY2svU01ER1xcbnNpZGV3YWxrL01TXFxuc2lkZXdhbGwvTVNcXG5zaWRld2F5c1xcbnNpZGV3aW5kZXIvU01cXG5zaWRpbmcvTVNcXG5zaWRsZS9NR0RTXFxuc2llZ2UvTVNcXG5zaWVubmEvTVxcbnNpZXJyYS9NU1xcbnNpZXN0YS9NU1xcbnNpZXZlL01HRFNcXG5zaWZ0L1pHRFJTXFxuc2lmdGVkL1VcXG5zaWZ0ZXIvTVxcbnNpZ2gvR01EXFxuc2lnaHNcXG5zaWdodC9HTURZU0pcXG5zaWdodGluZy9NXFxuc2lnaHRsZXNzXFxuc2lnaHRseS9VVFJcXG5zaWdodHJlYWRcXG5zaWdodHNlZWluZy9NXFxuc2lnaHRzZWVyL01TXFxuc2lnbWEvTVNcXG5zaWduJ3MvQ1xcbnNpZ24vQUZDR0RTXFxuc2lnbmFnZS9NXFxuc2lnbmFsL01EUllTWkdcXG5zaWduYWxlci9NXFxuc2lnbmFsaXphdGlvbi9NXFxuc2lnbmFsaXplL0dEU1xcbnNpZ25hbG1hbi9NXFxuc2lnbmFsbWVuXFxuc2lnbmF0b3J5L1NNXFxuc2lnbmF0dXJlL01TXFxuc2lnbmJvYXJkL01TXFxuc2lnbmVkL1VcXG5zaWduZXIvQ01TXFxuc2lnbmV0L01TXFxuc2lnbmlmaWNhbmNlL0lNXFxuc2lnbmlmaWNhbnQvSVlcXG5zaWduaWZpY2F0aW9uL01cXG5zaWduaWZ5L1hEU05HXFxuc2lnbmluZydzL0NcXG5zaWduaW5nc1xcbnNpZ25vci9GTVNcXG5zaWdub3JhL1NNXFxuc2lnbm9yZVxcbnNpZ25vcmlcXG5zaWdub3JpbmEvTVNcXG5zaWdub3JpbmVcXG5zaWducG9zdC9HU01EXFxuc2lsYWdlL01cXG5zaWxlbmNlL0RSU01aR1xcbnNpbGVuY2VyL01cXG5zaWxlbnQvTVJZU1RcXG5zaWxob3VldHRlL0RTTUdcXG5zaWxpY2EvTVxcbnNpbGljYXRlL01TXFxuc2lsaWNlb3VzXFxuc2lsaWNvbi9TTVxcbnNpbGljb25lL01cXG5zaWxpY29zaXMvTVxcbnNpbGsvTU5TXFxuc2lsa2lseVxcbnNpbGtpbmVzcy9NXFxuc2lsa3NjcmVlbi9TTVxcbnNpbGt3b3JtL01TXFxuc2lsa3kvVFJQXFxuc2lsbC9NU1xcbnNpbGxpbmVzcy9NXFxuc2lsbHkvVFJTTVBcXG5zaWxvL01TXFxuc2lsdC9HTURTXFxuc2lsdHkvVFJcXG5zaWx2ZXIvR01EU1xcbnNpbHZlcmZpc2gvTVNcXG5zaWx2ZXJzbWl0aC9NXFxuc2lsdmVyc21pdGhzXFxuc2lsdmVyd2FyZS9NXFxuc2lsdmVyeVxcbnNpbS9TTVxcbnNpbWlhbi9NU1xcbnNpbWlsYXIvWVxcbnNpbWlsYXJpdHkvRVNNXFxuc2ltaWxlL01TXFxuc2ltaWxpdHVkZS9FTVxcbnNpbW1lci9HTURTXFxuc2ltb25pemUvRFNHXFxuc2ltb255L01cXG5zaW1wYXRpY29cXG5zaW1wZXIvR01EU1xcbnNpbXBlcmluZy9ZXFxuc2ltcGxlL1RSUFxcbnNpbXBsZW1pbmRlZFxcbnNpbXBsZW5lc3MvTVxcbnNpbXBsZXRvbi9TTVxcbnNpbXBsZXhcXG5zaW1wbGljaXR5L01cXG5zaW1wbGlmaWNhdGlvbi9NXFxuc2ltcGxpZnkvRFNYTkdcXG5zaW1wbGlzdGljXFxuc2ltcGxpc3RpY2FsbHlcXG5zaW1wbHlcXG5zaW11bGFjcmFcXG5zaW11bGFjcnVtL1NcXG5zaW11bGF0ZS9FRFNHTlxcbnNpbXVsYXRpb24vRU1cXG5zaW11bGF0aW9uc1xcbnNpbXVsYXRvci9FTVNcXG5zaW11bGNhc3QvR01EU1xcbnNpbXVsdGFuZWl0eS9NXFxuc2ltdWx0YW5lb3VzL1lcXG5zaW4vQVNNXFxuc2luY2VcXG5zaW5jZXJlL0lZVFxcbnNpbmNlcmVyXFxuc2luY2VyaXR5L0lNXFxuc2luZS9NU1xcbnNpbmVjdXJlL01TXFxuc2luZXcvTVNcXG5zaW5ld3lcXG5zaW5mdWwvUFlcXG5zaW5mdWxuZXNzL01cXG5zaW5nL0JaR01EUllTXFxuc2luZ2Fsb25nL1NcXG5zaW5nZS9NU1xcbnNpbmdlaW5nXFxuc2luZ2VyL01cXG5zaW5naW5nL01cXG5zaW5nbGUvUE1HRFNcXG5zaW5nbGVuZXNzL01cXG5zaW5nbGVzL01cXG5zaW5nbGV0L1NcXG5zaW5nbGV0b24vU01cXG5zaW5nbGV0cmVlL1NNXFxuc2luZ3NvbmcvU01ER1xcbnNpbmd1bGFyL1NNWVxcbnNpbmd1bGFyaXR5L1NNXFxuc2luaXN0ZXJcXG5zaW5rL0JaR01SU1xcbnNpbmthYmxlL1VcXG5zaW5rZXIvTVxcbnNpbmtob2xlL1NNXFxuc2lubGVzc1xcbnNpbm5lZFxcbnNpbm5lci9NU1xcbnNpbm5pbmdcXG5zaW5vbG9neVxcbnNpbnVvc2l0eS9NXFxuc2ludW91cy9ZXFxuc2ludXMvTVNcXG5zaW51c2l0aXMvTVxcbnNpbnVzb2lkYWxcXG5zaXAvU01cXG5zaXBob24vR01EU1xcbnNpcHBlZFxcbnNpcHBlci9TTVxcbnNpcHBpbmdcXG5zaXIvU1hNTlxcbnNpcmUvQ01HRFNcXG5zaXJlbi9NXFxuc2lybG9pbi9TTVxcbnNpcm9jY28vU01cXG5zaXJyYWhcXG5zaXJyZWUvTVxcbnNpcy9NU1xcbnNpc2FsL01cXG5zaXNzaWZpZWRcXG5zaXNzeS9SU01UXFxuc2lzdGVyL0FTTVxcbnNpc3Rlcmhvb2QvTVNcXG5zaXN0ZXJsaW5lc3MvTVxcbnNpc3Rlcmx5L1BcXG5zaXQvU1xcbnNpdGFyL1NNXFxuc2l0YXJpc3QvTVNcXG5zaXRjb20vU01cXG5zaXRlL01HRFNcXG5zaXRlbWFwL1NNXFxuc2l0dGVyL1NNXFxuc2l0dGluZy9TTVxcbnNpdHVcXG5zaXR1YXRlL0RTWEdOXFxuc2l0dWF0aW9uL01cXG5zaXR1YXRpb25hbFxcbnNpeC9NU0hcXG5zaXhmb2xkXFxuc2l4cGVuY2UvTVNcXG5zaXhzaG9vdGVyL01cXG5zaXh0ZWVuL1NNSFxcbnNpeHRlZW50aC9NXFxuc2l4dGVlbnRoc1xcbnNpeHRoL01cXG5zaXh0aHNcXG5zaXh0aWV0aC9NXFxuc2l4dGlldGhzXFxuc2l4dHkvU01IXFxuc2l6YWJsZVxcbnNpemUnc1xcbnNpemUvQUdEU1xcbnNpemVyXFxuc2l6aW5nL01cXG5zaXp6bGUvRFJTTVpHXFxuc2thL01cXG5za2F0ZS9NWkdEUlNcXG5za2F0ZWJvYXJkL01EUlNaR1xcbnNrYXRlYm9hcmRlci9NXFxuc2thdGVib2FyZGluZy9NXFxuc2thdGVyL01cXG5za2F0aW5nL01cXG5za2VkYWRkbGUvTUdEU1xcbnNrZWV0L1pNUlxcbnNrZWluL01TXFxuc2tlbGV0YWxcXG5za2VsZXRvbi9TTVxcbnNrZXB0aWMvU01cXG5za2VwdGljYWwvWVxcbnNrZXB0aWNpc20vTVxcbnNrZXRjaC9NRFJTWkdcXG5za2V0Y2hib29rL1NcXG5za2V0Y2hlci9NXFxuc2tldGNoaWx5XFxuc2tldGNoaW5lc3MvTVxcbnNrZXRjaHBhZC9TXFxuc2tldGNoeS9SVFBcXG5za2V3L01EUlpHU1xcbnNrZXdiYWxkL1NcXG5za2V3ZXIvTURHXFxuc2tpL1NaR01EUlxcbnNraWJvYi9TXFxuc2tpZC9NU1xcbnNraWRkZWRcXG5za2lkZGluZ1xcbnNraWRwYW4vU1xcbnNraWVyL01cXG5za2lmZi9TTVxcbnNraWZmbGVcXG5za2lpbmcvTVxcbnNraWxsJ3NcXG5za2lsbC9DU0RcXG5za2lsbGVkL1VcXG5za2lsbGV0L1NNXFxuc2tpbGxmdWwvVVlcXG5za2lsbGZ1bG5lc3MvTVxcbnNraW0vTVNcXG5za2ltbWVkXFxuc2tpbW1lci9TTVxcbnNraW1taW5nXFxuc2tpbXAvU0RHXFxuc2tpbXBpbHlcXG5za2ltcGluZXNzL01cXG5za2ltcHkvUlRQXFxuc2tpbi9NU1xcbnNraW5jYXJlL01cXG5za2luZmxpbnQvTVNcXG5za2luZnVsXFxuc2tpbmhlYWQvTVNcXG5za2lubGVzc1xcbnNraW5uZWRcXG5za2lubmluZXNzL01cXG5za2lubmluZ1xcbnNraW5ueS9STVRQXFxuc2tpbnRcXG5za2ludGlnaHRcXG5za2lwL01TXFxuc2tpcHBlZFxcbnNraXBwZXIvU01ER1xcbnNraXBwaW5nXFxuc2tpcm1pc2gvWkdNRFJTXFxuc2tpcnQvU01ER1xcbnNraXQvTVNcXG5za2l0dGVyL0dTRFxcbnNraXR0aXNoL1lQXFxuc2tpdHRpc2huZXNzL01cXG5za2l0dGxlL1NcXG5za2l2ZS9EUlNaR1xcbnNraXZ2eS9EU01HXFxuc2tvYWwvU01cXG5za3VhL1NcXG5za3VsZHVnZ2VyeS9NXFxuc2t1bGsvU0RSWkdcXG5za3Vsa2VyL01cXG5za3VsbC9TTVxcbnNrdWxsY2FwL01TXFxuc2t1bmsvU01ER1xcbnNreS9HU01cXG5za3ljYXAvU01cXG5za3lkaXZlL0RSU1pHXFxuc2t5ZGl2ZXIvTVxcbnNreWRpdmluZy9NXFxuc2t5amFjay9KWkdTRFJcXG5za3lqYWNrZXIvTVxcbnNreWphY2tpbmcvTVxcbnNreWxhcmsvU0dNRFxcbnNreWxpZ2h0L01TXFxuc2t5bGluZS9TTVxcbnNreXJvY2tldC9HU01EXFxuc2t5c2NyYXBlci9TTVxcbnNreXdhcmQvU1xcbnNreXdyaXRlci9TTVxcbnNreXdyaXRpbmcvTVxcbnNsYWIvTVNcXG5zbGFiYmVkXFxuc2xhYmJpbmdcXG5zbGFjay9QWFpUR01ETlJZU1xcbnNsYWNrZW4vREdcXG5zbGFja2VyL01cXG5zbGFja25lc3MvTVxcbnNsYWNrcy9NXFxuc2xhZy9NU1xcbnNsYWdnZWRcXG5zbGFnZ2luZ1xcbnNsYWdoZWFwL1NcXG5zbGFpblxcbnNsYWtlL0dEU1xcbnNsYWxvbS9NU0RHXFxuc2xhbS9NU1xcbnNsYW1tZWRcXG5zbGFtbWVyL1NNXFxuc2xhbW1pbmdcXG5zbGFuZGVyL01aR0RSU1xcbnNsYW5kZXJlci9NXFxuc2xhbmRlcm91c1xcbnNsYW5nL01cXG5zbGFuZ3kvUlRcXG5zbGFudC9NU0RHXFxuc2xhbnRpbmcvWVxcbnNsYW50d2lzZVxcbnNsYXAvTVNcXG5zbGFwZGFzaFxcbnNsYXBoYXBweVxcbnNsYXBwZWRcXG5zbGFwcGVyL1NcXG5zbGFwcGluZ1xcbnNsYXBzdGljay9NXFxuc2xhc2gvTURSU1pHXFxuc2xhc2hlci9NXFxuc2xhdC9NREdTXFxuc2xhdGUvU01cXG5zbGF0aGVyL1NER1xcbnNsYXR0ZWRcXG5zbGF0dGVybi9TTVlcXG5zbGF1Z2h0ZXIvTURSWkdTXFxuc2xhdWdodGVyZXIvTVxcbnNsYXVnaHRlcmhvdXNlL01TXFxuc2xhdmUvRFJTTVpHXFxuc2xhdmVob2xkZXIvTVNcXG5zbGF2ZXIvTURHXFxuc2xhdmVyeS9NXFxuc2xhdmlzaC9QWVxcbnNsYXZpc2huZXNzL01cXG5zbGF3L01cXG5zbGF5L0RSWkdKU1xcbnNsYXllci9NXFxuc2xheWluZy9NXFxuc2xlYXplL1NNXFxuc2xlYXplYmFnL1NcXG5zbGVhemViYWxsL1NcXG5zbGVhemlseVxcbnNsZWF6aW5lc3MvTVxcbnNsZWF6eS9QUlRcXG5zbGVkL01TXFxuc2xlZGRlZFxcbnNsZWRkZXIvU01cXG5zbGVkZGluZ1xcbnNsZWRnZS9EU01HXFxuc2xlZGdlaGFtbWVyL0dTTURcXG5zbGVlay9TRFJZVEdQXFxuc2xlZWtuZXNzL01cXG5zbGVlcC9TTVJaR1xcbnNsZWVwZXIvTVxcbnNsZWVwaWx5XFxuc2xlZXBpbmVzcy9NXFxuc2xlZXBsZXNzL1BZXFxuc2xlZXBsZXNzbmVzcy9NXFxuc2xlZXBvdmVyL1NNXFxuc2xlZXB3YWxrL1pHU0RSXFxuc2xlZXB3YWxrZXIvTVxcbnNsZWVwd2Fsa2luZy9NXFxuc2xlZXB3ZWFyL01cXG5zbGVlcHkvUlBUXFxuc2xlZXB5aGVhZC9NU1xcbnNsZWV0L1NNREdcXG5zbGVldHlcXG5zbGVldmUvRFNNXFxuc2xlZXZlbGVzc1xcbnNsZWlnaC9NREdcXG5zbGVpZ2hzXFxuc2xlaWdodC9TTVxcbnNsZW5kZXIvUFJUXFxuc2xlbmRlcml6ZS9EU0dcXG5zbGVuZGVybmVzcy9NXFxuc2xlcHRcXG5zbGV1dGgvTUdcXG5zbGV1dGhzXFxuc2xldy9NREdTXFxuc2xpY2UvRFJTTVpHXFxuc2xpY2VyL01cXG5zbGljay9TTURSWVpUR1BcXG5zbGlja2VyL01cXG5zbGlja25lc3MvTVxcbnNsaWRcXG5zbGlkZS9SU01aR1xcbnNsaWRlci9NXFxuc2xpZGVzaG93L01TXFxuc2xpZ2h0L1NNRFJZVEdQXFxuc2xpZ2h0bmVzcy9NXFxuc2xpbS9QU1xcbnNsaW1lL01cXG5zbGltaW5lc3MvTVxcbnNsaW1saW5lXFxuc2xpbW1lZFxcbnNsaW1tZXIvU1xcbnNsaW1tZXN0XFxuc2xpbW1pbmcvTVxcbnNsaW1uZXNzL01cXG5zbGlteS9SVFBcXG5zbGluZy9TTUdcXG5zbGluZ2JhY2svU1xcbnNsaW5nc2hvdC9TTVxcbnNsaW5rL1NHXFxuc2xpbmt5L1JUXFxuc2xpcC9NU1xcbnNsaXBjYXNlL01TXFxuc2xpcGNvdmVyL01TXFxuc2xpcGtub3QvTVNcXG5zbGlwcGFnZS9NU1xcbnNsaXBwZWRcXG5zbGlwcGVyL1NNXFxuc2xpcHBlcmluZXNzL01cXG5zbGlwcGVyeS9QUlRcXG5zbGlwcGluZ1xcbnNsaXBweVxcbnNsaXBzaG9kXFxuc2xpcHN0cmVhbS9TTVxcbnNsaXB3YXkvU01cXG5zbGl0L01TXFxuc2xpdGhlci9TR01EXFxuc2xpdGhlcnlcXG5zbGl0dGVyXFxuc2xpdHRpbmdcXG5zbGl2ZXIvR1NNRFxcbnNsb2IvTVNcXG5zbG9iYmVkXFxuc2xvYmJlci9NRFNHXFxuc2xvYmJlcnlcXG5zbG9iYmluZ1xcbnNsb2UvTVNcXG5zbG9nL01TXFxuc2xvZ2FuL1NNXFxuc2xvZ2FuZWVyaW5nXFxuc2xvZ2dlZFxcbnNsb2dnaW5nXFxuc2xvb3AvU01cXG5zbG9wL01ER1NcXG5zbG9wZS9TTVxcbnNsb3BwZWRcXG5zbG9wcGlseVxcbnNsb3BwaW5lc3MvTVxcbnNsb3BwaW5nXFxuc2xvcHB5L1BUUlxcbnNsb3BzL01cXG5zbG9zaC9EU0dcXG5zbG90L01TXFxuc2xvdGgvTVxcbnNsb3RoZnVsL1lQXFxuc2xvdGhmdWxuZXNzL01cXG5zbG90aHNcXG5zbG90dGVkXFxuc2xvdHRpbmdcXG5zbG91Y2gvWkdNRFJTXFxuc2xvdWNoZXIvTVxcbnNsb3VjaHkvVFJcXG5zbG91Z2gvR01EXFxuc2xvdWdoc1xcbnNsb3Zlbi9TTVlcXG5zbG92ZW5saW5lc3MvTVxcbnNsb3Zlbmx5L1BUUlxcbnNsb3cvRFJZVEdTUFxcbnNsb3djb2FjaC9TXFxuc2xvd2Rvd24vU01cXG5zbG93bmVzcy9NXFxuc2xvd3Bva2UvU01cXG5zbHVkZ2UvTVxcbnNsdWRneS9SVFxcbnNsdWUvTUdEU1xcbnNsdWcvTVNcXG5zbHVnZ2FyZC9NU1xcbnNsdWdnZWRcXG5zbHVnZ2VyL1NNXFxuc2x1Z2dpbmdcXG5zbHVnZ2lzaC9QWVxcbnNsdWdnaXNobmVzcy9NXFxuc2x1aWNlL0RTTUdcXG5zbHVtL01TXFxuc2x1bWJlci9HU01EXFxuc2x1bWJlcm91c1xcbnNsdW1kb2cvU01cXG5zbHVtbG9yZC9NU1xcbnNsdW1tZWRcXG5zbHVtbWVyXFxuc2x1bW1pbmdcXG5zbHVtbXkvUlRcXG5zbHVtcC9TTURHXFxuc2x1bmdcXG5zbHVua1xcbnNsdXIvTVNcXG5zbHVycC9TTURHXFxuc2x1cnJlZFxcbnNsdXJyaW5nXFxuc2x1cnJ5L01cXG5zbHVzaC9NXFxuc2x1c2hpbmVzcy9NXFxuc2x1c2h5L1JQVFxcbnNsdXQvTVNcXG5zbHV0dGlzaFxcbnNsdXR0eS9SVFxcbnNseS9UUllcXG5zbHluZXNzL01cXG5zbWFjay9TTURSWkdcXG5zbWFja2VyL01cXG5zbWFsbC9TTVJUUFxcbnNtYWxsaG9sZGVyL1NcXG5zbWFsbGhvbGRpbmcvU1xcbnNtYWxsaXNoXFxuc21hbGxuZXNzL01cXG5zbWFsbHBveC9NXFxuc21hcm15L1JUXFxuc21hcnQvU01ETlJZWFRHUFxcbnNtYXJ0ZW4vREdcXG5zbWFydG5lc3MvTVxcbnNtYXJ0cGhvbmUvU01cXG5zbWFydHMvTVxcbnNtYXJ0d2F0Y2gvTVNcXG5zbWFydHkvU01cXG5zbWFydHlwYW50cy9NXFxuc21hc2gvTURSU1pHXFxuc21hc2hlci9NXFxuc21hc2h1cC9TTVxcbnNtYXR0ZXJpbmcvTVNcXG5zbWVhci9TTURHXFxuc21lYXJ5L1JUXFxuc21lbGwvU01ER1xcbnNtZWxsaW5lc3MvTVxcbnNtZWxseS9SUFRcXG5zbWVsdC9TTURSWkdcXG5zbWVsdGVyL01cXG5zbWlkZ2VuL01TXFxuc21pbGF4L01cXG5zbWlsZS9EU01HXFxuc21pbGV5L1NNXFxuc21pbGluZy9ZXFxuc21pcmNoL0dNRFNcXG5zbWlyay9TTURHXFxuc21pdGUvU0dcXG5zbWl0aC9NXFxuc21pdGhlcmVlbnMvTVxcbnNtaXRoc1xcbnNtaXRoeS9TTVxcbnNtaXR0ZW5cXG5zbW9jay9TTURHXFxuc21vY2tpbmcvTVxcbnNtb2cvTVNcXG5zbW9nZ3kvUlRcXG5zbW9rZS9EUlNNWkdcXG5zbW9rZWhvdXNlL01TXFxuc21va2VsZXNzXFxuc21va2VyL01cXG5zbW9rZXNjcmVlbi9TTVxcbnNtb2tlc3RhY2svU01cXG5zbW9rZXlcXG5zbW9raW5lc3MvTVxcbnNtb2tpbmcvTVxcbnNtb2t5L1JUUFxcbnNtb2xkZXIvU0dNRFxcbnNtb29jaC9NRFNHXFxuc21vb2NoeVxcbnNtb290aC9QRFJZVEdcXG5zbW9vdGhpZS9NU1xcbnNtb290aG5lc3MvTVxcbnNtb290aHNcXG5zbW9yZ2FzYm9yZC9TTVxcbnNtb3RlXFxuc21vdGhlci9HU01EXFxuc211ZGdlL0RTTUdcXG5zbXVkZ3kvVFJcXG5zbXVnL1lQXFxuc211Z2dlclxcbnNtdWdnZXN0XFxuc211Z2dsZS9aR0RSU1xcbnNtdWdnbGVyL01cXG5zbXVnZ2xpbmcvTVxcbnNtdWduZXNzL01cXG5zbXVyZi9TXFxuc211dC9NU1xcbnNtdXR0aW5lc3MvTVxcbnNtdXR0eS9UUlBcXG5zbmFjay9TTURHXFxuc25hZmZsZS9EU01HXFxuc25hZnUvU01cXG5zbmFnL01TXFxuc25hZ2dlZFxcbnNuYWdnaW5nXFxuc25haWwvU01ER1xcbnNuYWtlL0RTTUdcXG5zbmFrZWJpdGUvTVNcXG5zbmFrZWxpa2VcXG5zbmFrZXNraW5cXG5zbmFreS9SVFxcbnNuYXAnc1xcbnNuYXAvVVNcXG5zbmFwZHJhZ29uL1NNXFxuc25hcHBlZC9VXFxuc25hcHBlci9NU1xcbnNuYXBwaWx5XFxuc25hcHBpbmVzcy9NXFxuc25hcHBpbmcvVVxcbnNuYXBwaXNoL1lQXFxuc25hcHBpc2huZXNzL01cXG5zbmFwcHkvVFJQXFxuc25hcHNob3QvU01cXG5zbmFyZS9EU01HXFxuc25hcmYvU0RHXFxuc25hcmsvU1xcbnNuYXJreS9UUlxcbnNuYXJsJ3NcXG5zbmFybC9VU0RHXFxuc25hcmxpbmcvWVxcbnNuYXJseS9UUlxcbnNuYXRjaC9aR01EUlNcXG5zbmF0Y2hlci9NXFxuc25henppbHlcXG5zbmF6enkvVFJcXG5zbmVhay9TTURSWkdcXG5zbmVha2VyL01cXG5zbmVha2lseVxcbnNuZWFraW5lc3MvTVxcbnNuZWFraW5nL1lcXG5zbmVha3kvVFJQXFxuc25lZXIvU0pNREdcXG5zbmVlcmluZy9ZXFxuc25lZXplL0RTTUdcXG5zbmljay9TRFJaR1xcbnNuaWNrZXIvTURHXFxuc25pZGUvUllUXFxuc25pZmYvU01EUlpHXFxuc25pZmZlci9NXFxuc25pZmZsZS9EU01HXFxuc25pZmZ5L1JUXFxuc25pZnRlci9TTVxcbnNuaXAvTURSWkdTXFxuc25pcGUvU01cXG5zbmlwZXIvTVxcbnNuaXBwZWRcXG5zbmlwcGV0L1NNXFxuc25pcHBpbmdcXG5zbmlwcHkvUlRcXG5zbmlwcy9NXFxuc25pdC9NU1xcbnNuaXRjaC9NRFNHXFxuc25pdmVsL1NNRFJaR1xcbnNuaXZlbGVyL01cXG5zbm9iL01TXFxuc25vYmJlcnkvTVxcbnNub2JiaXNoL1BZXFxuc25vYmJpc2huZXNzL01cXG5zbm9iYnkvUlRcXG5zbm9nL1NcXG5zbm9nZ2VkXFxuc25vZ2dpbmdcXG5zbm9vZC9TTVxcbnNub29rZXIvTURTR1xcbnNub29wL1NNRFJaR1xcbnNub29wZXIvTVxcbnNub29weS9UUlxcbnNub290L1NNXFxuc25vb3RpbHlcXG5zbm9vdGluZXNzL01cXG5zbm9vdHkvUFRSXFxuc25vb3plL0RTTUdcXG5zbm9yZS9EUlNNWkdcXG5zbm9yZXIvTVxcbnNub3JrZWwvWkdNRFJTXFxuc25vcmtlbGVyL01cXG5zbm9ya2VsaW5nL01cXG5zbm9ydC9TTURSWkdcXG5zbm9ydGVyL01cXG5zbm90L01TXFxuc25vdHRpbHlcXG5zbm90dGluZXNzL01cXG5zbm90dHkvVFBSXFxuc25vdXQvU01cXG5zbm93L01ER1NcXG5zbm93YmFsbC9HU01EXFxuc25vd2JhbmsvU01cXG5zbm93YmlyZC9TTVxcbnNub3dibG93ZXIvTVNcXG5zbm93Ym9hcmQvWkdNRFJTXFxuc25vd2JvYXJkZXIvTVxcbnNub3dib2FyZGluZy9NXFxuc25vd2JvdW5kXFxuc25vd2RyaWZ0L1NNXFxuc25vd2Ryb3AvU01cXG5zbm93ZmFsbC9TTVxcbnNub3dmaWVsZC9TTVxcbnNub3dmbGFrZS9TTVxcbnNub3dpbmVzcy9NXFxuc25vd2xpbmVcXG5zbm93bWFuL01cXG5zbm93bWVuXFxuc25vd21vYmlsZS9EU01HXFxuc25vd3Bsb3cvU0dNRFxcbnNub3dzaGVkXFxuc25vd3Nob2UvU01cXG5zbm93c2hvZWluZ1xcbnNub3dzdG9ybS9TTVxcbnNub3dzdWl0L1NNXFxuc25vd3kvUFJUXFxuc251Yi9NU1xcbnNudWJiZWRcXG5zbnViYmluZ1xcbnNudWZmL1NNRFJZWkdcXG5zbnVmZmJveC9NU1xcbnNudWZmZXIvTVxcbnNudWZmbGUvTUdEU1xcbnNudWcvTVlTUFxcbnNudWdnZWRcXG5zbnVnZ2VyXFxuc251Z2dlc3RcXG5zbnVnZ2luZ1xcbnNudWdnbGUvTUdEU1xcbnNudWduZXNzL01cXG5zb1xcbnNvYWsvTURHU0pcXG5zb2FraW5nL01cXG5zb2FwL01ER1NcXG5zb2FwYm94L01TXFxuc29hcGluZXNzL01cXG5zb2Fwc3RvbmUvTVxcbnNvYXBzdWRzL01cXG5zb2FweS9SUFRcXG5zb2FyL01ER1NcXG5zb2IvU01cXG5zb2JiZWRcXG5zb2JiaW5nL1lcXG5zb2Jlci9TRFJZUFRHXFxuc29iZXJuZXNzL01cXG5zb2JyaWV0eS9JTVxcbnNvYnJpcXVldC9TTVxcbnNvY1xcbnNvY2Nlci9NXFxuc29jaWFiaWxpdHkvTVxcbnNvY2lhYmxlL1NNXFxuc29jaWFibHlcXG5zb2NpYWwvU01ZXFxuc29jaWFsaXNtL01cXG5zb2NpYWxpc3QvU01cXG5zb2NpYWxpc3RpY1xcbnNvY2lhbGl0ZS9TTVxcbnNvY2lhbGl6YXRpb24vTVxcbnNvY2lhbGl6ZS9EU0dcXG5zb2NpZXRhbFxcbnNvY2lldHkvU01cXG5zb2Npb2Vjb25vbWljXFxuc29jaW9lY29ub21pY2FsbHlcXG5zb2Npb2xvZ2ljYWwvWVxcbnNvY2lvbG9naXN0L1NNXFxuc29jaW9sb2d5L01cXG5zb2Npb3BhdGgvTVxcbnNvY2lvcGF0aHNcXG5zb2Npb3BvbGl0aWNhbFxcbnNvY2svTURHU1xcbnNvY2tldC9TTVxcbnNvY2tleWUvU01cXG5zb2QvU01cXG5zb2RhL01TXFxuc29kZGVkXFxuc29kZGVuL1lcXG5zb2RkaW5nXFxuc29kaXVtL01cXG5zb2RvbWl0ZS9NU1xcbnNvZG9taXplL0dEU1xcbnNvZG9teS9NXFxuc29ldmVyXFxuc29mYS9NU1xcbnNvZnQvTlJZWFRQXFxuc29mdGJhY2tcXG5zb2Z0YmFsbC9NU1xcbnNvZnRib3VuZFxcbnNvZnRjb3ZlclxcbnNvZnRlbi9EUlpHXFxuc29mdGVuZXIvTVxcbnNvZnRoZWFydGVkXFxuc29mdG5lc3MvTVxcbnNvZnR3YXJlL01cXG5zb2Z0d29vZC9TTVxcbnNvZnR5L1NNXFxuc29nZ2lseVxcbnNvZ2dpbmVzcy9NXFxuc29nZ3kvUlRQXFxuc29pZ25lXFxuc29pZ25lZVxcbnNvaWwvTURHU1xcbnNvaWxlZC9VXFxuc29pcmVlL1NNXFxuc29qb3Vybi9aR01EUlNcXG5zb2pvdXJuZXIvTVxcbnNvbC9TTVxcbnNvbGFjZS9EU01HXFxuc29sYXJcXG5zb2xhcmlhXFxuc29sYXJpdW0vTVxcbnNvbGRcXG5zb2xkZXIvWkdTTURSXFxuc29sZGVyZXIvTVxcbnNvbGRpZXIvTURZU0dcXG5zb2xkaWVyeS9NXFxuc29sZS9GU0RHTVxcbnNvbGVjaXNtL1NNXFxuc29sZWx5XFxuc29sZW1uL1BUUllcXG5zb2xlbW5lc3MvTVxcbnNvbGVtbmlmeS9EU0dcXG5zb2xlbW5pdHkvU01cXG5zb2xlbW5pemF0aW9uL01cXG5zb2xlbW5pemUvRFNHXFxuc29sZW1ubmVzcy9NXFxuc29sZW5vaWQvTVNcXG5zb2xpY2l0L0dEU1xcbnNvbGljaXRhdGlvbi9TTVxcbnNvbGljaXRlZC9VXFxuc29saWNpdG9yL1NNXFxuc29saWNpdG91cy9QWVxcbnNvbGljaXRvdXNuZXNzL01cXG5zb2xpY2l0dWRlL01cXG5zb2xpZC9QU01SWVRcXG5zb2xpZGFyaXR5L01cXG5zb2xpZGlcXG5zb2xpZGlmaWNhdGlvbi9NXFxuc29saWRpZnkvRFNOR1xcbnNvbGlkaXR5L01cXG5zb2xpZG5lc3MvTVxcbnNvbGlkdXMvTVxcbnNvbGlsb3F1aWVzXFxuc29saWxvcXVpemUvRFNHXFxuc29saWxvcXV5L01cXG5zb2xpcHNpc20vTVxcbnNvbGlwc2lzdGljXFxuc29saXRhaXJlL01TXFxuc29saXRhcmluZXNzL01cXG5zb2xpdGFyeS9TTVBcXG5zb2xpdHVkZS9NXFxuc29sby9NREdTXFxuc29sb2lzdC9NU1xcbnNvbHN0aWNlL01TXFxuc29sdWJpbGl0eS9JTVxcbnNvbHVibGUvTVNcXG5zb2x1dGUnc1xcbnNvbHV0ZS9BWE5cXG5zb2x1dGVzXFxuc29sdXRpb24ncy9BRVxcbnNvbHZhYmxlL0lVXFxuc29sdmUvRUFEU0dcXG5zb2x2ZWQvVVxcbnNvbHZlbmN5L0lNXFxuc29sdmVudC9JTVNcXG5zb2x2ZXIvU01cXG5zb21hdGljXFxuc29tYXRvc2Vuc29yeVxcbnNvbWJlci9QWVxcbnNvbWJlcm5lc3MvTVxcbnNvbWJyZXJvL01TXFxuc29tZVxcbnNvbWVib2R5L1NNXFxuc29tZWRheVxcbnNvbWVob3dcXG5zb21lb25lL01TXFxuc29tZXBsYWNlXFxuc29tZXJzYXVsdC9NREdTXFxuc29tZXJzZXQvU01cXG5zb21lcnNldHRlZFxcbnNvbWVyc2V0dGluZ1xcbnNvbWV0aGluZy9TTVxcbnNvbWV0aW1lL1NcXG5zb21ld2F5L1NcXG5zb21ld2hhdC9TXFxuc29tZXdoZXJlXFxuc29tbmFtYnVsaXNtL01cXG5zb21uYW1idWxpc3QvU01cXG5zb21ub2xlbmNlL01cXG5zb21ub2xlbnRcXG5zb24vU01cXG5zb25hci9TTVxcbnNvbmF0YS9TTVxcbnNvbmF0aW5hL1NNXFxuc29uZy9NU1xcbnNvbmdiaXJkL1NNXFxuc29uZ2Jvb2svU01cXG5zb25nZmVzdC9TTVxcbnNvbmdzdGVyL01TXFxuc29uZ3N0cmVzcy9NU1xcbnNvbmd3cml0ZXIvU01cXG5zb25nd3JpdGluZ1xcbnNvbmljXFxuc29ubmV0L1NNXFxuc29ubnkvU01cXG5zb25vZ3JhbS9TTVxcbnNvbm9yaXR5L01cXG5zb25vcm91cy9ZUFxcbnNvbm9yb3VzbmVzcy9NXFxuc29uc29mYml0Y2hlc1xcbnNvb24vUlRcXG5zb290L01cXG5zb290aC9NRFJTWkdcXG5zb290aGVcXG5zb290aGVyL01cXG5zb290aGluZy9ZXFxuc29vdGhzYXllci9NU1xcbnNvb3Roc2F5aW5nL01cXG5zb290eS9SVFxcbnNvcC9TTVxcbnNvcGhcXG5zb3BoaXNtL01cXG5zb3BoaXN0L01TXFxuc29waGlzdGljXFxuc29waGlzdGljYWxcXG5zb3BoaXN0aWNhdGUvRFNNR05cXG5zb3BoaXN0aWNhdGVkL1VcXG5zb3BoaXN0aWNhdGlvbi9NXFxuc29waGlzdHJ5L1NNXFxuc29waG9tb3JlL01TXFxuc29waG9tb3JpY1xcbnNvcG9yaWZpYy9NU1xcbnNvcG9yaWZpY2FsbHlcXG5zb3BwZWRcXG5zb3BwaW5nXFxuc29wcHkvUlRcXG5zb3ByYW5vL01TXFxuc29yYmV0L1NNXFxuc29yY2VyZXIvTVNcXG5zb3JjZXJlc3MvTVNcXG5zb3JjZXJ5L01cXG5zb3JkaWQvUFlcXG5zb3JkaWRuZXNzL01cXG5zb3JlL01ZVFJTUFxcbnNvcmVoZWFkL01TXFxuc29yZW5lc3MvTVxcbnNvcmdodW0vTVxcbnNvcm9yaXR5L1NNXFxuc29ycmVsL1NNXFxuc29ycmlseVxcbnNvcnJpbmVzcy9NXFxuc29ycm93L1NNREdcXG5zb3Jyb3dmdWwvWVBcXG5zb3Jyb3dmdWxuZXNzL01cXG5zb3JyeS9SVFBcXG5zb3J0L0ZBU0dETVxcbnNvcnRhXFxuc29ydGVkL1VcXG5zb3J0ZXIvU01cXG5zb3J0aWUvRFNNXFxuc29ydGllaW5nXFxuc290L1NNXFxuc290dGlzaFxcbnNvdSd3ZXN0ZXJcXG5zb3UvU01IXFxuc291ZmZsZS9TTVxcbnNvdWdoL01ER1xcbnNvdWdoc1xcbnNvdWdodC9VXFxuc291ay9TXFxuc291bC9NU1xcbnNvdWxmdWwvWVBcXG5zb3VsZnVsbmVzcy9NXFxuc291bGxlc3MvWVBcXG5zb3VsbWF0ZS9TTVxcbnNvdW5kL0pQU01EUllaVEdcXG5zb3VuZGFsaWtlL1NcXG5zb3VuZGJhci9TXFxuc291bmRiaXRlL1NcXG5zb3VuZGJvYXJkL01TXFxuc291bmRjaGVjay9TXFxuc291bmRlci9NXFxuc291bmRpbmcvTVxcbnNvdW5kbGVzcy9ZXFxuc291bmRuZXNzL1VNXFxuc291bmRwcm9vZi9HRFNcXG5zb3VuZHByb29maW5nL01cXG5zb3VuZHNjYXBlL1NcXG5zb3VuZHRyYWNrL1NNXFxuc291cC9NREdTXFxuc291cGNvbi9NU1xcbnNvdXB5L1JUXFxuc291ci9NRFJZVEdTUFxcbnNvdXJjZS9BRFNNR1xcbnNvdXJkb3VnaC9NXFxuc291cmRvdWdoc1xcbnNvdXJpc2hcXG5zb3VybmVzcy9NXFxuc291cnB1c3MvTVNcXG5zb3VzYXBob25lL01TXFxuc291c2UvRFNNR1xcbnNvdXRoL01cXG5zb3V0aGJvdW5kXFxuc291dGhlYXN0L1pNUlxcbnNvdXRoZWFzdGVyL01ZXFxuc291dGhlYXN0ZXJuXFxuc291dGhlYXN0d2FyZC9TXFxuc291dGhlcmx5L1NNXFxuc291dGhlcm4vU1pNUlxcbnNvdXRoZXJuZXIvTVxcbnNvdXRoZXJubW9zdFxcbnNvdXRocGF3L1NNXFxuc291dGh3YXJkL01TXFxuc291dGh3ZXN0L1pNUlxcbnNvdXRod2VzdGVyL01ZXFxuc291dGh3ZXN0ZXJuXFxuc291dGh3ZXN0d2FyZC9TXFxuc291dmVuaXIvU01cXG5zb3ZlcmVpZ24vU01cXG5zb3ZlcmVpZ250eS9NXFxuc292aWV0L1NNXFxuc293J3NcXG5zb3cvQVNHRFxcbnNvd2VyL1NNXFxuc293bi9BXFxuc295L01cXG5zb3liZWFuL01TXFxuc296emxlZFxcbnNwYS9TTVxcbnNwYWNlL0RSU01aR1xcbnNwYWNlY3JhZnQvTVNcXG5zcGFjZWZsaWdodC9NU1xcbnNwYWNlbWFuL01cXG5zcGFjZW1lblxcbnNwYWNlcG9ydC9TTVxcbnNwYWNlci9NXFxuc3BhY2VzaGlwL1NNXFxuc3BhY2VzdWl0L1NNXFxuc3BhY2V0aW1lXFxuc3BhY2V3YWxrL1NHTURcXG5zcGFjZXdvbWFuL01cXG5zcGFjZXdvbWVuXFxuc3BhY2V5XFxuc3BhY2lhbFxcbnNwYWNpZXJcXG5zcGFjaWVzdFxcbnNwYWNpbmVzcy9NXFxuc3BhY2luZy9NXFxuc3BhY2lvdXMvWVBcXG5zcGFjaW91c25lc3MvTVxcbnNwYWRlL0RTTUdcXG5zcGFkZWZ1bC9NU1xcbnNwYWRld29yay9NXFxuc3BhZGljZXNcXG5zcGFkaXgvTVxcbnNwYWdoZXR0aS9NXFxuc3Bha2VcXG5zcGFtL01TXFxuc3BhbW1lZFxcbnNwYW1tZXIvU01cXG5zcGFtbWluZ1xcbnNwYW4vTVNcXG5zcGFuZGV4L01cXG5zcGFuZ2xlL0RTTUdcXG5zcGFuZ2x5XFxuc3BhbmllbC9TTVxcbnNwYW5rL1NNREdKXFxuc3BhbmtpbmcvTVxcbnNwYW5uZWRcXG5zcGFubmVyL1NNXFxuc3Bhbm5pbmdcXG5zcGFyL01TXFxuc3BhcmUvRFJTTVlUR1BcXG5zcGFyZW5lc3MvTVxcbnNwYXJlcmlicy9NXFxuc3BhcmluZy9VWVxcbnNwYXJrL1NNRFlHXFxuc3BhcmtsZS9EUlNNWkdcXG5zcGFya2xlci9NXFxuc3Bhcmt5L1JUXFxuc3BhcnJlZFxcbnNwYXJyaW5nXFxuc3BhcnJvdy9TTVxcbnNwYXJyb3doYXdrL1NcXG5zcGFyc2UvUllUUFxcbnNwYXJzZW5lc3MvTVxcbnNwYXJzaXR5L01cXG5zcGFydGFuXFxuc3Bhc20vU01cXG5zcGFzbW9kaWNcXG5zcGFzbW9kaWNhbGx5XFxuc3Bhc3RpYy9TTVxcbnNwYXQvTVNcXG5zcGF0ZS9TTVxcbnNwYXRoZS9TTVxcbnNwYXRpYWwvWVxcbnNwYXR0ZWRcXG5zcGF0dGVyL1NHTURcXG5zcGF0dGluZ1xcbnNwYXR1bGEvU01cXG5zcGF2aW4vTURcXG5zcGF3bi9TTURHXFxuc3BheS9ER1NcXG5zcGVhay9TUlpHSlxcbnNwZWFrZWFzeS9TTVxcbnNwZWFrZXIvTVxcbnNwZWFrZXJwaG9uZS9TXFxuc3BlYXIvU01ER1xcbnNwZWFyZmlzaC9HTURTXFxuc3BlYXJndW5cXG5zcGVhcmhlYWQvR01EU1xcbnNwZWFybWludC9NXFxuc3BlYy9NU1xcbnNwZWNpYWwvU01ZXFxuc3BlY2lhbGlzbS9TXFxuc3BlY2lhbGlzdC9NU1xcbnNwZWNpYWxpemF0aW9uL01TXFxuc3BlY2lhbGl6ZS9HRFNcXG5zcGVjaWFsdHkvU01cXG5zcGVjaWUvU01cXG5zcGVjaWVzL01cXG5zcGVjaWZcXG5zcGVjaWZpYWJsZVxcbnNwZWNpZmljL01TXFxuc3BlY2lmaWNhbGx5XFxuc3BlY2lmaWNhdGlvbi9NXFxuc3BlY2lmaWNpdHkvTVxcbnNwZWNpZmllZC9VXFxuc3BlY2lmeS9YTlpEUlNHXFxuc3BlY2ltZW4vU01cXG5zcGVjaW91cy9ZUFxcbnNwZWNpb3VzbmVzcy9NXFxuc3BlY2svU01ER1xcbnNwZWNrbGUvTUdEU1xcbnNwZWNzL01cXG5zcGVjdGFjbGUvU01cXG5zcGVjdGFjbGVzL01cXG5zcGVjdGFjdWxhci9NWVNcXG5zcGVjdGF0ZS9EU0dcXG5zcGVjdGF0b3IvU01cXG5zcGVjdGVyL0FNU1xcbnNwZWN0cmFcXG5zcGVjdHJhbFxcbnNwZWN0cm9tZXRlci9NU1xcbnNwZWN0cm9zY29wZS9NU1xcbnNwZWN0cm9zY29waWNcXG5zcGVjdHJvc2NvcHkvTVxcbnNwZWN0cnVtL01cXG5zcGVjdWxhdGUvRFNYR05WXFxuc3BlY3VsYXRpb24vTVxcbnNwZWN1bGF0aXZlL1lcXG5zcGVjdWxhdG9yL01TXFxuc3BlZFxcbnNwZWVjaC9NU1xcbnNwZWVjaGlmeS9EU0dcXG5zcGVlY2hsZXNzL1lQXFxuc3BlZWNobGVzc25lc3MvTVxcbnNwZWVjaHdyaXRlci9TXFxuc3BlZWQvU01SWkdcXG5zcGVlZGJvYXQvU01cXG5zcGVlZGVyL01cXG5zcGVlZGlseVxcbnNwZWVkaW5lc3MvTVxcbnNwZWVkaW5nL01cXG5zcGVlZG9tZXRlci9NU1xcbnNwZWVkc3Rlci9TTVxcbnNwZWVkdXAvTVNcXG5zcGVlZHdheS9TTVxcbnNwZWVkd2VsbC9NXFxuc3BlZWR5L1RQUlxcbnNwZWxlb2xvZ2ljYWxcXG5zcGVsZW9sb2dpc3QvTVNcXG5zcGVsZW9sb2d5L01cXG5zcGVsbC9KU01EUlpHXFxuc3BlbGxiaW5kL1pHUlNcXG5zcGVsbGJpbmRlci9NXFxuc3BlbGxib3VuZFxcbnNwZWxsY2hlY2svTURSWkdTXFxuc3BlbGxjaGVja2VyL01cXG5zcGVsbGRvd24vU01cXG5zcGVsbGVyL01cXG5zcGVsbGluZy9NXFxuc3BlbHVua2VyL01TXFxuc3BlbHVua2luZy9NXFxuc3BlbmQvQlNSWkdcXG5zcGVuZGVyL01cXG5zcGVuZGluZy9NXFxuc3BlbmR0aHJpZnQvTVNcXG5zcGVudC9VXFxuc3Blcm0vU01cXG5zcGVybWF0b3pvYVxcbnNwZXJtYXRvem9vbi9NXFxuc3Blcm1pY2lkYWxcXG5zcGVybWljaWRlL01TXFxuc3Bldy9NRFJaR1NcXG5zcGV3ZXIvTVxcbnNwaGFnbnVtL01TXFxuc3BoZXJlL1NNXFxuc3BoZXJpY2FsL1lcXG5zcGhlcm9pZC9TTVxcbnNwaGVyb2lkYWxcXG5zcGhpbmN0ZXIvTVNcXG5zcGhpbngvTVNcXG5zcGljL1NcXG5zcGljZS9EU01HXFxuc3BpY2lseVxcbnNwaWNpbmVzcy9NXFxuc3BpY3VsZS9NU1xcbnNwaWN5L1BSVFxcbnNwaWRlci9TTVxcbnNwaWRlcndlYi9NU1xcbnNwaWRlcnlcXG5zcGllbC9TTURHXFxuc3BpZmYvU0RHXFxuc3BpZmZ5L1RSXFxuc3BpZ290L1NNXFxuc3Bpa2UvRFNNR1xcbnNwaWtpbmVzcy9NXFxuc3Bpa3kvUlBUXFxuc3BpbGwvU01ER1xcbnNwaWxsYWdlL01TXFxuc3BpbGxvdmVyL1NNXFxuc3BpbGx3YXkvTVNcXG5zcGluL01TXFxuc3BpbmFjaC9NXFxuc3BpbmFsL1NNWVxcbnNwaW5kbGUvTUdEU1xcbnNwaW5kbHkvVFJcXG5zcGluZS9TTVxcbnNwaW5lbGVzcy9ZUFxcbnNwaW5ldC9TTVxcbnNwaW5sZXNzXFxuc3Bpbm5ha2VyL1NNXFxuc3Bpbm5lci9NU1xcbnNwaW5uZXJldC9TTVxcbnNwaW5uZXkvU1xcbnNwaW5uaW5nL01cXG5zcGluc3Rlci9TTVxcbnNwaW5zdGVyaG9vZC9NXFxuc3BpbnN0ZXJpc2hcXG5zcGlueS9SVFxcbnNwaXJhY2xlL1NNXFxuc3BpcmFsL1NHTURZXFxuc3BpcmUnc1xcbnNwaXJlL0lGQVNcXG5zcGlyZWEvU01cXG5zcGlyaXQnc1xcbnNwaXJpdC9JU0dEXFxuc3Bpcml0ZWQvWVxcbnNwaXJpdGxlc3NcXG5zcGlyaXR1YWwvTVlTXFxuc3Bpcml0dWFsaXNtL01cXG5zcGlyaXR1YWxpc3QvTVNcXG5zcGlyaXR1YWxpc3RpY1xcbnNwaXJpdHVhbGl0eS9NXFxuc3Bpcml0dW91c1xcbnNwaXJvY2hldGUvU01cXG5zcGlyeVxcbnNwaXQvTURHU1xcbnNwaXRiYWxsL1NNXFxuc3BpdGUvQVNNXFxuc3BpdGVmdWwvUFlcXG5zcGl0ZWZ1bGxlclxcbnNwaXRlZnVsbGVzdFxcbnNwaXRlZnVsbmVzcy9NXFxuc3BpdGZpcmUvU01cXG5zcGl0dGVkXFxuc3BpdHRpbmdcXG5zcGl0dGxlL01cXG5zcGl0dG9vbi9NU1xcbnNwaXYvU1xcbnNwbGFuY2huaWNcXG5zcGxhc2gvR01EU1xcbnNwbGFzaGRvd24vTVNcXG5zcGxhc2hpbHlcXG5zcGxhc2hpbmVzcy9NXFxuc3BsYXNoeS9SVFBcXG5zcGxhdC9TTVxcbnNwbGF0dGVkXFxuc3BsYXR0ZXIvR1NNRFxcbnNwbGF0dGluZ1xcbnNwbGF5L1NNREdcXG5zcGxheWZlZXRcXG5zcGxheWZvb3QvTURcXG5zcGxlZW4vU01cXG5zcGxlbmRpZC9SWVRcXG5zcGxlbmRvci9NU1xcbnNwbGVuZG9yb3VzXFxuc3BsZW5lY3RvbXlcXG5zcGxlbmV0aWNcXG5zcGxpY2UvRFJTTVpHXFxuc3BsaWNlci9NXFxuc3BsaWZmL1NcXG5zcGxpbmUvU1xcbnNwbGludC9TWkdNRFJcXG5zcGxpbnRlci9NREdcXG5zcGxpbnRlcnlcXG5zcGxpdC9TTVxcbnNwbGl0dGluZy9NU1xcbnNwbG9kZ2UvU1xcbnNwbG9zaC9EU0dcXG5zcGxvdGNoL01EU0dcXG5zcGxvdGNoeS9UUlxcbnNwbHVyZ2UvRFNNR1xcbnNwbHV0dGVyL0dNRFNcXG5zcG9pbCdzXFxuc3BvaWwvQ1NEUlpHXFxuc3BvaWxhZ2UvTVxcbnNwb2lsZWQvVVxcbnNwb2lsZXIvQ01cXG5zcG9pbHNwb3J0L01TXFxuc3Bva2UvU01cXG5zcG9rZW4vVVxcbnNwb2tlc21hbi9NXFxuc3Bva2VzbWVuXFxuc3Bva2VzcGVvcGxlXFxuc3Bva2VzcGVyc29uL01TXFxuc3Bva2Vzd29tYW4vTVxcbnNwb2tlc3dvbWVuXFxuc3BvbGlhdGlvbi9DTVxcbnNwb25nZS9EUlNNWkdcXG5zcG9uZ2VyL01cXG5zcG9uZ2luZXNzL01cXG5zcG9uZ3kvUlBUXFxuc3BvbnNvci9NREdTXFxuc3BvbnNvcnNoaXAvTVxcbnNwb250YW5laXR5L01cXG5zcG9udGFuZW91cy9ZXFxuc3Bvb2YvU01ER1xcbnNwb29rL1NNREdcXG5zcG9va2luZXNzL01cXG5zcG9va3kvUlBUXFxuc3Bvb2wvU01ER1xcbnNwb29uL1NNREdcXG5zcG9vbmJpbGwvTVNcXG5zcG9vbmVyaXNtL01TXFxuc3Bvb25mdWwvU01cXG5zcG9vci9TTURHXFxuc3BvcmFkaWNcXG5zcG9yYWRpY2FsbHlcXG5zcG9yZS9EU01HXFxuc3BvcnJhbi9TXFxuc3BvcnQvU01ER1ZcXG5zcG9ydGluZXNzL01cXG5zcG9ydGluZy9ZXFxuc3BvcnRpdmUvWVxcbnNwb3J0c2Nhc3QvTVJaR1NcXG5zcG9ydHNjYXN0ZXIvTVxcbnNwb3J0c21hbi9NXFxuc3BvcnRzbWFubGlrZS9VXFxuc3BvcnRzbWFuc2hpcC9NXFxuc3BvcnRzbWVuXFxuc3BvcnRzcGVvcGxlXFxuc3BvcnRzcGVyc29uXFxuc3BvcnRzd2Vhci9NXFxuc3BvcnRzd29tYW4vTVxcbnNwb3J0c3dvbWVuXFxuc3BvcnRzd3JpdGVyL1NNXFxuc3BvcnR5L1RQUlxcbnNwb3QvQ01TXFxuc3BvdGxlc3MvUFlcXG5zcG90bGVzc25lc3MvTVxcbnNwb3RsaWdodC9HU01EXFxuc3BvdGxpdFxcbnNwb3R0ZWRcXG5zcG90dGVyL01TXFxuc3BvdHRpbHlcXG5zcG90dGluZXNzL01cXG5zcG90dGluZ1xcbnNwb3R0eS9UUFJcXG5zcG91c2FsL01TXFxuc3BvdXNlL1NNXFxuc3BvdXQvU01ER1xcbnNwcmFpbi9HU01EXFxuc3ByYW5nXFxuc3ByYXQvU01cXG5zcHJhd2wvR1NNRFxcbnNwcmF5J3NcXG5zcHJheS9BU0RHXFxuc3ByYXllci9NU1xcbnNwcmVhZC9aR0JTTVJcXG5zcHJlYWRlYWdsZWRcXG5zcHJlYWRlci9NXFxuc3ByZWFkc2hlZXQvTVNcXG5zcHJlZS9EU01cXG5zcHJlZWluZ1xcbnNwcmlnL1NNXFxuc3ByaWdnZWRcXG5zcHJpZ2h0bGluZXNzL01cXG5zcHJpZ2h0bHkvUlRQXFxuc3ByaW5nL0dTTVxcbnNwcmluZ2JvYXJkL01TXFxuc3ByaW5nYm9rL01TXFxuc3ByaW5naWx5XFxuc3ByaW5naW5lc3MvTVxcbnNwcmluZ2xpa2VcXG5zcHJpbmd0aW1lL01cXG5zcHJpbmd5L1JQVFxcbnNwcmlua2xlL0RSU0pNWkdcXG5zcHJpbmtsZXIvTVxcbnNwcmlua2xpbmcvTVxcbnNwcmludC9aR1NNRFJcXG5zcHJpbnRlci9NXFxuc3ByaXRlL1NNXFxuc3ByaXR6L1pHTURSU1xcbnNwcml0emVyL01cXG5zcHJvY2tldC9NU1xcbnNwcm9nL1NcXG5zcHJvdXQvR1NNRFxcbnNwcnVjZS9EUlNQTVlUR1xcbnNwcnVjZW5lc3MvTVxcbnNwcnVuZ1xcbnNwcnkvUllUXFxuc3ByeW5lc3MvTVxcbnNwdWQvTVNcXG5zcHVtZS9EU01HXFxuc3B1bW9uaS9NXFxuc3B1bXlcXG5zcHVuXFxuc3B1bmsvU01cXG5zcHVua3kvVFJcXG5zcHVyL01TXFxuc3B1cmdlL01cXG5zcHVyaW91cy9QWVxcbnNwdXJpb3VzbmVzcy9NXFxuc3B1cm4vU0RHXFxuc3B1cnJlZFxcbnNwdXJyaW5nXFxuc3B1cnQvU01ER1xcbnNwdXRhXFxuc3B1dG5pay9NU1xcbnNwdXR0ZXIvTURHU1xcbnNwdXR1bS9NXFxuc3B5L0dEU01cXG5zcHlnbGFzcy9NU1xcbnNweW1hc3Rlci9TXFxuc3B5d2FyZS9NXFxuc3FcXG5zcXFcXG5zcXVhYi9TTVxcbnNxdWFiYmxlL01aR0RSU1xcbnNxdWFiYmxlci9NXFxuc3F1YWQvU01cXG5zcXVhZHJvbi9NU1xcbnNxdWFsaWQvUFRSWVxcbnNxdWFsaWRuZXNzL01cXG5zcXVhbGwvU0dNRFxcbnNxdWFsbHlcXG5zcXVhbG9yL01cXG5zcXVhbW91c1xcbnNxdWFuZGVyL0dEU1xcbnNxdWFyZS9QRFJTTVlUR1xcbnNxdWFyZW5lc3MvTVxcbnNxdWFyaXNoXFxuc3F1YXNoL0dNRFNcXG5zcXVhc2h5L1RSXFxuc3F1YXQvU01QXFxuc3F1YXRuZXNzL01cXG5zcXVhdHRlZFxcbnNxdWF0dGVyL01TXFxuc3F1YXR0ZXN0XFxuc3F1YXR0aW5nXFxuc3F1YXcvU01cXG5zcXVhd2svU1pHTURSXFxuc3F1YXdrZXIvTVxcbnNxdWVhay9TWkdNRFJcXG5zcXVlYWtlci9NXFxuc3F1ZWFraWx5XFxuc3F1ZWFraW5lc3MvTVxcbnNxdWVha3kvVFJQXFxuc3F1ZWFsL1NaR01EUlxcbnNxdWVhbGVyL01cXG5zcXVlYW1pc2gvUFlcXG5zcXVlYW1pc2huZXNzL01cXG5zcXVlZWdlZS9NRFNcXG5zcXVlZWdlZWluZ1xcbnNxdWVlemUvQk1aR0RSU1xcbnNxdWVlemVib3gvU1xcbnNxdWVlemVyL01cXG5zcXVlbGNoL0dNRFNcXG5zcXVlbGNoeVxcbnNxdWliL1NNXFxuc3F1aWQvU01cXG5zcXVpZGd5XFxuc3F1aWZmeVxcbnNxdWlnZ2xlL0RTTUdcXG5zcXVpZ2dseVxcbnNxdWludC9TVEdNRFJcXG5zcXVpcmUvRFNNR1xcbnNxdWlybS9TR01EXFxuc3F1aXJteS9SVFxcbnNxdWlycmVsL1NHTURcXG5zcXVpcnQvU0dNRFxcbnNxdWlzaC9HTURTXFxuc3F1aXNoeS9SVFxcbnNyaXJhY2hhXFxuc3NoXFxuc3RcXG5zdGFiL01ZU1xcbnN0YWJiZWRcXG5zdGFiYmVyL01TXFxuc3RhYmJpbmcvTVNcXG5zdGFiaWxpdHkvSU1cXG5zdGFiaWxpemF0aW9uL0NNXFxuc3RhYmlsaXplL0NEU0dcXG5zdGFiaWxpemVyL01TXFxuc3RhYmxlL0RSU01UR1xcbnN0YWJsZW1hbi9NXFxuc3RhYmxlbWF0ZS9TXFxuc3RhYmxlbWVuXFxuc3RhYmx5L1VcXG5zdGFjY2F0by9NU1xcbnN0YWNrL1NNREdcXG5zdGFkaXVtL01TXFxuc3RhZmYnc1xcbnN0YWZmL0FTREdcXG5zdGFmZmVyL01TXFxuc3RhZmZpbmcvTVxcbnN0YWcvTURHU0pcXG5zdGFnZS9TTVxcbnN0YWdlY29hY2gvTVNcXG5zdGFnZWNyYWZ0L01cXG5zdGFnZWhhbmQvTVNcXG5zdGFnZXN0cnVja1xcbnN0YWdmbGF0aW9uL01cXG5zdGFnZ2VyL01ER1NcXG5zdGFnZ2VyaW5nL1lcXG5zdGFnaW5nL01cXG5zdGFnbmFuY3kvTVxcbnN0YWduYW50L1lcXG5zdGFnbmF0ZS9EU0dOXFxuc3RhZ25hdGlvbi9NXFxuc3RhZ3kvUlRcXG5zdGFpZC9QUllUXFxuc3RhaWRuZXNzL01cXG5zdGFpbi9TTURHXFxuc3RhaW5lZC9VXFxuc3RhaW5sZXNzL01cXG5zdGFpci9TTVxcbnN0YWlyY2FzZS9NU1xcbnN0YWlyd2F5L01TXFxuc3RhaXJ3ZWxsL1NNXFxuc3Rha2UvRFNNR1xcbnN0YWtlaG9sZGVyL01TXFxuc3Rha2VvdXQvU01cXG5zdGFsYWN0aXRlL01TXFxuc3RhbGFnbWl0ZS9NU1xcbnN0YWxlL0RSU1RHUFxcbnN0YWxlbWF0ZS9EU01HXFxuc3RhbGVuZXNzL01cXG5zdGFsay9TTURSSlpHXFxuc3RhbGtlci9NXFxuc3RhbGtpbmcvTVxcbnN0YWxsJ3NcXG5zdGFsbC9TREdcXG5zdGFsbGhvbGRlci9TXFxuc3RhbGxpb24vTVNcXG5zdGFsd2FydC9NWVNcXG5zdGFtZW4vU01cXG5zdGFtaW5hL01cXG5zdGFtbWVyL1pHTURSU1xcbnN0YW1tZXJlci9NXFxuc3RhbW1lcmluZy9ZXFxuc3RhbXAvU01EUlpHXFxuc3RhbXBlZGUvTUdEU1xcbnN0YW1wZXIvTVxcbnN0YW5jZS9JU01cXG5zdGFuY2gvVEdEUlNcXG5zdGFuY2hpb24vU01cXG5zdGFuZC9TTVJKWkdcXG5zdGFuZGFsb25lXFxuc3RhbmRhcmQvTVNcXG5zdGFuZGFyZGl6YXRpb24vTVxcbnN0YW5kYXJkaXplL0RTR1xcbnN0YW5kYnkvTVxcbnN0YW5kYnlzXFxuc3RhbmRlZS9NU1xcbnN0YW5kZXIvTVxcbnN0YW5kaW5nL01cXG5zdGFuZG9mZi9NU1xcbnN0YW5kb2ZmaXNoXFxuc3RhbmRvdXQvTVNcXG5zdGFuZHBpcGUvU01cXG5zdGFuZHBvaW50L01TXFxuc3RhbmRzdGlsbC9NU1xcbnN0YW5rXFxuc3RhbnphL1NNXFxuc3RhcGgvTVxcbnN0YXBoeWxvY29jY2FsXFxuc3RhcGh5bG9jb2NjaVxcbnN0YXBoeWxvY29jY3VzL01cXG5zdGFwbGUvRFJTTVpHXFxuc3RhcGxlci9NXFxuc3Rhci9NRFJaR1NcXG5zdGFyYm9hcmQvTVxcbnN0YXJidXJzdC9TXFxuc3RhcmNoL0dNRFNcXG5zdGFyY2hpbHlcXG5zdGFyY2hpbmVzcy9NXFxuc3RhcmNoeS9QVFJcXG5zdGFyZG9tL01cXG5zdGFyZHVzdC9NXFxuc3RhcmUvU01cXG5zdGFyZXIvTVxcbnN0YXJmaXNoL01TXFxuc3RhcmZydWl0XFxuc3RhcmdhemUvRFJTWkdcXG5zdGFyZ2F6ZXIvTVxcbnN0YXJrL1JZUFpUXFxuc3RhcmtuZXNzL01cXG5zdGFybGVzc1xcbnN0YXJsZXQvTVNcXG5zdGFybGlnaHQvTVxcbnN0YXJsaW5nL1NNXFxuc3RhcmxpdFxcbnN0YXJyZWRcXG5zdGFycmluZ1xcbnN0YXJyeS9UUlxcbnN0YXJzdHJ1Y2tcXG5zdGFydC9BU01ER1xcbnN0YXJ0ZXIvTVNcXG5zdGFydGxlL0dEU1xcbnN0YXJ0bGluZy9ZXFxuc3RhcnR1cC9NU1xcbnN0YXJ2YXRpb24vTVxcbnN0YXJ2ZS9EU0pHXFxuc3RhcnZlbGluZy9NU1xcbnN0YXNoL01EU0dcXG5zdGFzaXNcXG5zdGF0L01TXFxuc3RhdGUvRFJTTVlHTkxYXFxuc3RhdGVjcmFmdC9NXFxuc3RhdGVkL1VcXG5zdGF0ZWhvb2QvTVxcbnN0YXRlaG91c2UvTVNcXG5zdGF0ZWxlc3MvUFxcbnN0YXRlbGVzc25lc3MvTVxcbnN0YXRlbGluZXNzL01cXG5zdGF0ZWx5L1BSVFxcbnN0YXRlbWVudC9BTVNcXG5zdGF0ZW1lbnRlZFxcbnN0YXRlbWVudGluZ1xcbnN0YXRlcm9vbS9NU1xcbnN0YXRlc2lkZVxcbnN0YXRlc21hbi9NXFxuc3RhdGVzbWFubGlrZVxcbnN0YXRlc21hbnNoaXAvTVxcbnN0YXRlc21lblxcbnN0YXRlc3dvbWFuL01cXG5zdGF0ZXN3b21lblxcbnN0YXRld2lkZVxcbnN0YXRpYy9TTVxcbnN0YXRpY2FsbHlcXG5zdGF0aW9uL01EUlpHXFxuc3RhdGlvbmFyeVxcbnN0YXRpb25lci9NXFxuc3RhdGlvbmVyeS9NXFxuc3RhdGlvbm1hc3Rlci9TXFxuc3RhdGlzdGljL01TXFxuc3RhdGlzdGljYWwvWVxcbnN0YXRpc3RpY2lhbi9TTVxcbnN0YXR1YXJ5L01cXG5zdGF0dWUvU01cXG5zdGF0dWVzcXVlXFxuc3RhdHVldHRlL01TXFxuc3RhdHVyZS9NU1xcbnN0YXR1cy9NU1xcbnN0YXR1dGUvTVNcXG5zdGF0dXRvcmlseVxcbnN0YXR1dG9yeVxcbnN0YXVuY2gvUERSU1lUR1xcbnN0YXVuY2huZXNzL01cXG5zdGF2ZS9EU01HXFxuc3RheS9NRFJaR1NcXG5zdGRcXG5zdGRpb1xcbnN0ZWFkL1NNXFxuc3RlYWRmYXN0L1lQXFxuc3RlYWRmYXN0bmVzcy9NXFxuc3RlYWRpbHkvVVxcbnN0ZWFkaW5lc3MvVU1cXG5zdGVhZHkvVEdQRFJTTVxcbnN0ZWFrL1NNXFxuc3RlYWtob3VzZS9TTVxcbnN0ZWFsL1NNSEdcXG5zdGVhbHRoL01cXG5zdGVhbHRoaWx5XFxuc3RlYWx0aGluZXNzL01cXG5zdGVhbHRoeS9UUFJcXG5zdGVhbS9TTURSWkdcXG5zdGVhbWJvYXQvTVNcXG5zdGVhbWVyL01cXG5zdGVhbWZpdHRlci9TTVxcbnN0ZWFtZml0dGluZy9NXFxuc3RlYW1pbmVzcy9NXFxuc3RlYW1wdW5rXFxuc3RlYW1yb2xsL1pHRFJTXFxuc3RlYW1yb2xsZXIvTURHXFxuc3RlYW1zaGlwL01TXFxuc3RlYW15L1RQUlxcbnN0ZWVkL1NNXFxuc3RlZWwvU01ER1xcbnN0ZWVsaW5lc3MvTVxcbnN0ZWVsbWFrZXIvU1xcbnN0ZWVsd29ya2VyL1NNXFxuc3RlZWx3b3Jrcy9NXFxuc3RlZWx5L1BUUlxcbnN0ZWVseWFyZC9TTVxcbnN0ZWVwL1NNRE5SWVBYVEdcXG5zdGVlcGVuL0dEXFxuc3RlZXBsZS9NU1xcbnN0ZWVwbGVjaGFzZS9NU1xcbnN0ZWVwbGVqYWNrL1NNXFxuc3RlZXBuZXNzL01cXG5zdGVlci9TTURCR1xcbnN0ZWVyYWdlL01cXG5zdGVlcmluZy9NXFxuc3RlZXJzbWFuL01cXG5zdGVlcnNtZW5cXG5zdGVnb3NhdXJpXFxuc3RlZ29zYXVydXMvTVNcXG5zdGVpbi9TTVxcbnN0ZWxsYXJcXG5zdGVtL01TXFxuc3RlbWxlc3NcXG5zdGVtbWVkXFxuc3RlbW1pbmdcXG5zdGVtd2FyZS9NXFxuc3RlbmNoL01TXFxuc3RlbmNpbC9HTURTXFxuc3Rlbm8vU01cXG5zdGVub2dyYXBoZXIvU01cXG5zdGVub2dyYXBoaWNcXG5zdGVub2dyYXBoeS9NXFxuc3Rlbm9zaXNcXG5zdGVudC9TTVxcbnN0ZW50b3JpYW5cXG5zdGVwL0lNU1xcbnN0ZXBicm90aGVyL1NNXFxuc3RlcGNoaWxkL01cXG5zdGVwY2hpbGRyZW4vTVxcbnN0ZXBkYWQvTVNcXG5zdGVwZGF1Z2h0ZXIvU01cXG5zdGVwZmF0aGVyL1NNXFxuc3RlcGxhZGRlci9NU1xcbnN0ZXBtb20vTVNcXG5zdGVwbW90aGVyL1NNXFxuc3RlcHBhcmVudC9TTVxcbnN0ZXBwZS9EUlNNWkdcXG5zdGVwcGVyL01cXG5zdGVwcGluZ3N0b25lL1NNXFxuc3RlcHNpc3Rlci9NU1xcbnN0ZXBzb24vTVNcXG5zdGVyZW8vU01cXG5zdGVyZW9waG9uaWNcXG5zdGVyZW9zY29wZS9NU1xcbnN0ZXJlb3Njb3BpY1xcbnN0ZXJlb3R5cGUvRFNNR1xcbnN0ZXJlb3R5cGljYWxcXG5zdGVyaWxlXFxuc3RlcmlsaXR5L01cXG5zdGVyaWxpemF0aW9uL1NNXFxuc3RlcmlsaXplL0RSU1pHXFxuc3RlcmlsaXplci9NXFxuc3RlcmxpbmcvTVxcbnN0ZXJuL1NNUllQVFxcbnN0ZXJubmVzcy9NXFxuc3Rlcm51bS9NU1xcbnN0ZXJvaWQvTVNcXG5zdGVyb2lkYWxcXG5zdGVydG9yb3VzXFxuc3RldC9TXFxuc3RldGhvc2NvcGUvTVNcXG5zdGV0c29uL01TXFxuc3RldHRlZFxcbnN0ZXR0aW5nXFxuc3RldmVkb3JlL1NNXFxuc3Rldy9NREdTXFxuc3Rld2FyZC9HTURTXFxuc3Rld2FyZGVzcy9NU1xcbnN0ZXdhcmRzaGlwL01cXG5zdGljay9TTVJaR1xcbnN0aWNrZXIvTVxcbnN0aWNraWx5XFxuc3RpY2tpbmVzcy9NXFxuc3RpY2tsZWJhY2svU01cXG5zdGlja2xlci9NU1xcbnN0aWNrcGluL01TXFxuc3RpY2t1cC9NU1xcbnN0aWNreS9QVFJTTVxcbnN0aWZmL1NNRE5SWVBYVEdcXG5zdGlmZmVuL1pHRFJcXG5zdGlmZmVuZXIvTVxcbnN0aWZmZW5pbmcvTVxcbnN0aWZmbmVzcy9NXFxuc3RpZmxlL0RTSkdcXG5zdGlmbGluZy9ZXFxuc3RpZ21hL1NNXFxuc3RpZ21hdGFcXG5zdGlnbWF0aWNcXG5zdGlnbWF0aXphdGlvbi9NXFxuc3RpZ21hdGl6ZS9HRFNcXG5zdGlsZS9TTVxcbnN0aWxldHRvL1NNXFxuc3RpbGwnc1xcbnN0aWxsL0lUR1NEXFxuc3RpbGxiaXJ0aC9NXFxuc3RpbGxiaXJ0aHNcXG5zdGlsbGJvcm5cXG5zdGlsbGVyXFxuc3RpbGxuZXNzL01cXG5zdGlsdC9TTURcXG5zdGlsdGVkL1lcXG5zdGltdWxhbnQvU01cXG5zdGltdWxhdGUvRFNHTlZcXG5zdGltdWxhdGlvbi9NXFxuc3RpbXVsaVxcbnN0aW11bHVzL01cXG5zdGluZy9aR1NNUlxcbnN0aW5nZXIvTVxcbnN0aW5naWx5XFxuc3RpbmdpbmVzcy9NXFxuc3RpbmdyYXkvU01cXG5zdGluZ3kvUlRQXFxuc3RpbmsvWkdTTVJcXG5zdGlua2J1Zy9TTVxcbnN0aW5rZXIvTVxcbnN0aW5reS9SVFxcbnN0aW50L0dTTURcXG5zdGlwZW5kL1NNXFxuc3RpcGVuZGlhcnkvU1xcbnN0aXBwbGUvRFNNR1xcbnN0aXBwbGluZy9NXFxuc3RpcHVsYXRlL1hEU0dOXFxuc3RpcHVsYXRpb24vTVxcbnN0aXIvTVNcXG5zdGlycmVkXFxuc3RpcnJlci9TTVxcbnN0aXJyaW5nL1NZXFxuc3RpcnJ1cC9TTVxcbnN0aXRjaCdzXFxuc3RpdGNoL0FEU0dcXG5zdGl0Y2hlcnkvTVxcbnN0aXRjaGluZy9NXFxuc3RvYXQvU01cXG5zdG9jaGFzdGljXFxuc3RvY2snc1xcbnN0b2NrL0FHU0RcXG5zdG9ja2FkZS9EU01HXFxuc3RvY2ticmVlZGVyL01TXFxuc3RvY2ticm9rZXIvU01cXG5zdG9ja2Jyb2tpbmcvTVxcbnN0b2NraG9sZGVyL1NNXFxuc3RvY2tpbHlcXG5zdG9ja2luZXNzL01cXG5zdG9ja2luZXR0ZS9NXFxuc3RvY2tpbmcvU01cXG5zdG9ja2lzdC9TXFxuc3RvY2twaWxlL01HRFNcXG5zdG9ja3BvdC9TTVxcbnN0b2Nrcm9vbS9NU1xcbnN0b2NrdGFraW5nL01cXG5zdG9ja3kvUlRQXFxuc3RvY2t5YXJkL01TXFxuc3RvZGdlXFxuc3RvZGdpbHlcXG5zdG9kZ2luZXNzL01cXG5zdG9kZ3kvUlRQXFxuc3RvZ2llL01TXFxuc3RvaWMvU01cXG5zdG9pY2FsL1lcXG5zdG9pY2lzbS9NXFxuc3Rva2UvRFJTWkdcXG5zdG9rZXIvTVxcbnN0b2xlL1NNXFxuc3RvbGVuXFxuc3RvbGlkL1JZVFBcXG5zdG9saWRpdHkvTVxcbnN0b2xpZG5lc3MvTVxcbnN0b2xvbi9NU1xcbnN0b21hY2gvTURSWkdcXG5zdG9tYWNoYWNoZS9TTVxcbnN0b21hY2hlci9NXFxuc3RvbWFjaHNcXG5zdG9tcC9HU01EXFxuc3RvbmUvRFJTTVpHXFxuc3RvbmVtYXNvbi9NU1xcbnN0b25lci9NXFxuc3RvbmV3YWxsL0dTRFxcbnN0b25ld2FyZS9NXFxuc3RvbmV3YXNoZWRcXG5zdG9uZXdvcmsvTVxcbnN0b25pbHlcXG5zdG9uaW5lc3MvTVxcbnN0b25rZXJlZFxcbnN0b25raW5nXFxuc3RvbnkvVFJQXFxuc3Rvb2RcXG5zdG9vZ2UvTVNcXG5zdG9vbC9TTVxcbnN0b29wL0dTTURcXG5zdG9wJ3NcXG5zdG9wL1VTXFxuc3RvcGNvY2svU01cXG5zdG9wZ2FwL1NNXFxuc3RvcGxpZ2h0L01TXFxuc3RvcG92ZXIvTVNcXG5zdG9wcGFibGUvVVxcbnN0b3BwYWdlL01TXFxuc3RvcHBlZC9VXFxuc3RvcHBlci9HU01EXFxuc3RvcHBpbmcvVVxcbnN0b3BwbGUvRFNNR1xcbnN0b3B3YXRjaC9NU1xcbnN0b3JhZ2UvTVxcbnN0b3JlJ3NcXG5zdG9yZS9BRFNHXFxuc3RvcmVmcm9udC9NU1xcbnN0b3JlaG91c2UvTVNcXG5zdG9yZWtlZXBlci9TTVxcbnN0b3Jlcm9vbS9TTVxcbnN0b3JrL1NNXFxuc3Rvcm0vR1NNRFxcbnN0b3JtaWx5XFxuc3Rvcm1pbmVzcy9NXFxuc3Rvcm15L1JQVFxcbnN0b3J5L0RTTVxcbnN0b3J5Ym9hcmQvTVNcXG5zdG9yeWJvb2svU01cXG5zdG9yeXRlbGxlci9NU1xcbnN0b3J5dGVsbGluZy9NXFxuc3RvdXAvU01cXG5zdG91dC9UU01SWVBcXG5zdG91dGhlYXJ0ZWRcXG5zdG91dG5lc3MvTVxcbnN0b3ZlL1NNXFxuc3RvdmVwaXBlL1NNXFxuc3Rvdy9ER1NcXG5zdG93YWdlL01cXG5zdG93YXdheS9NU1xcbnN0cmFkZGxlL0RSU01aR1xcbnN0cmFkZGxlci9NXFxuc3RyYWZlL01HRFNcXG5zdHJhZ2dsZS9EUlNaR1xcbnN0cmFnZ2xlci9NXFxuc3RyYWdnbHkvVFJcXG5zdHJhaWdodC9TUFhUTU5SWVxcbnN0cmFpZ2h0YXdheS9TTVxcbnN0cmFpZ2h0ZWRnZS9TTVxcbnN0cmFpZ2h0ZW4vWkdEUlxcbnN0cmFpZ2h0ZW5lci9NXFxuc3RyYWlnaHRmb3J3YXJkL1lQU1xcbnN0cmFpZ2h0Zm9yd2FyZG5lc3MvTVxcbnN0cmFpZ2h0bmVzcy9NXFxuc3RyYWlnaHR3YXlcXG5zdHJhaW4nc1xcbnN0cmFpbi9GQURTR1xcbnN0cmFpbmVyL0FTTVxcbnN0cmFpdC9NTlNYXFxuc3RyYWl0ZW4vR0RcXG5zdHJhaXRqYWNrZXQvU0dNRFxcbnN0cmFpdGxhY2VkXFxuc3RyYW5kL01EU0dcXG5zdHJhbmdlL1BSWVpUXFxuc3RyYW5nZW5lc3MvTVxcbnN0cmFuZ2VyL01cXG5zdHJhbmdsZS9aR0RSU1xcbnN0cmFuZ2xlaG9sZC9TTVxcbnN0cmFuZ2xlci9NXFxuc3RyYW5ndWxhdGUvR05EU1xcbnN0cmFuZ3VsYXRpb24vTVxcbnN0cmFwJ3NcXG5zdHJhcC9VU1xcbnN0cmFwbGVzcy9NU1xcbnN0cmFwcGVkL1VcXG5zdHJhcHBpbmcvTVxcbnN0cmF0YVxcbnN0cmF0YWdlbS9TTVxcbnN0cmF0ZWdpYy9TXFxuc3RyYXRlZ2ljYWwvWVxcbnN0cmF0ZWdpY3MvTVxcbnN0cmF0ZWdpc3QvU01cXG5zdHJhdGVneS9TTVxcbnN0cmF0aVxcbnN0cmF0aWZpY2F0aW9uL01cXG5zdHJhdGlmeS9EU0dOXFxuc3RyYXRvc3BoZXJlL1NNXFxuc3RyYXRvc3BoZXJpY1xcbnN0cmF0dW0vTVxcbnN0cmF0dXMvTVxcbnN0cmF3L0dTTURcXG5zdHJhd2JlcnJ5L1NNXFxuc3RyYXkvR1NNRFxcbnN0cmVhay9NRFJTWkdcXG5zdHJlYWtlci9NXFxuc3RyZWFreS9UUlxcbnN0cmVhbS9NRFJTWkdcXG5zdHJlYW1lci9NXFxuc3RyZWFtbGluZS9EU0dcXG5zdHJlZXQvTVNcXG5zdHJlZXRjYXIvTVNcXG5zdHJlZXRsYW1wL1NcXG5zdHJlZXRsaWdodC9TTVxcbnN0cmVldHdhbGtlci9TTVxcbnN0cmVldHdpc2VcXG5zdHJlbmd0aC9NXFxuc3RyZW5ndGhlbi9BR0RTXFxuc3RyZW5ndGhlbmVyL01TXFxuc3RyZW5ndGhzXFxuc3RyZW51b3VzL1BZXFxuc3RyZW51b3VzbmVzcy9NXFxuc3RyZXAvTVxcbnN0cmVwdG9jb2NjYWxcXG5zdHJlcHRvY29jY2lcXG5zdHJlcHRvY29jY3VzL01cXG5zdHJlcHRvbXljaW4vTVxcbnN0cmVzcy9NRFNHXFxuc3RyZXNzZWQvVVxcbnN0cmVzc2Z1bFxcbnN0cmVzc29yc1xcbnN0cmV0Y2gvQlpHTURSU1xcbnN0cmV0Y2hlci9NREdcXG5zdHJldGNobWFya3NcXG5zdHJldGNoeS9UUlxcbnN0cmV3L0dTREhcXG5zdHJld25cXG5zdHJpYS9NXFxuc3RyaWFlXFxuc3RyaWF0ZWRcXG5zdHJpYXRpb24vTVNcXG5zdHJpY2tlblxcbnN0cmljdC9SWVBUXFxuc3RyaWN0bmVzcy9NXFxuc3RyaWN0dXJlL1NNXFxuc3RyaWRkZW5cXG5zdHJpZGUvTUdTXFxuc3RyaWRlbmN5L01cXG5zdHJpZGVudC9ZXFxuc3RyaWZlL01cXG5zdHJpa2UvTVpHUlNKXFxuc3RyaWtlYm91bmRcXG5zdHJpa2VicmVha2VyL1NNXFxuc3RyaWtlYnJlYWtpbmdcXG5zdHJpa2VvdXQvTVNcXG5zdHJpa2VyL01cXG5zdHJpa2luZy9ZXFxuc3RyaW5nL01EUlNaR1xcbnN0cmluZ2VuY3kvTVxcbnN0cmluZ2VudC9ZXFxuc3RyaW5nZXIvTVxcbnN0cmluZ2luZXNzL01cXG5zdHJpbmd5L1BUUlxcbnN0cmlwL0dTTURcXG5zdHJpcGUvTVNcXG5zdHJpcGV5XFxuc3RyaXBsaW5nL01TXFxuc3RyaXBwZWRcXG5zdHJpcHBlci9NU1xcbnN0cmlwcGluZ1xcbnN0cmlwdGVhc2UvTVpHRFJTXFxuc3RyaXB0ZWFzZXIvTVxcbnN0cmlweVxcbnN0cml2ZS9HU1xcbnN0cml2ZW5cXG5zdHJvYmUvTVNcXG5zdHJvYm9zY29wZS9NU1xcbnN0cm9ib3Njb3BpY1xcbnN0cm9kZVxcbnN0cm9rZS9NR0RTXFxuc3Ryb2xsL01EUlNaR1xcbnN0cm9sbGVyL01cXG5zdHJvbmcvUllUXFxuc3Ryb25nYm94L01TXFxuc3Ryb25naG9sZC9NU1xcbnN0cm9uZ21hbi9NXFxuc3Ryb25nbWVuXFxuc3Ryb25ncm9vbS9TXFxuc3Ryb250aXVtL01cXG5zdHJvcC9TTVxcbnN0cm9waGUvU01cXG5zdHJvcGhpY1xcbnN0cm9wcGVkXFxuc3Ryb3BwaWx5XFxuc3Ryb3BwaW5nXFxuc3Ryb3BweS9UUlBcXG5zdHJvdmVcXG5zdHJ1Y2tcXG5zdHJ1Y3R1cmFsL1lcXG5zdHJ1Y3R1cmFsaXNtXFxuc3RydWN0dXJhbGlzdC9TXFxuc3RydWN0dXJlJ3NcXG5zdHJ1Y3R1cmUvQUdEU1xcbnN0cnVjdHVyZWQvVVxcbnN0cnVkZWwvU01cXG5zdHJ1Z2dsZS9NR0RTXFxuc3RydW0vU01cXG5zdHJ1bW1lZFxcbnN0cnVtbWluZ1xcbnN0cnVtcGV0L01TXFxuc3RydW5nL1VBXFxuc3RydXQvU01cXG5zdHJ1dHRlZFxcbnN0cnV0dGluZ1xcbnN0cnljaG5pbmUvTVxcbnN0dWIvTVNcXG5zdHViYmVkXFxuc3R1YmJpbmdcXG5zdHViYmxlL01cXG5zdHViYmx5XFxuc3R1YmJvcm4vUllQVFxcbnN0dWJib3JubmVzcy9NXFxuc3R1YmJ5L1JUXFxuc3R1Y2NvL01ER1xcbnN0dWNjb2VzXFxuc3R1Y2svVVxcbnN0dWQvTVlTXFxuc3R1ZGJvb2svTVNcXG5zdHVkZGVkXFxuc3R1ZGRpbmcvTVxcbnN0dWRlbnQvU01cXG5zdHVkZW50c2hpcC9TXFxuc3R1ZGllZC9VXFxuc3R1ZGllZGx5XFxuc3R1ZGlvL01TXFxuc3R1ZGlvdXMvUFlcXG5zdHVkaW91c25lc3MvTVxcbnN0dWRseS9SVFxcbnN0dWR5J3NcXG5zdHVkeS9BR0RTXFxuc3R1ZmYvR1NNREpcXG5zdHVmZmlseVxcbnN0dWZmaW5lc3MvTVxcbnN0dWZmaW5nL01cXG5zdHVmZnkvUlBUXFxuc3R1bHRpZmljYXRpb24vTVxcbnN0dWx0aWZ5L0RTTkdcXG5zdHVtYmxlL0RSU01aR1xcbnN0dW1ibGVyL01cXG5zdHVtcC9HU01EXFxuc3R1bXB5L1RSXFxuc3R1bi9TXFxuc3R1bmdcXG5zdHVua1xcbnN0dW5uZWRcXG5zdHVubmVyL1NcXG5zdHVubmluZy9ZXFxuc3R1bnQvR1NNRFxcbnN0dW50bWFuXFxuc3R1bnRtZW5cXG5zdHVwZWZhY3Rpb24vTVxcbnN0dXBlZnkvRFNHXFxuc3R1cGVuZG91cy9ZXFxuc3R1cGlkL1RNUllTXFxuc3R1cGlkaXR5L1NNXFxuc3R1cG9yL01TXFxuc3R1cmRpbHlcXG5zdHVyZGluZXNzL01cXG5zdHVyZHkvVFJQXFxuc3R1cmdlb24vU01cXG5zdHV0dGVyL01EUlNaR1xcbnN0dXR0ZXJlci9NXFxuc3R5L1NNXFxuc3R5bGUnc1xcbnN0eWxlL0FEU0dcXG5zdHlsaVxcbnN0eWxpc2gvUFlcXG5zdHlsaXNobmVzcy9NXFxuc3R5bGlzdC9TTVxcbnN0eWxpc3RpYy9TXFxuc3R5bGlzdGljYWxseVxcbnN0eWxpemUvRFNHXFxuc3R5bHVzL01TXFxuc3R5bWllL01EU1xcbnN0eW1pZWluZ1xcbnN0eXB0aWMvU01cXG5zdWFzaW9uL0VNXFxuc3VhdmUvUllUUFxcbnN1YXZlbmVzcy9NXFxuc3Vhdml0eS9NXFxuc3ViL1NNXFxuc3ViYWx0ZXJuL01TXFxuc3ViYXF1YVxcbnN1YmFyY3RpY1xcbnN1YmFyZWEvTVNcXG5zdWJhdG9taWNcXG5zdWJiYXNlbWVudC9TTVxcbnN1YmJlZFxcbnN1YmJpbmdcXG5zdWJicmFuY2gvTVNcXG5zdWJjYXRlZ29yeS9TTVxcbnN1YmNsYXNzXFxuc3ViY29tbWl0dGVlL1NNXFxuc3ViY29tcGFjdC9TTVxcbnN1YmNvbnNjaW91cy9QTVlcXG5zdWJjb25zY2lvdXNuZXNzL01cXG5zdWJjb250aW5lbnQvU01cXG5zdWJjb250aW5lbnRhbFxcbnN1YmNvbnRyYWN0L01EU0dcXG5zdWJjb250cmFjdG9yL01TXFxuc3ViY3VsdHVyZS9NU1xcbnN1YmN1dGFuZW91cy9ZXFxuc3ViZGl2aWRlL0dEU1xcbnN1YmRpdmlzaW9uL1NNXFxuc3ViZG9tYWluL01TXFxuc3ViZG9taW5hbnRcXG5zdWJkdWUvRFNHXFxuc3ViZWRpdG9yL1NcXG5zdWJmYW1pbHkvU01cXG5zdWJmcmVlemluZ1xcbnN1Ymdyb3VwL01TXFxuc3ViaGVhZC9HSk1TXFxuc3ViaGVhZGluZy9NXFxuc3ViaHVtYW4vTVNcXG5zdWJqXFxuc3ViamVjdC9HVk1EU1xcbnN1YmplY3Rpb24vTVxcbnN1YmplY3RpdmUvWVxcbnN1YmplY3Rpdml0eS9NXFxuc3Viam9pbi9HRFNcXG5zdWJqdWdhdGUvR05EU1xcbnN1Ymp1Z2F0aW9uL01cXG5zdWJqdW5jdGl2ZS9TTVxcbnN1YmxlYXNlL01HRFNcXG5zdWJsZXQvU01cXG5zdWJsZXR0aW5nXFxuc3VibGlldXRlbmFudC9TXFxuc3VibGltYXRlL0dORFNcXG5zdWJsaW1hdGlvbi9NXFxuc3VibGltZS9ZVEdEUlNcXG5zdWJsaW1pbmFsL1lcXG5zdWJsaW1pdHkvTVxcbnN1Ymxpbmd1YWxcXG5zdWJtYXJnaW5hbFxcbnN1Ym1hcmluZS9NWlJTXFxuc3VibWFyaW5lci9NXFxuc3VibWVyZ2UvR0RTXFxuc3VibWVyZ2VuY2UvTVxcbnN1Ym1lcnNlL0dORFNcXG5zdWJtZXJzaWJsZS9NU1xcbnN1Ym1lcnNpb24vTVxcbnN1Ym1pY3Jvc2NvcGljXFxuc3VibWlzc2lvbi9NU1xcbnN1Ym1pc3NpdmUvUFlcXG5zdWJtaXNzaXZlbmVzcy9NXFxuc3VibWl0L0FTXFxuc3VibWl0dGVkL0FcXG5zdWJtaXR0ZXJcXG5zdWJtaXR0aW5nL0FcXG5zdWJub3JtYWxcXG5zdWJvcmJpdGFsXFxuc3Vib3JkZXIvTVNcXG5zdWJvcmRpbmF0ZS9EU01HTlxcbnN1Ym9yZGluYXRpb24vSU1cXG5zdWJvcm4vU0dEXFxuc3Vib3JuYXRpb24vTVxcbnN1YnBhclxcbnN1YnBhcmFncmFwaFxcbnN1YnBhcnRcXG5zdWJwbG90L01TXFxuc3VicG9lbmEvR01EU1xcbnN1YnByaW1lXFxuc3VicHJvZmVzc2lvbmFsL1NNXFxuc3VicHJvZ3JhbS9TXFxuc3Vicm91dGluZS9TTVxcbnN1YnNjcmliZS9VQVNER1xcbnN1YnNjcmliZXIvTVNcXG5zdWJzY3JpcHQvTVNcXG5zdWJzY3JpcHRpb24vTVNcXG5zdWJzZWN0aW9uL01TXFxuc3Vic2VxdWVudC9ZXFxuc3Vic2VydmllbmNlL01cXG5zdWJzZXJ2aWVudC9ZXFxuc3Vic2V0L1NNXFxuc3Vic2lkZS9HRFNcXG5zdWJzaWRlbmNlL01cXG5zdWJzaWRpYXJpdHlcXG5zdWJzaWRpYXJ5L1NNXFxuc3Vic2lkaXphdGlvbi9NXFxuc3Vic2lkaXplL1pHRFJTXFxuc3Vic2lkaXplci9NXFxuc3Vic2lkeS9TTVxcbnN1YnNpc3QvU0RHXFxuc3Vic2lzdGVuY2UvTVxcbnN1YnNvaWwvTVxcbnN1YnNvbmljXFxuc3Vic3BhY2VcXG5zdWJzcGVjaWVzL01cXG5zdWJzdGFuY2UvU01cXG5zdWJzdGFuZGFyZFxcbnN1YnN0YW50aWFsL0lZXFxuc3Vic3RhbnRpYXRlL0dORFNYXFxuc3Vic3RhbnRpYXRlZC9VXFxuc3Vic3RhbnRpYXRpb24vRk1cXG5zdWJzdGFudGl2ZS9TTVlcXG5zdWJzdGF0aW9uL01TXFxuc3Vic3RpdHVlbnRcXG5zdWJzdGl0dXRlL1hNR05EU1xcbnN1YnN0aXR1dGlvbi9NXFxuc3Vic3RyYXRhXFxuc3Vic3RyYXRlL01TXFxuc3Vic3RyYXR1bS9NXFxuc3Vic3RydWN0dXJlL1NNXFxuc3Vic3VtZS9EU0dcXG5zdWJzdW1wdGlvblxcbnN1YnN1cmZhY2UvTVxcbnN1YnN5c3RlbS9TTVxcbnN1YnRlZW4vU01cXG5zdWJ0ZW5hbmN5L01cXG5zdWJ0ZW5hbnQvU01cXG5zdWJ0ZW5kL1NER1xcbnN1YnRlcmZ1Z2UvU01cXG5zdWJ0ZXJyYW5lYW5cXG5zdWJ0ZXh0L1NNXFxuc3VidGl0bGUvRFNNR1xcbnN1YnRsZS9UUlxcbnN1YnRsZXR5L1NNXFxuc3VidGx5XFxuc3VidG9waWMvU01cXG5zdWJ0b3RhbC9TR01EXFxuc3VidHJhY3QvR1NEXFxuc3VidHJhY3Rpb24vU01cXG5zdWJ0cmFoZW5kL1NNXFxuc3VidHJvcGljL1NcXG5zdWJ0cm9waWNhbFxcbnN1YnRyb3BpY3MvTVxcbnN1YnVyYi9NU1xcbnN1YnVyYmFuL1NNXFxuc3VidXJiYW5pdGUvU01cXG5zdWJ1cmJpYS9NXFxuc3VidmVudGlvbi9TTVxcbnN1YnZlcnNpb24vTVxcbnN1YnZlcnNpdmUvU1BNWVxcbnN1YnZlcnNpdmVuZXNzL01cXG5zdWJ2ZXJ0L1NER1xcbnN1YndheS9NU1xcbnN1Ynplcm9cXG5zdWNjZWVkL0dEU1xcbnN1Y2Nlc3MvVk1TXFxuc3VjY2Vzc2Z1bC9VWVxcbnN1Y2Nlc3Npb24vU01cXG5zdWNjZXNzaXZlL1lcXG5zdWNjZXNzb3IvU01cXG5zdWNjaW5jdC9SWVRQXFxuc3VjY2luY3RuZXNzL01cXG5zdWNjb3IvU0dNRFxcbnN1Y2NvdGFzaC9NXFxuc3VjY3ViaVxcbnN1Y2N1YnVzXFxuc3VjY3VsZW5jZS9NXFxuc3VjY3VsZW5jeS9NXFxuc3VjY3VsZW50L1NNXFxuc3VjY3VtYi9HRFNcXG5zdWNoXFxuc3VjaGxpa2VcXG5zdWNrL01EUlpHU1xcbnN1Y2tlci9HTURcXG5zdWNrbGUvRFNKR1xcbnN1Y2tsaW5nL01cXG5zdWNyb3NlL01cXG5zdWN0aW9uL1NNREdcXG5zdWRkZW4vUFlcXG5zdWRkZW5uZXNzL01cXG5zdWRzL01cXG5zdWRzeS9UUlxcbnN1ZS9EU0dcXG5zdWVkZS9NXFxuc3VldC9NXFxuc3VldHlcXG5zdWZmZXIvRFJaR1NKXFxuc3VmZmVyYW5jZS9NXFxuc3VmZmVyZXIvTVxcbnN1ZmZlcmluZy9NXFxuc3VmZmljZS9EU0dcXG5zdWZmaWNpZW5jeS9JTVxcbnN1ZmZpY2llbnQvSVlcXG5zdWZmaXgvTURTR1xcbnN1ZmZpeGF0aW9uL01cXG5zdWZmb2NhdGUvR05EU1xcbnN1ZmZvY2F0aW9uL01cXG5zdWZmcmFnYW4vTVNcXG5zdWZmcmFnZS9NXFxuc3VmZnJhZ2V0dGUvU01cXG5zdWZmcmFnaXN0L01TXFxuc3VmZnVzZS9EU0dOXFxuc3VmZnVzaW9uL01cXG5zdWdhci9HU01EXFxuc3VnYXJjYW5lL01cXG5zdWdhcmNvYXQvR0RTXFxuc3VnYXJsZXNzXFxuc3VnYXJwbHVtL01TXFxuc3VnYXJ5L1JUXFxuc3VnZ2VzdC9HVlNEUlxcbnN1Z2dlc3RpYmlsaXR5L01cXG5zdWdnZXN0aWJsZVxcbnN1Z2dlc3Rpb24vU01cXG5zdWdnZXN0aXZlL1lQXFxuc3VnZ2VzdGl2ZW5lc3MvTVxcbnN1aWNpZGFsXFxuc3VpY2lkZS9TTVxcbnN1aXQvQk1ER1NcXG5zdWl0YWJpbGl0eS9VTVxcbnN1aXRhYmxlbmVzcy9NXFxuc3VpdGFibHkvVVxcbnN1aXRjYXNlL1NNXFxuc3VpdGUvU01cXG5zdWl0ZWQvVVxcbnN1aXRpbmcvTVxcbnN1aXRvci9NU1xcbnN1a2l5YWtpL01cXG5zdWxmYS9NXFxuc3VsZmF0ZS9TTVxcbnN1bGZpZGUvU01cXG5zdWxmb25hbWlkZXNcXG5zdWxmdXIvTURTR1xcbnN1bGZ1cmljXFxuc3VsZnVyb3VzXFxuc3Vsay9NREdTXFxuc3Vsa2lseVxcbnN1bGtpbmVzcy9NXFxuc3Vsa3kvVFJTTVBcXG5zdWxsZW4vUllQVFxcbnN1bGxlbm5lc3MvTVxcbnN1bGxpZWQvVVxcbnN1bGx5L0dEU1xcbnN1bHRhbi9NU1xcbnN1bHRhbmEvU01cXG5zdWx0YW5hdGUvTVNcXG5zdWx0cmlseVxcbnN1bHRyaW5lc3MvTVxcbnN1bHRyeS9SUFRcXG5zdW0vU01cXG5zdW1hYy9NXFxuc3VtbWFyaWx5XFxuc3VtbWFyaXplL0dEU1xcbnN1bW1hcnkvU01cXG5zdW1tYXRcXG5zdW1tYXRpb24vRk1TXFxuc3VtbWVkXFxuc3VtbWVyL01EU0dcXG5zdW1tZXJob3VzZS9TTVxcbnN1bW1lcnRpbWUvTVxcbnN1bW1lcnlcXG5zdW1taW5nXFxuc3VtbWl0L01TXFxuc3VtbWl0cnkvTVxcbnN1bW1vbi9EUlNaR1xcbnN1bW1vbmVyL01cXG5zdW1tb25zL0dNRFNcXG5zdW1vL01cXG5zdW1wL01TXFxuc3VtcHR1b3VzL1BZXFxuc3VtcHR1b3VzbmVzcy9NXFxuc3VuL1NNXFxuc3VuYmF0aC9aR01EUlNcXG5zdW5iYXRoZVxcbnN1bmJhdGhlci9NXFxuc3VuYmF0aGluZy9NXFxuc3VuYmF0aHNcXG5zdW5iZWFtL1NNXFxuc3VuYmVkL1NcXG5zdW5iZWx0L1NNXFxuc3VuYmxvY2svTVNcXG5zdW5ib25uZXQvU01cXG5zdW5idXJuL1NHTURcXG5zdW5idXJzdC9NU1xcbnN1bmRhZS9NU1xcbnN1bmRlY2svU1xcbnN1bmRlci9EU0dcXG5zdW5kaWFsL1NNXFxuc3VuZG93bi9TTVxcbnN1bmRyZXNzL1NcXG5zdW5kcmllcy9NXFxuc3VuZHJ5L1NcXG5zdW5maXNoL01TXFxuc3VuZmxvd2VyL01TXFxuc3VuZy9VXFxuc3VuZ2xhc3Nlcy9NXFxuc3VuaGF0L1NcXG5zdW5rL05cXG5zdW5sYW1wL1NNXFxuc3VubGVzc1xcbnN1bmxpZ2h0L01cXG5zdW5saXRcXG5zdW5uZWRcXG5zdW5uaW5lc3MvTVxcbnN1bm5pbmdcXG5zdW5ueS9UUlBcXG5zdW5yaXNlL1NNXFxuc3Vucm9vZi9TTVxcbnN1bnNjcmVlbi9NU1xcbnN1bnNldC9NU1xcbnN1bnNoYWRlL01TXFxuc3Vuc2hpbmUvTVxcbnN1bnNoaW55XFxuc3Vuc3BvdC9TTVxcbnN1bnN0cm9rZS9NXFxuc3VudGFuL01TXFxuc3VudGFubmVkXFxuc3VudGFubmluZ1xcbnN1bnRyYXAvU1xcbnN1bnVwL01cXG5zdXAvU1pNUlxcbnN1cGVyL01cXG5zdXBlcmFidW5kYW5jZS9NU1xcbnN1cGVyYWJ1bmRhbnRcXG5zdXBlcmFubnVhdGUvR05EU1xcbnN1cGVyYW5udWF0aW9uL01cXG5zdXBlcmIvUllUXFxuc3VwZXJjYXJnby9NXFxuc3VwZXJjYXJnb2VzXFxuc3VwZXJjaGFyZ2UvWkdEUlNcXG5zdXBlcmNoYXJnZXIvTVxcbnN1cGVyY2lsaW91cy9QWVxcbnN1cGVyY2lsaW91c25lc3MvTVxcbnN1cGVyY2l0eS9TTVxcbnN1cGVyY29tcHV0ZXIvTVNcXG5zdXBlcmNvbmR1Y3RpbmdcXG5zdXBlcmNvbmR1Y3RpdmVcXG5zdXBlcmNvbmR1Y3Rpdml0eS9NXFxuc3VwZXJjb25kdWN0b3IvU01cXG5zdXBlcmNyaXRpY2FsXFxuc3VwZXJlZ28vTVNcXG5zdXBlcmVyb2dhdGlvbi9NXFxuc3VwZXJlcm9nYXRvcnlcXG5zdXBlcmZpY2lhbC9ZXFxuc3VwZXJmaWNpYWxpdHkvTVxcbnN1cGVyZmluZVxcbnN1cGVyZmx1aXR5L01cXG5zdXBlcmZsdW91cy9ZUFxcbnN1cGVyZmx1b3VzbmVzcy9NXFxuc3VwZXJnbHVlXFxuc3VwZXJncmFzcy9TXFxuc3VwZXJoZXJvL01TXFxuc3VwZXJoZXJvZXNcXG5zdXBlcmhpZ2h3YXkvU01cXG5zdXBlcmh1bWFuXFxuc3VwZXJpbXBvc2UvR0RTXFxuc3VwZXJpbXBvc2l0aW9uL01cXG5zdXBlcmludGVuZC9EU0dcXG5zdXBlcmludGVuZGVuY2UvTVxcbnN1cGVyaW50ZW5kZW5jeS9NXFxuc3VwZXJpbnRlbmRlbnQvU01cXG5zdXBlcmlvci9NU1xcbnN1cGVyaW9yaXR5L01cXG5zdXBlcmxhdGl2ZS9TTVlcXG5zdXBlcm1hbi9NXFxuc3VwZXJtYXJrZXQvU01cXG5zdXBlcm1hc3NpdmVcXG5zdXBlcm1lblxcbnN1cGVybW9kZWwvU01cXG5zdXBlcm1vbS9NU1xcbnN1cGVybmFsXFxuc3VwZXJuYXR1cmFsL1NZXFxuc3VwZXJub3ZhL01TXFxuc3VwZXJub3ZhZVxcbnN1cGVybnVtZXJhcnkvU01cXG5zdXBlcnBvc2UvR0RTXFxuc3VwZXJwb3NpdGlvbi9NXFxuc3VwZXJwb3dlci9TTVxcbnN1cGVyc2F0dXJhdGUvR05EU1xcbnN1cGVyc2F0dXJhdGlvbi9NXFxuc3VwZXJzY3JpYmUvR0RTXFxuc3VwZXJzY3JpcHQvTVNcXG5zdXBlcnNjcmlwdGlvbi9NXFxuc3VwZXJzZWRlL0dEU1xcbnN1cGVyc2l6ZS9HRFNcXG5zdXBlcnNvbmljXFxuc3VwZXJzcHJlYWRlci9TTVxcbnN1cGVyc3Rhci9NU1xcbnN1cGVyc3RhcmRvbVxcbnN1cGVyc3RhdGUvU1xcbnN1cGVyc3RpdGlvbi9NU1xcbnN1cGVyc3RpdGlvdXMvWVxcbnN1cGVyc3RvcmUvTVNcXG5zdXBlcnN0cnVjdHVyZS9NU1xcbnN1cGVydGFua2VyL01TXFxuc3VwZXJ1c2VyL1NcXG5zdXBlcnZlbmUvR0RTXFxuc3VwZXJ2ZW50aW9uL01cXG5zdXBlcnZpc2UvWEdORFNcXG5zdXBlcnZpc2VkL1VcXG5zdXBlcnZpc2lvbi9NXFxuc3VwZXJ2aXNvci9NU1xcbnN1cGVydmlzb3J5XFxuc3VwZXJ3b21hbi9NXFxuc3VwZXJ3b21lblxcbnN1cGluZS9ZXFxuc3VwcC9EUlpHXFxuc3VwcGVyL01cXG5zdXBwZXJ0aW1lXFxuc3VwcGxcXG5zdXBwbGFudC9TREdcXG5zdXBwbGUvVExQUlxcbnN1cHBsZW1lbnQvTURHU1xcbnN1cHBsZW1lbnRhbFxcbnN1cHBsZW1lbnRhcnlcXG5zdXBwbGVtZW50YXRpb24vTVxcbnN1cHBsZW5lc3MvTVxcbnN1cHBsaWFudC9TTVxcbnN1cHBsaWNhbnQvTVNcXG5zdXBwbGljYXRlL0dEU1xcbnN1cHBsaWNhdGlvbi9NXFxuc3VwcGxpZXIvTVxcbnN1cHBseS9aR0RSU01YTlxcbnN1cHBvcnQvTURSU0JaR1ZcXG5zdXBwb3J0YWJsZS9VSVxcbnN1cHBvcnRlZC9VXFxuc3VwcG9ydGVyL01cXG5zdXBwb3NlL0dEU1xcbnN1cHBvc2VkL1lcXG5zdXBwb3NpdGlvbi9NU1xcbnN1cHBvc2l0b3J5L1NNXFxuc3VwcHJlc3MvR1ZEU1xcbnN1cHByZXNzYW50L01TXFxuc3VwcHJlc3NpYmxlXFxuc3VwcHJlc3Npb24vTVxcbnN1cHByZXNzb3IvU01cXG5zdXBwdXJhdGUvRFNHTlxcbnN1cHB1cmF0aW9uL01cXG5zdXByYVxcbnN1cHJhbmF0aW9uYWxcXG5zdXByZW1hY2lzdC9NU1xcbnN1cHJlbWFjeS9NXFxuc3VwcmVtZS9ZXFxuc3VwcmVtby9TXFxuc3VwdFxcbnN1cmNlYXNlL0RTTUdcXG5zdXJjaGFyZ2UvRFNNR1xcbnN1cmNpbmdsZS9TTVxcbnN1cmUvUFlUUlxcbnN1cmVmaXJlXFxuc3VyZWZvb3RlZFxcbnN1cmVuZXNzL01cXG5zdXJldHkvU01cXG5zdXJmL01EUlpHU1xcbnN1cmZhY2Unc1xcbnN1cmZhY2UvQUdEU1xcbnN1cmZib2FyZC9NRFNHXFxuc3VyZmVpdC9NRFNHXFxuc3VyZmVyL01cXG5zdXJmaW5nL01cXG5zdXJnZS9EU01HXFxuc3VyZ2Vvbi9NU1xcbnN1cmdlcnkvU01cXG5zdXJnaWNhbC9ZXFxuc3VybGluZXNzL01cXG5zdXJseS9QVFJcXG5zdXJtaXNlL01HRFNcXG5zdXJtb3VudC9ER1NCXFxuc3VybW91bnRhYmxlL0lcXG5zdXJuYW1lL01TXFxuc3VycGFzcy9HRFNcXG5zdXJwYXNzZWQvVVxcbnN1cnBsaWNlL01TXFxuc3VycGx1cy9NU1xcbnN1cnBsdXNzZWRcXG5zdXJwbHVzc2luZ1xcbnN1cnByaXNlL0RTTUdKXFxuc3VycHJpc2luZy9VWVxcbnN1cnJlYWxcXG5zdXJyZWFsaXNtL01cXG5zdXJyZWFsaXN0L1NNXFxuc3VycmVhbGlzdGljXFxuc3VycmVhbGlzdGljYWxseVxcbnN1cnJlbmRlci9NRFNHXFxuc3VycmVwdGl0aW91cy9QWVxcbnN1cnJlcHRpdGlvdXNuZXNzL01cXG5zdXJyZXkvTVNcXG5zdXJyb2dhY3kvTVxcbnN1cnJvZ2F0ZS9TTVxcbnN1cnJvdW5kL0dTREpcXG5zdXJyb3VuZGluZy9NXFxuc3Vycm91bmRpbmdzL01cXG5zdXJ0YXgvTURTR1xcbnN1cnRpdGxlL1NcXG5zdXJ2ZWlsbGFuY2UvTVxcbnN1cnZleSdzXFxuc3VydmV5L0FER1NcXG5zdXJ2ZXlpbmcvTVxcbnN1cnZleW9yL1NNXFxuc3Vydml2YWwvU01cXG5zdXJ2aXZhbGlzdC9TTVxcbnN1cnZpdmUvRFNHQlxcbnN1cnZpdm9yL1NNXFxuc3VzY2VwdGliaWxpdHkvU01cXG5zdXNjZXB0aWJsZS9JXFxuc3VzaGkvTVxcbnN1c3BlY3QvU01ER1xcbnN1c3BlY3RlZC9VXFxuc3VzcGVuZC9TRFJaR1xcbnN1c3BlbmRlci9NXFxuc3VzcGVuc2UvWE1OXFxuc3VzcGVuc2VmdWxcXG5zdXNwZW5zaW9uL01cXG5zdXNwaWNpb24vU01cXG5zdXNwaWNpb3VzL1lcXG5zdXNzL0RTR1xcbnN1c3RhaW4vU0RCR1xcbnN1c3RhaW5hYmlsaXR5XFxuc3VzdGFpbmFibGUvVVxcbnN1c3RhaW5hYmx5XFxuc3VzdGVuYW5jZS9NXFxuc3V0bGVyL01TXFxuc3V0dGVlXFxuc3V0dXJlL01HRFNcXG5zdXplcmFpbi9NU1xcbnN1emVyYWludHkvTVxcbnN2ZWx0ZS9UUlxcbnN3YWIvTVNcXG5zd2FiYmVkXFxuc3dhYmJpbmdcXG5zd2FkZGxlL0RTR1xcbnN3YWcvTVNcXG5zd2FnZ2VkXFxuc3dhZ2dlci9TTURSR1xcbnN3YWdnaW5nXFxuc3dhaW4vU01cXG5zd2FsbG93L0dTTURcXG5zd2FsbG93dGFpbC9NU1xcbnN3YW1cXG5zd2FtaS9TTVxcbnN3YW1wL0dTTURcXG5zd2FtcGxhbmQvTVxcbnN3YW1weS9SVFxcbnN3YW4vTVNcXG5zd2Fuay9UR1NNRFJcXG5zd2Fua2lseVxcbnN3YW5raW5lc3MvTVxcbnN3YW5reS9SUFRcXG5zd2FubmVkXFxuc3dhbm5pbmdcXG5zd2Fuc29uZy9TXFxuc3dhcC9NU1xcbnN3YXBwZWRcXG5zd2FwcGluZ1xcbnN3YXJkL1NNXFxuc3dhcm0vR1NNRFxcbnN3YXJ0aHkvVFJcXG5zd2FzaC9HTURTXFxuc3dhc2hidWNrbGVyL1NNXFxuc3dhc2hidWNrbGluZy9NXFxuc3dhc3Rpa2EvU01cXG5zd2F0L01TXFxuc3dhdGNoL01TXFxuc3dhdGgvR01EU1xcbnN3YXRoZS9NXFxuc3dhdGhzXFxuc3dhdHRlZFxcbnN3YXR0ZXIvU01ER1xcbnN3YXR0aW5nXFxuc3dheS9NREdTXFxuc3dheWJhY2svTURcXG5zd2F5ZWQvVVxcbnN3ZWFyL1pHU1JcXG5zd2VhcmVyL01cXG5zd2VhcndvcmQvTVNcXG5zd2VhdC9aR1NNRFJcXG5zd2VhdGJhbmQvTVNcXG5zd2VhdGVyL01cXG5zd2VhdHBhbnRzL01cXG5zd2VhdHMvTVxcbnN3ZWF0c2hpcnQvU01cXG5zd2VhdHNob3AvTVNcXG5zd2VhdHN1aXQvU1xcbnN3ZWF0eS9SVFxcbnN3ZWRlL1NNXFxuc3dlZXAvWkdTTVJKXFxuc3dlZXBlci9NXFxuc3dlZXBpbmcvTVlcXG5zd2VlcGluZ3MvTVxcbnN3ZWVwc3Rha2VzL01cXG5zd2VldC9YVFNNTlJZUFxcbnN3ZWV0YnJlYWQvU01cXG5zd2VldGJyaWVyL1NNXFxuc3dlZXRjb3JuXFxuc3dlZXRlbmVkL1VcXG5zd2VldGVuZXIvTVNcXG5zd2VldGVuaW5nL01cXG5zd2VldGhlYXJ0L1NNXFxuc3dlZXRpZS9TTVxcbnN3ZWV0aXNoXFxuc3dlZXRtZWF0L01TXFxuc3dlZXRuZXNzL01cXG5zd2VsbC9UR1NNRFJKXFxuc3dlbGxoZWFkL01EU1xcbnN3ZWxsaW5nL01cXG5zd2VsdGVyL1NHTURcXG5zd2VwdFxcbnN3ZXB0YmFja1xcbnN3ZXJ2ZS9NR0RTXFxuc3dlcnZpbmcvVVxcbnN3aWZ0L1BUU01SWVxcbnN3aWZ0bmVzcy9NXFxuc3dpZy9NU1xcbnN3aWdnZWRcXG5zd2lnZ2luZ1xcbnN3aWxsL0dTTURcXG5zd2ltL01TXFxuc3dpbW1lci9TTVxcbnN3aW1taW5nL01ZXFxuc3dpbXN1aXQvU01cXG5zd2ltd2VhclxcbnN3aW5kbGUvRFJTTVpHXFxuc3dpbmRsZXIvTVxcbnN3aW5lL1NNXFxuc3dpbmVoZXJkL1NNXFxuc3dpbmcvWkdTTVJcXG5zd2luZ2VpbmdcXG5zd2luZ2VyL01cXG5zd2luaXNoXFxuc3dpcGUvRFNNR1xcbnN3aXJsL0dTTURcXG5zd2lybHlcXG5zd2lzaC9UR01EUlNcXG5zd2l0Y2gvTURSU1pHQlxcbnN3aXRjaGJhY2svTVNcXG5zd2l0Y2hibGFkZS9TTVxcbnN3aXRjaGJvYXJkL1NNXFxuc3dpdGNoZXIvTVxcbnN3aXRjaG92ZXJcXG5zd2l2ZWwvTURHU1xcbnN3aXpcXG5zd2l6elxcbnN3aXp6bGUvRFNHXFxuc3dvbGxlblxcbnN3b29uL1NHTURcXG5zd29vcC9TR01EXFxuc3dvb3NoL01EU0dcXG5zd29yZC9TTVxcbnN3b3JkZmlzaC9NU1xcbnN3b3JkcGxheS9NXFxuc3dvcmRzbWFuL01cXG5zd29yZHNtYW5zaGlwL01cXG5zd29yZHNtZW5cXG5zd29yZVxcbnN3b3JuXFxuc3dvdC9TXFxuc3dvdHRlZFxcbnN3b3R0aW5nXFxuc3d1bVxcbnN3dW5nXFxuc3liYXJpdGUvU01cXG5zeWJhcml0aWNcXG5zeWNhbW9yZS9NU1xcbnN5Y29waGFuY3kvTVxcbnN5Y29waGFudC9TTVxcbnN5Y29waGFudGljXFxuc3lsbGFiaWNcXG5zeWxsYWJpY2F0ZS9HTkRTXFxuc3lsbGFiaWNhdGlvbi9NXFxuc3lsbGFiaWZpY2F0aW9uL01cXG5zeWxsYWJpZnkvRFNOR1xcbnN5bGxhYmxlL01TXFxuc3lsbGFidWIvU1xcbnN5bGxhYnVzL01TXFxuc3lsbG9naXNtL01TXFxuc3lsbG9naXN0aWNcXG5zeWxwaC9NXFxuc3lscGhpY1xcbnN5bHBobGlrZVxcbnN5bHBoc1xcbnN5bHZhblxcbnN5bWJpb3Nlc1xcbnN5bWJpb3Npcy9NXFxuc3ltYmlvdGljXFxuc3ltYmlvdGljYWxseVxcbnN5bWJvbC9NU1xcbnN5bWJvbGljXFxuc3ltYm9saWNhbC9ZXFxuc3ltYm9saXNtL01cXG5zeW1ib2xpemF0aW9uL01cXG5zeW1ib2xpemUvRFNHXFxuc3ltYm9sb2d5XFxuc3ltbWV0cmljXFxuc3ltbWV0cmljYWwvWVxcbnN5bW1ldHJ5L1NNXFxuc3ltcGF0aGV0aWMvVVxcbnN5bXBhdGhldGljYWxseS9VXFxuc3ltcGF0aGllcy9NXFxuc3ltcGF0aGl6ZS9aR0RSU1xcbnN5bXBhdGhpemVyL01cXG5zeW1wYXRoeS9TTVxcbnN5bXBob25pY1xcbnN5bXBob255L1NNXFxuc3ltcG9zaXVtL01TXFxuc3ltcHRvbS9NU1xcbnN5bXB0b21hdGljXFxuc3ltcHRvbWF0aWNhbGx5XFxuc3luL0hcXG5zeW5hZ29nYWxcXG5zeW5hZ29ndWUvU01cXG5zeW5hcHNlL01TXFxuc3luYXB0aWNcXG5zeW5jL01EU0dcXG5zeW5jaHJvbmljaXR5XFxuc3luY2hyb25pemF0aW9uL1NNXFxuc3luY2hyb25pemUvR0RTXFxuc3luY2hyb25vdXMvWVxcbnN5bmNocm9ueVxcbnN5bmNvcGF0ZS9EU0dOXFxuc3luY29wYXRpb24vTVxcbnN5bmNvcGUvTVxcbnN5bmRpY2FsaXNtXFxuc3luZGljYWxpc3QvU1xcbnN5bmRpY2F0ZS9EU01HTlxcbnN5bmRpY2F0aW9uL01cXG5zeW5kcm9tZS9TTVxcbnN5bmVyZ2lzbS9NXFxuc3luZXJnaXN0aWNcXG5zeW5lcmd5L1NNXFxuc3luZnVlbC9NU1xcbnN5bm9kL1NNXFxuc3lub255bS9TTVxcbnN5bm9ueW1vdXNcXG5zeW5vbnlteS9NXFxuc3lub3BzZXNcXG5zeW5vcHNpcy9NXFxuc3lub3B0aWNcXG5zeW5vdmlhbFxcbnN5bnRhY3RpY1xcbnN5bnRhY3RpY2FsL1lcXG5zeW50YXgvTVxcbnN5bnRoZXNlc1xcbnN5bnRoZXNpcy9NXFxuc3ludGhlc2l6ZS9aR0RSU1xcbnN5bnRoZXNpemVyL01cXG5zeW50aGV0aWMvU01cXG5zeW50aGV0aWNhbGx5XFxuc3ludGhzXFxuc3lwaGlsaXMvTVxcbnN5cGhpbGl0aWMvU01cXG5zeXJpbmdlL0RTTUdcXG5zeXJ1cC9TTVxcbnN5cnVweVxcbnN5c2FkbWluL1NcXG5zeXNvcC9TXFxuc3lzdGVtL1NNXFxuc3lzdGVtYXRpYy9VXFxuc3lzdGVtYXRpY2FsL1lcXG5zeXN0ZW1hdGl6YXRpb24vTVxcbnN5c3RlbWF0aXplL0dEU1xcbnN5c3RlbWljL01TXFxuc3lzdGVtaWNhbGx5XFxuc3lzdG9sZS9TTVxcbnN5c3RvbGljXFxudC9TRE5YR0JKXFxudGFcXG50YWIvU01cXG50YWJiZWRcXG50YWJiaW5nXFxudGFiYm91bGVoL01cXG50YWJieS9TTVxcbnRhYmVybmFjbGUvU01cXG50YWJsYS9NU1xcbnRhYmxlL01HRFNcXG50YWJsZWF1L01cXG50YWJsZWF1eFxcbnRhYmxlY2xvdGgvTVxcbnRhYmxlY2xvdGhzXFxudGFibGVsYW5kL1NNXFxudGFibGVzcG9vbi9TTVxcbnRhYmxlc3Bvb25mdWwvU01cXG50YWJsZXQvU01cXG50YWJsZXRvcC9NU1xcbnRhYmxld2FyZS9NXFxudGFibG9pZC9TTVxcbnRhYm9vL01EU0dcXG50YWJvci9NU1xcbnRhYnVsYXJcXG50YWJ1bGF0ZS9EU0dOWFxcbnRhYnVsYXRpb24vTVxcbnRhYnVsYXRvci9TTVxcbnRhY2hvZ3JhcGhcXG50YWNob2dyYXBoc1xcbnRhY2hvbWV0ZXIvU01cXG50YWNoeWNhcmRpYS9NXFxudGFjaHlvblxcbnRhY2l0L1BZXFxudGFjaXRuZXNzL01cXG50YWNpdHVybi9ZXFxudGFjaXR1cm5pdHkvTVxcbnRhY2svWkdNRFJTXFxudGFja2VyL01cXG50YWNraW5lc3MvTVxcbnRhY2tsZS9EUlNNWkdcXG50YWNrbGVyL01cXG50YWNreS9SVFBcXG50YWNvL01TXFxudGFjdC9GTVxcbnRhY3RmdWwvWVBcXG50YWN0ZnVsbmVzcy9NXFxudGFjdGljL1NNXFxudGFjdGljYWwvWVxcbnRhY3RpY2lhbi9NU1xcbnRhY3RpbGVcXG50YWN0aWxpdHkvTVxcbnRhY3RsZXNzL1BZXFxudGFjdGxlc3NuZXNzL01cXG50YWQvU01cXG50YWRwb2xlL01TXFxudGFmZmV0YS9NXFxudGFmZnJhaWwvU01cXG50YWZmeS9TTVxcbnRhZy9TTVxcbnRhZ2dlZFxcbnRhZ2dlci9TTVxcbnRhZ2dpbmdcXG50YWdsaWF0ZWxsZVxcbnRhZ2xpbmUvTVNcXG50YWlnYS9NU1xcbnRhaWwvQUNTRE1HXFxudGFpbGJhY2svTVNcXG50YWlsYm9hcmQvU1xcbnRhaWxib25lL1NcXG50YWlsY29hdC9NU1xcbnRhaWxnYXRlL01aR0RSU1xcbnRhaWxnYXRlci9NXFxudGFpbGxlc3NcXG50YWlsbGlnaHQvTVNcXG50YWlsb3IvU0dNRFxcbnRhaWxvcmluZy9NXFxudGFpbHBpZWNlL1NcXG50YWlscGlwZS9TTVxcbnRhaWxzcGluL1NNXFxudGFpbHdpbmQvU01cXG50YWludC9NRFNHXFxudGFpbnRlZC9VXFxudGFrZS9BSU1TXFxudGFrZWF3YXkvU1xcbnRha2VuL0FcXG50YWtlb2ZmL01TXFxudGFrZW91dC9NU1xcbnRha2VvdmVyL1NNXFxudGFrZXIvTVNcXG50YWtpbmcvU01cXG50YWtpbmdzL01cXG50YWxjL01cXG50YWxjdW0vTVxcbnRhbGUvTVNcXG50YWxlYmVhcmVyL01TXFxudGFsZW50L1NNRFxcbnRhbGVudGVkL1VcXG50YWxpXFxudGFsaXNtYW4vTVNcXG50YWxrL1pHTURSU1xcbnRhbGthdGl2ZS9QWVxcbnRhbGthdGl2ZW5lc3MvTVxcbnRhbGtlci9NXFxudGFsa2llL1JTTVRcXG50YWxreVxcbnRhbGwvVFJQXFxudGFsbGJveS9NU1xcbnRhbGxpZXIvTVxcbnRhbGxpc2hcXG50YWxsbmVzcy9NXFxudGFsbG93L01cXG50YWxsb3d5XFxudGFsbHkvRFJTTVpHXFxudGFsbHloby9NREdTXFxudGFsb24vTVNcXG50YWx1cy9NU1xcbnRhbS9TTVxcbnRhbWFsZS9TTVxcbnRhbWFyYWNrL01TXFxudGFtYXJpbmQvTVNcXG50YW1ib3VyaW5lL01TXFxudGFtZS9CWVpUR0RSU1BcXG50YW1lZC9VXFxudGFtZW5lc3MvTVxcbnRhbWVyL01cXG50YW1veGlmZW5cXG50YW1wL1pHRFJTXFxudGFtcGVyL1pHRFJcXG50YW1wZXJlci9NXFxudGFtcG9uL1NNXFxudGFuL1NNXFxudGFuYWdlci9NU1xcbnRhbmJhcmsvTVxcbnRhbmRlbS9TTVxcbnRhbmRvb3JpL01cXG50YW5nL01TXFxudGFuZ2Vsby9NU1xcbnRhbmdlbnQvTVNcXG50YW5nZW50aWFsL1lcXG50YW5nZXJpbmUvTVNcXG50YW5naWJpbGl0eS9JTVxcbnRhbmdpYmxlL0lNU1xcbnRhbmdpYmxlbmVzcy9NXFxudGFuZ2libHkvSVxcbnRhbmdsZSdzXFxudGFuZ2xlL1VEU0dcXG50YW5nby9NRFNHXFxudGFuZ3kvUlRcXG50YW5rL1pHTURSU1xcbnRhbmthcmQvTVNcXG50YW5rZXIvTVxcbnRhbmtmdWwvTVNcXG50YW5uZWQvVVxcbnRhbm5lci9TTVxcbnRhbm5lcnkvU01cXG50YW5uZXN0XFxudGFubmluL01cXG50YW5uaW5nL01cXG50YW5zeS9NXFxudGFudGFsaXphdGlvbi9NXFxudGFudGFsaXplL1pHRFJTXFxudGFudGFsaXplci9NXFxudGFudGFsaXppbmcvWVxcbnRhbnRhbHVtL01cXG50YW50YW1vdW50XFxudGFudHJhL01cXG50YW50cnVtL1NNXFxudGFwL1NaR01EUlxcbnRhcGFzXFxudGFwZS9NU1xcbnRhcGVsaW5lL01TXFxudGFwZXIvTURHXFxudGFwZXN0cnkvU01cXG50YXBld29ybS9NU1xcbnRhcGlvY2EvTVxcbnRhcGlyL01TXFxudGFwcGVkL1VcXG50YXBwZXIvTVNcXG50YXBwZXQvTVNcXG50YXBwaW5nXFxudGFwcm9vbS9TTVxcbnRhcHJvb3QvU01cXG50YXIvU0dNRFxcbnRhcmFtYXNhbGF0YVxcbnRhcmFudGVsbGEvTVNcXG50YXJhbnR1bGEvU01cXG50YXJiYWxsL1NcXG50YXJkaWx5XFxudGFyZGluZXNzL01cXG50YXJkeS9UUFJcXG50YXJlL01TXFxudGFyZ2V0L01ER1NcXG50YXJpZmYvTVNcXG50YXJtYWMvTVNcXG50YXJtYWNhZGFtXFxudGFybWFja2VkXFxudGFybWFja2luZ1xcbnRhcm4vTVNcXG50YXJuaXNoL0dNRFNcXG50YXJuaXNoZWQvVVxcbnRhcm8vTVNcXG50YXJvdC9NU1xcbnRhcnAvTVNcXG50YXJwYXVsaW4vTVNcXG50YXJwb24vTVNcXG50YXJyYWdvbi9TTVxcbnRhcnJlZFxcbnRhcnJpbmdcXG50YXJyeS9UR0RSU1xcbnRhcnNhbC9NU1xcbnRhcnNpXFxudGFyc3VzL01cXG50YXJ0L1BUR01EUllTXFxudGFydGFuL01TXFxudGFydGFyL01TXFxudGFydGFyaWNcXG50YXJ0bmVzcy9NXFxudGFydHkvVFxcbnRhc2VyL0dNRFNcXG50YXNrL0dNRFNcXG50YXNrYmFyXFxudGFza21hc3Rlci9NU1xcbnRhc2ttaXN0cmVzcy9NU1xcbnRhc3NlbC9NRFNHXFxudGFzdGUvSk1aR0RSU1xcbnRhc3RlZC9VXFxudGFzdGVmdWwvRVBZXFxudGFzdGVmdWxuZXNzL0VNXFxudGFzdGVsZXNzL1BZXFxudGFzdGVsZXNzbmVzcy9NXFxudGFzdGVyL01cXG50YXN0aWx5XFxudGFzdGluZXNzL01cXG50YXN0aW5nL01cXG50YXN0eS9UUlBcXG50YXQvU1pSXFxudGF0YW1pL01TXFxudGF0ZXIvTVxcbnRhdHRlZFxcbnRhdHRlci9NRFNHXFxudGF0dGVyZGVtYWxpb24vTVNcXG50YXR0aWVcXG50YXR0aW5nL01cXG50YXR0bGUvTVpHRFJTXFxudGF0dGxlci9NXFxudGF0dGxldGFsZS9NU1xcbnRhdHRvby9NRFJTWkdcXG50YXR0b29lci9NXFxudGF0dG9vaXN0L1NNXFxudGF0dHkvVFJTXFxudGF1L1NNXFxudGF1Z2h0L1VBXFxudGF1bnQvWkdNRFJTXFxudGF1bnRlci9NXFxudGF1bnRpbmcvWVxcbnRhdXBlL01cXG50YXV0L1BYVE5SWVxcbnRhdXRlbi9ER1xcbnRhdXRuZXNzL01cXG50YXV0b2xvZ2ljYWwvWVxcbnRhdXRvbG9nb3VzXFxudGF1dG9sb2d5L1NNXFxudGF2ZXJuL01TXFxudGF3ZHJpbHlcXG50YXdkcmluZXNzL01cXG50YXdkcnkvUlRQXFxudGF3bnkvVFJNXFxudGF4L0JaR01EUlNcXG50YXhhXFxudGF4YXRpb24vTVxcbnRheGVyL01cXG50YXhpL0dNRFNcXG50YXhpY2FiL1NNXFxudGF4aWRlcm1pc3QvU01cXG50YXhpZGVybXkvTVxcbnRheGltZXRlci9NU1xcbnRheGl3YXkvU1xcbnRheG1hblxcbnRheG1lblxcbnRheG9uXFxudGF4b25vbWljXFxudGF4b25vbWlzdC9NU1xcbnRheG9ub215L1NNXFxudGF4cGF5ZXIvTVNcXG50YXhwYXlpbmdcXG50Yi9TXFxudGJzcFxcbnRlYS9TTVxcbnRlYWJhZy9TXFxudGVhY2FrZS9TTVxcbnRlYWNoL1pHUlNCSlxcbnRlYWNoYWJsZS9VXFxudGVhY2hlci9NXFxudGVhY2hpbmcvTVxcbnRlYWN1cC9NU1xcbnRlYWN1cGZ1bC9NU1xcbnRlYWsvTVNcXG50ZWFrZXR0bGUvU01cXG50ZWFsL01TXFxudGVhbGlnaHQvTVNcXG50ZWFtL0dNRFNcXG50ZWFtbWF0ZS9NU1xcbnRlYW1zdGVyL01TXFxudGVhbXdvcmsvTVxcbnRlYXBvdC9NU1xcbnRlYXIvR01EU1xcbnRlYXJhd2F5L1NcXG50ZWFyZHJvcC9TTVxcbnRlYXJmdWwvWVxcbnRlYXJnYXMvTVNcXG50ZWFyZ2Fzc2VkXFxudGVhcmdhc3NpbmdcXG50ZWFyamVya2VyL01TXFxudGVhcm9vbS9TTVxcbnRlYXJ5L1RSXFxudGVhc2UvTVpHRFJTXFxudGVhc2VsL01TXFxudGVhc2VyL01cXG50ZWFzaW5nL1lcXG50ZWFzcG9vbi9TTVxcbnRlYXNwb29uZnVsL1NNXFxudGVhdC9NU1xcbnRlYXRpbWUvU1xcbnRlY2gvTVxcbnRlY2hpZS9TXFxudGVjaG5ldGl1bS9NXFxudGVjaG5pY2FsL1lcXG50ZWNobmljYWxpdHkvU01cXG50ZWNobmljaWFuL1NNXFxudGVjaG5pY29sb3JcXG50ZWNobmlxdWUvU01cXG50ZWNobm9cXG50ZWNobm9iYWJibGVcXG50ZWNobm9jcmFjeS9TTVxcbnRlY2hub2NyYXQvTVNcXG50ZWNobm9jcmF0aWNcXG50ZWNobm9sb2dpY2FsL1lcXG50ZWNobm9sb2dpc3QvTVNcXG50ZWNobm9sb2d5L1NNXFxudGVjaG5vcGhvYmUvU1xcbnRlY2hzXFxudGVjdG9uaWMvU1xcbnRlY3Rvbmljcy9NXFxudGVkL1NcXG50ZWRkeS9TXFxudGVkaW91cy9QWVxcbnRlZGlvdXNuZXNzL01cXG50ZWRpdW0vTVxcbnRlZS9EU01IXFxudGVlaW5nXFxudGVlbS9HRFNcXG50ZWVuL01TXFxudGVlbmFnZS9SWlxcbnRlZW5hZ2VyL01cXG50ZWVueS9UUlxcbnRlZW55Ym9wcGVyL01TXFxudGVldGVyL01EU0dcXG50ZWV0aGUvR0RTXFxudGVldGhpbmcvTVxcbnRlZXRvdGFsL1JaXFxudGVldG90YWxlci9NXFxudGVldG90YWxpc20vTVxcbnRla3RpdGUvU01cXG50ZWxcXG50ZWxlY2FzdC9TWkdNUlxcbnRlbGVjYXN0ZXIvTVxcbnRlbGVjb21tdW5pY2F0aW9uL01TXFxudGVsZWNvbW11bmljYXRpb25zL01cXG50ZWxlY29tbXV0ZS9aR0RSU1xcbnRlbGVjb21tdXRlci9NXFxudGVsZWNvbW11dGluZy9NXFxudGVsZWNvbmZlcmVuY2UvTUdEU1xcbnRlbGVjb25mZXJlbmNpbmcvTVxcbnRlbGVnZW5pY1xcbnRlbGVncmFtL01TXFxudGVsZWdyYXBoL01EUlpHXFxudGVsZWdyYXBoZXIvTVxcbnRlbGVncmFwaGVzZVxcbnRlbGVncmFwaGljXFxudGVsZWdyYXBoaWNhbGx5XFxudGVsZWdyYXBoaXN0L1NNXFxudGVsZWdyYXBoc1xcbnRlbGVncmFwaHkvTVxcbnRlbGVraW5lc2lzL01cXG50ZWxla2luZXRpY1xcbnRlbGVtYXJrZXRlci9TTVxcbnRlbGVtYXJrZXRpbmcvTVxcbnRlbGVtZXRlci9TTVxcbnRlbGVtZXRyeS9TTVxcbnRlbGVvbG9naWNhbFxcbnRlbGVvbG9neVxcbnRlbGVwYXRoaWNcXG50ZWxlcGF0aGljYWxseVxcbnRlbGVwYXRoeS9NXFxudGVsZXBob25lL0RSU01aR1xcbnRlbGVwaG9uZXIvTVxcbnRlbGVwaG9uaWNcXG50ZWxlcGhvbmlzdC9TXFxudGVsZXBob255L01cXG50ZWxlcGhvdG8vU01cXG50ZWxlcGhvdG9ncmFwaHkvTVxcbnRlbGVwbGF5L01TXFxudGVsZXBvcnRcXG50ZWxlcG9ydGF0aW9uXFxudGVsZXByaW50ZXIvTVNcXG50ZWxlcHJvY2Vzc2luZy9NXFxudGVsZXByb21wdGVyL1NNXFxudGVsZXNhbGVzXFxudGVsZXNjb3BlL0RTTUdcXG50ZWxlc2NvcGljXFxudGVsZXNjb3BpY2FsbHlcXG50ZWxldGV4dC9NU1xcbnRlbGV0aG9uL01TXFxudGVsZXR5cGUvU1xcbnRlbGV0eXBld3JpdGVyL01TXFxudGVsZXZhbmdlbGlzbS9NXFxudGVsZXZhbmdlbGlzdC9NU1xcbnRlbGV2aXNlL1hHTkRTXFxudGVsZXZpc2lvbi9NXFxudGVsZXdvcmtlci9TXFxudGVsZXdvcmtpbmdcXG50ZWxleC9NRFNHXFxudGVsbC9BR1NcXG50ZWxsZXIvU01cXG50ZWxsaW5nL1lcXG50ZWxsdGFsZS9TTVxcbnRlbGx1cml1bS9NXFxudGVsbHkvU01cXG50ZWxuZXRcXG50ZW1ibG9yL01TXFxudGVtZXJpdHkvTVxcbnRlbXAvTURSWlRHU1xcbnRlbXBlci9NREdcXG50ZW1wZXJhL0xTTVxcbnRlbXBlcmFtZW50L01TXFxudGVtcGVyYW1lbnRhbC9ZXFxudGVtcGVyYW5jZS9JTVxcbnRlbXBlcmF0ZS9JWVxcbnRlbXBlcmF0ZW5lc3MvTVxcbnRlbXBlcmF0dXJlL1NNXFxudGVtcGVzdC9TTVxcbnRlbXBlc3R1b3VzL1lQXFxudGVtcGVzdHVvdXNuZXNzL01cXG50ZW1wbGF0ZSdzXFxudGVtcGxhdGUvU1xcbnRlbXBsZS9TTVxcbnRlbXBvL1NNXFxudGVtcG9yYWwvWVxcbnRlbXBvcmFyaWx5XFxudGVtcG9yYXJpbmVzcy9NXFxudGVtcG9yYXJ5L0ZTTVxcbnRlbXBvcml6ZS9aR0RSU1xcbnRlbXBvcml6ZXIvTVxcbnRlbXB0L1NEUlpHXFxudGVtcHRhdGlvbi9NU1xcbnRlbXB0ZXIvTVxcbnRlbXB0aW5nL1lcXG50ZW1wdHJlc3MvTVNcXG50ZW1wdXJhL01cXG50ZW4vQk1IXFxudGVuYWJpbGl0eS9NXFxudGVuYWJsZS9VXFxudGVuYWJseVxcbnRlbmFjaW91cy9ZUFxcbnRlbmFjaW91c25lc3MvTVxcbnRlbmFjaXR5L01cXG50ZW5hbmN5L1NNXFxudGVuYW50L1NNREdcXG50ZW5hbnRlZC9VXFxudGVuYW50cnkvTVxcbnRlbmNoXFxudGVuZC9JRUZER1NcXG50ZW5kZWQvVVxcbnRlbmRlbmN5L1NNXFxudGVuZGVudGlvdXMvWVBcXG50ZW5kZW50aW91c25lc3MvTVxcbnRlbmRlci9TTURSWVRHUFxcbnRlbmRlcmZvb3QvTVNcXG50ZW5kZXJoZWFydGVkL1BcXG50ZW5kZXJoZWFydGVkbmVzcy9NXFxudGVuZGVyaXplL1pHRFJTXFxudGVuZGVyaXplci9NXFxudGVuZGVybG9pbi9TTVxcbnRlbmRlcm5lc3MvTVxcbnRlbmRpbml0aXMvTVxcbnRlbmRvbi9TTVxcbnRlbmRyaWwvU01cXG50ZW5lbWVudC9TTVxcbnRlbmV0L1NNXFxudGVuZm9sZFxcbnRlbm5lci9TXFxudGVubmlzL01cXG50ZW5vbi9TTURHXFxudGVub3IvU01cXG50ZW5waW4vU01cXG50ZW5waW5zL01cXG50ZW5zZS9EUlNNWVRHTlhQXFxudGVuc2VuZXNzL01cXG50ZW5zaWxlXFxudGVuc2lvbi9FU01cXG50ZW5zaXR5L0lNXFxudGVuc29yL1NcXG50ZW50L0RHU01cXG50ZW50YWNsZS9EU01cXG50ZW50YXRpdmUvUFlcXG50ZW50YXRpdmVuZXNzL01cXG50ZW50ZXJob29rL01TXFxudGVudGgvTVlcXG50ZW50aHNcXG50ZW51aXR5L01cXG50ZW51b3VzL1BZXFxudGVudW91c25lc3MvTVxcbnRlbnVyZS9EU01HXFxudGVwZWUvU01cXG50ZXBpZC9ZUFxcbnRlcGlkaXR5L01cXG50ZXBpZG5lc3MvTVxcbnRlcXVpbGEvU01cXG50ZXJhYml0L1NNXFxudGVyYWJ5dGUvTVNcXG50ZXJhaGVydHovTVxcbnRlcmFqb3VsZS9TXFxudGVyYXBpeGVsL01TXFxudGVyYXdhdHQvU1xcbnRlcmJpdW0vTVxcbnRlcmNlbnRlbmFyeS9TTVxcbnRlcmNlbnRlbm5pYWwvU01cXG50ZXJpeWFraVxcbnRlcm0vTURZR1NcXG50ZXJtYWdhbnQvTVNcXG50ZXJtaW5hYmxlL0lDXFxudGVybWluYWwvTVlTXFxudGVybWluYXRlL0RTR05YXFxudGVybWluYXRpb24vQ1NNXFxudGVybWluYXRvci9TXFxudGVybWluaVxcbnRlcm1pbm9sb2dpY2FsL1lcXG50ZXJtaW5vbG9neS9TTVxcbnRlcm1pbnVzL01cXG50ZXJtaXRlL1NNXFxudGVybi9JTVNcXG50ZXJuYXJ5L1NNXFxudGVyclxcbnRlcnJhY2UvRFNNR1xcbnRlcnJhY290dGEvTVxcbnRlcnJhaW4vU01cXG50ZXJyYXBpbi9NU1xcbnRlcnJhcml1bS9TTVxcbnRlcnJhenpvL01TXFxudGVycmVzdHJpYWwvU01ZXFxudGVycmlibGUvUFxcbnRlcnJpYmxlbmVzcy9NXFxudGVycmlibHlcXG50ZXJyaWVyL01cXG50ZXJyaWZpY1xcbnRlcnJpZmljYWxseVxcbnRlcnJpZnkvR0RTXFxudGVycmlmeWluZy9ZXFxudGVycmluZS9TXFxudGVycml0b3JpYWwvTVNcXG50ZXJyaXRvcmlhbGl0eVxcbnRlcnJpdG9yeS9TTVxcbnRlcnJvci9TTVxcbnRlcnJvcmlzbS9NXFxudGVycm9yaXN0L1NNXFxudGVycm9yaXplL0RTR1xcbnRlcnJ5L1JNWlxcbnRlcnJ5Y2xvdGgvTVxcbnRlcnNlL1JZVFBcXG50ZXJzZW5lc3MvTVxcbnRlcnRpYXJ5XFxudGVzc2VsbGF0ZS9EU1hHTlxcbnRlc3NlbGxhdGlvbi9NXFxudGVzdCdzL0FGS1xcbnRlc3QvQUtGQ0RHU1xcbnRlc3RhYmxlL0NGXFxudGVzdGFtZW50L01TXFxudGVzdGFtZW50YXJ5XFxudGVzdGF0ZS9TXFxudGVzdGF0b3IvTVNcXG50ZXN0YXRyaWNlc1xcbnRlc3RhdHJpeC9NXFxudGVzdGVkL1VcXG50ZXN0ZXIvS1NNXFxudGVzdGVzXFxudGVzdGljbGUvTVNcXG50ZXN0aWN1bGFyXFxudGVzdGlmaWVyL01cXG50ZXN0aWZ5L1pHRFJTXFxudGVzdGlseVxcbnRlc3RpbW9uaWFsL01TXFxudGVzdGltb255L1NNXFxudGVzdGluZXNzL01cXG50ZXN0aW5nc1xcbnRlc3Rpcy9NXFxudGVzdG9zdGVyb25lL01cXG50ZXN0eS9QUlRcXG50ZXRhbnVzL01cXG50ZXRjaGlseVxcbnRldGNoeS9QUlRcXG50ZXRoZXIvU01ER1xcbnRldHJhL1NNXFxudGV0cmFjeWNsaW5lL01cXG50ZXRyYWhlZHJhbFxcbnRldHJhaGVkcm9uL01TXFxudGV0cmFtZXRlci9TTVxcbnRleHQvRk1TXFxudGV4dGJvb2svU01cXG50ZXh0ZWRcXG50ZXh0aWxlL01TXFxudGV4dGluZ1xcbnRleHR1YWwvRllcXG50ZXh0dXJhbFxcbnRleHR1cmUvTUdEU1xcbnRoYWxhbWlcXG50aGFsYW11cy9NXFxudGhhbGlkb21pZGUvTVxcbnRoYWxsaXVtL01cXG50aGFuXFxudGhhbmUvU01cXG50aGFuay9TREdcXG50aGFua2Z1bC9ZUFxcbnRoYW5rZnVsbmVzcy9NXFxudGhhbmtsZXNzL1BZXFxudGhhbmtsZXNzbmVzcy9NXFxudGhhbmtzZ2l2aW5nL1NNXFxudGhhdCdkXFxudGhhdCdsbFxcbnRoYXQvTVxcbnRoYXRjaC9NRFJTWkdcXG50aGF0Y2hlci9NXFxudGhhdGNoaW5nL01cXG50aGF3L01ER1NcXG50aGUvSkdcXG50aGVhdGVyL1NNXFxudGhlYXRlcmdvZXIvU01cXG50aGVhdHJpY2FsL1lTXFxudGhlYXRyaWNhbGl0eS9NXFxudGhlYXRyaWNhbHMvTVxcbnRoZWF0cmljcy9NXFxudGhlZS9TXFxudGhlZnQvU01cXG50aGVpci9TXFxudGhlaXNtL01cXG50aGVpc3QvU01cXG50aGVpc3RpY1xcbnRoZW1cXG50aGVtYXRpY1xcbnRoZW1hdGljYWxseVxcbnRoZW1lL0RTTVxcbnRoZW1zZWx2ZXNcXG50aGVuL01cXG50aGVuY2VcXG50aGVuY2Vmb3J0aFxcbnRoZW5jZWZvcndhcmRcXG50aGVvY3JhY3kvU01cXG50aGVvY3JhdGljXFxudGhlb2RvbGl0ZS9TXFxudGhlb2xvZ2lhbi9TTVxcbnRoZW9sb2dpY2FsL1lcXG50aGVvbG9neS9TTVxcbnRoZW9yZW0vTVNcXG50aGVvcmV0aWNcXG50aGVvcmV0aWNhbC9ZXFxudGhlb3JldGljaWFuL1NNXFxudGhlb3Jpc3QvU01cXG50aGVvcml6ZS9EU0dcXG50aGVvcnkvU01cXG50aGVvc29waGljXFxudGhlb3NvcGhpY2FsXFxudGhlb3NvcGhpc3QvU01cXG50aGVvc29waHkvTVxcbnRoZXJhcGV1dGljL1NcXG50aGVyYXBldXRpY2FsbHlcXG50aGVyYXBldXRpY3MvTVxcbnRoZXJhcGlzdC9TTVxcbnRoZXJhcHkvU01cXG50aGVyZS9NXFxudGhlcmVhYm91dC9TXFxudGhlcmVhZnRlclxcbnRoZXJlYXRcXG50aGVyZWJ5XFxudGhlcmVmb3JcXG50aGVyZWZvcmVcXG50aGVyZWZyb21cXG50aGVyZWluXFxudGhlcmVtaW4vU01cXG50aGVyZW9mXFxudGhlcmVvblxcbnRoZXJldG9cXG50aGVyZXRvZm9yZVxcbnRoZXJldW5kZXJcXG50aGVyZXVudG9cXG50aGVyZXVwb25cXG50aGVyZXdpdGhcXG50aGVybS9TTVxcbnRoZXJtYWwvTVlTXFxudGhlcm1pb25pY1xcbnRoZXJtb2R5bmFtaWMvU1xcbnRoZXJtb2R5bmFtaWNzL01cXG50aGVybW9tZXRlci9NU1xcbnRoZXJtb21ldHJpY1xcbnRoZXJtb251Y2xlYXJcXG50aGVybW9wbGFzdGljL1NNXFxudGhlcm1vcy9NU1xcbnRoZXJtb3N0YXQvTVNcXG50aGVybW9zdGF0aWNcXG50aGVybW9zdGF0aWNhbGx5XFxudGhlc2F1cmlcXG50aGVzYXVydXMvTVNcXG50aGVzZS9TXFxudGhlc2lzL01cXG50aGVzcGlhbi9TTVxcbnRoZXRhL1NNXFxudGhldy9NU1xcbnRoZXlcXG50aGV5J2RcXG50aGV5J2xsXFxudGhleSdyZVxcbnRoZXkndmVcXG50aGlhbWluZS9NXFxudGhpY2svUE1OUllYVFxcbnRoaWNrZW4vRFJKWkdcXG50aGlja2VuZXIvTVxcbnRoaWNrZW5pbmcvTVxcbnRoaWNrZXQvTVNcXG50aGlja2hlYWRlZC9NXFxudGhpY2tuZXNzL01TXFxudGhpY2tvL1NcXG50aGlja3NldFxcbnRoaWVmL01cXG50aGlldmUvRFNHXFxudGhpZXZlcnkvTVxcbnRoaWV2aW5nL01cXG50aGlldmlzaFxcbnRoaWdoL01cXG50aGlnaGJvbmUvTVNcXG50aGlnaHNcXG50aGltYmxlL01TXFxudGhpbWJsZWZ1bC9TTVxcbnRoaW4vWVNQXFxudGhpbmVcXG50aGluZy9NXFxudGhpbmdhbWFib2IvU01cXG50aGluZ2FtYWppZy9TTVxcbnRoaW5ndW1hYm9iL1NcXG50aGluZ3VtbXkvU1xcbnRoaW5neS9TXFxudGhpbmsvU1JCWkdcXG50aGlua2FibGUvVVxcbnRoaW5rZXIvTVxcbnRoaW5raW5nJ3NcXG50aGlubmVkXFxudGhpbm5lci9NU1xcbnRoaW5uZXNzL01cXG50aGlubmVzdFxcbnRoaW5uaW5nXFxudGhpcmQvU01ZXFxudGhpcnN0L1NHTURcXG50aGlyc3RpbHlcXG50aGlyc3RpbmVzcy9NXFxudGhpcnN0eS9UUFJcXG50aGlydGVlbi9TTUhcXG50aGlydGVlbnRoL01cXG50aGlydGVlbnRoc1xcbnRoaXJ0aWV0aC9NXFxudGhpcnRpZXRoc1xcbnRoaXJ0eS9IU01cXG50aGlzXFxudGhpc3RsZS9NU1xcbnRoaXN0bGVkb3duL01cXG50aGl0aGVyXFxudGhvXFxudGhvbGUvU01cXG50aG9uZy9TTVxcbnRob3JhY2ljXFxudGhvcmF4L01TXFxudGhvcml1bS9NXFxudGhvcm4vU01cXG50aG9ybmluZXNzL01cXG50aG9ybnkvUFJUXFxudGhvcm91Z2gvUllQVFxcbnRob3JvdWdoYnJlZC9NU1xcbnRob3JvdWdoZmFyZS9NU1xcbnRob3JvdWdoZ29pbmdcXG50aG9yb3VnaG5lc3MvTVxcbnRob3NlXFxudGhvdS9NU1xcbnRob3VnaFxcbnRob3VnaHQvU01cXG50aG91Z2h0ZnVsL1lQXFxudGhvdWdodGZ1bG5lc3MvTVxcbnRob3VnaHRsZXNzL1BZXFxudGhvdWdodGxlc3NuZXNzL01cXG50aG91c2FuZC9NSFNcXG50aG91c2FuZGZvbGRcXG50aG91c2FuZHRoL01cXG50aG91c2FuZHRoc1xcbnRocmFsbC9TTURHXFxudGhyYWxsZG9tL01cXG50aHJhc2gvSk1EUlNaR1xcbnRocmFzaGVyL01cXG50aHJhc2hpbmcvTVxcbnRocmVhZC9TTURSWkdcXG50aHJlYWRiYXJlXFxudGhyZWFkZXIvTVxcbnRocmVhZGxpa2VcXG50aHJlYWR5L1RSXFxudGhyZWF0L1NNTlhcXG50aHJlYXRlbi9ER1xcbnRocmVhdGVuaW5nL1lcXG50aHJlZS9TTVxcbnRocmVlZm9sZFxcbnRocmVlcGVuY2UvTVxcbnRocmVlc2NvcmUvTVNcXG50aHJlZXNvbWUvU01cXG50aHJlbm9keS9TTVxcbnRocmVzaC9NRFJTWkdcXG50aHJlc2hlci9NXFxudGhyZXNob2xkL1NNXFxudGhyZXdcXG50aHJpY2VcXG50aHJpZnQvU01cXG50aHJpZnRpbHlcXG50aHJpZnRpbmVzcy9NXFxudGhyaWZ0bGVzc1xcbnRocmlmdHkvUFRSXFxudGhyaWxsL1NNRFJaR1xcbnRocmlsbGVyL01cXG50aHJpbGxpbmcvWVxcbnRocml2ZS9EU0dcXG50aHJvYXQvU01cXG50aHJvYXRpbHlcXG50aHJvYXRpbmVzcy9NXFxudGhyb2F0eS9SVFBcXG50aHJvYi9TTVxcbnRocm9iYmVkXFxudGhyb2JiaW5nXFxudGhyb2UvU01cXG50aHJvbWJpXFxudGhyb21ib2x5dGljXFxudGhyb21ib3Nlc1xcbnRocm9tYm9zaXMvTVxcbnRocm9tYm90aWNcXG50aHJvbWJ1cy9NXFxudGhyb25lJ3NcXG50aHJvbmUvU1xcbnRocm9uZy9HU01EXFxudGhyb3R0bGUvRFJTTVpHXFxudGhyb3R0bGVyL01cXG50aHJvdWdoXFxudGhyb3VnaG91dFxcbnRocm91Z2hwdXQvTVxcbnRocm93L1NNUlpHXFxudGhyb3dhd2F5L1NNXFxudGhyb3diYWNrL1NNXFxudGhyb3dlci9NXFxudGhyb3duXFxudGhydVxcbnRocnVtL1NNXFxudGhydW1tZWRcXG50aHJ1bW1pbmdcXG50aHJ1c2gvTVNcXG50aHJ1c3QvR1NNXFxudGhydXdheS9NU1xcbnRodWQvTVNcXG50aHVkZGVkXFxudGh1ZGRpbmdcXG50aHVnL01TXFxudGh1Z2dlcnkvTVxcbnRodWdnaXNoXFxudGh1bGl1bS9NXFxudGh1bWIvU01ER1xcbnRodW1ibmFpbC9TTVxcbnRodW1icHJpbnQvU01cXG50aHVtYnNjcmV3L1NNXFxudGh1bWJ0YWNrL1NNXFxudGh1bXAvU01ER1xcbnRodW1waW5nL01cXG50aHVuZGVyL1pHTURSU1xcbnRodW5kZXJib2x0L1NNXFxudGh1bmRlcmNsYXAvU01cXG50aHVuZGVyY2xvdWQvTVNcXG50aHVuZGVyZXIvTVxcbnRodW5kZXJoZWFkL1NNXFxudGh1bmRlcm91cy9ZXFxudGh1bmRlcnNob3dlci9TTVxcbnRodW5kZXJzdG9ybS9TTVxcbnRodW5kZXJzdHJ1Y2tcXG50aHVuZGVyeVxcbnRodW5rL1NcXG50aHVzXFxudGh3YWNrL1pHU01EUlxcbnRod2Fja2VyL01cXG50aHdhcnQvR1NNRFxcbnRoeVxcbnRoeW1lL01cXG50aHltaW5lL01cXG50aHltdXMvTVNcXG50aHlyb2lkL01TXFxudGh5cm9pZGFsXFxudGh5c2VsZlxcbnRpL01SWlxcbnRpYXJhL1NNXFxudGliaWEvTVxcbnRpYmlhZVxcbnRpYmlhbFxcbnRpYy9TTVxcbnRpY2svTURSWkdTXFxudGlja2VyL01cXG50aWNrZXQvR1NNRFxcbnRpY2tpbmcvTVxcbnRpY2tsZS9EUlNNWkdcXG50aWNrbGVyL01cXG50aWNrbGlzaC9ZUFxcbnRpY2tsaXNobmVzcy9NXFxudGlja3RhY2t0b2UvTVxcbnRpY2t0b2NrL01TXFxudGlkYWwvWVxcbnRpZGJpdC9TTVxcbnRpZGRsZXIvU1xcbnRpZGRseVxcbnRpZGRseXdpbmsvU1xcbnRpZGRseXdpbmtzL01cXG50aWRlL01HSkRTXFxudGlkZWxhbmQvU01cXG50aWRlbWFyay9TXFxudGlkZXdhdGVyL01TXFxudGlkZXdheS9NU1xcbnRpZGlseS9VXFxudGlkaW5lc3MvVU1cXG50aWRpbmdzL01cXG50aWR5L0RSU01UR1BcXG50aWUnc1xcbnRpZS9BVVNEXFxudGllYmFjay9NU1xcbnRpZWJyZWFrL1JTWlxcbnRpZWJyZWFrZXIvTVxcbnRpZXBpbi9TXFxudGllci9NRFxcbnRpZmYvTURHU1xcbnRpZ2VyL1NNXFxudGlnZXJpc2hcXG50aWdodC9TTlJZUFhUXFxudGlnaHRlbi9aR0RSXFxudGlnaHRlbmVyL01cXG50aWdodGZpc3RlZFxcbnRpZ2h0bmVzcy9NXFxudGlnaHRyb3BlL01TXFxudGlnaHRzL01cXG50aWdodHdhZC9NU1xcbnRpZ3Jlc3MvTVNcXG50aWxcXG50aWxhcGlhXFxudGlsZGUvU01cXG50aWxlL01aR0RSU1xcbnRpbGVyL01cXG50aWxpbmcvTVxcbnRpbGwnc1xcbnRpbGwvRURSWkdTXFxudGlsbGFibGVcXG50aWxsYWdlL01cXG50aWxsZXIvRU1cXG50aWx0L01ER1NcXG50aW1iZXIvU01ER1xcbnRpbWJlcmxhbmQvTVxcbnRpbWJlcmxpbmUvTVNcXG50aW1icmUvU01cXG50aW1icmVsL1NNXFxudGltZS9NWVpHSkRSU1xcbnRpbWVrZWVwZXIvTVNcXG50aW1la2VlcGluZy9NXFxudGltZWxlc3MvUFlcXG50aW1lbGVzc25lc3MvTVxcbnRpbWVsaW5lL01TXFxudGltZWxpbmVzcy9VTVxcbnRpbWVseS9VUFJUXFxudGltZW91dC9TTVxcbnRpbWVwaWVjZS9NU1xcbnRpbWVyL01cXG50aW1lc2NhbGUvU1xcbnRpbWVzZXJ2ZXIvU01cXG50aW1lc2VydmluZy9NXFxudGltZXNoYXJlL1NcXG50aW1lc3RhbXAvU01EXFxudGltZXRhYmxlL0RTTUdcXG50aW1ld29yblxcbnRpbWV6b25lXFxudGltaWQvUllUUFxcbnRpbWlkaXR5L01cXG50aW1pZG5lc3MvTVxcbnRpbWluZy9NXFxudGltb3JvdXMvUFlcXG50aW1vcm91c25lc3MvTVxcbnRpbW90aHkvTVxcbnRpbXBhbmkvTVxcbnRpbXBhbmlzdC9TTVxcbnRpbi9TTVxcbnRpbmN0dXJlL01HRFNcXG50aW5kZXIvTVxcbnRpbmRlcmJveC9NU1xcbnRpbmUvTVNcXG50aW5mb2lsL01cXG50aW5nL01EWUdcXG50aW5nZS9TTVxcbnRpbmdlaW5nXFxudGluZ2xlL0RTTUdKXFxudGluZ2xpbmcvTVxcbnRpbmluZXNzL01cXG50aW5rZXIvWkdTTURSXFxudGlua2VyZXIvTVxcbnRpbmtsZS9EU01HXFxudGlubmVkXFxudGlubmluZXNzL01cXG50aW5uaW5nXFxudGlubml0dXMvTVxcbnRpbm55L1BSVFxcbnRpbnBsYXRlL01cXG50aW5wb3RcXG50aW5zZWwvR1NNRFxcbnRpbnNtaXRoL01cXG50aW5zbWl0aHNcXG50aW50L01ER1NcXG50aW50aW5uYWJ1bGF0aW9uL01TXFxudGludHlwZS9NU1xcbnRpbndhcmUvTVxcbnRpbnkvUlRQXFxudGlwL1NNXFxudGlwcGVkXFxudGlwcGVyL1NNXFxudGlwcGV0L1NNXFxudGlwcGV4L0dEU1xcbnRpcHBpbmdcXG50aXBwbGUvRFJTTVpHXFxudGlwcGxlci9NXFxudGlwc2lseVxcbnRpcHNpbmVzcy9NXFxudGlwc3Rlci9NU1xcbnRpcHN5L1JQVFxcbnRpcHRvZS9EU01cXG50aXB0b2VpbmdcXG50aXB0b3AvU01cXG50aXJhZGUvU01cXG50aXJhbWlzdS9NU1xcbnRpcmUnc1xcbnRpcmUvQUdEU1xcbnRpcmVkL1BSWVRcXG50aXJlZG5lc3MvTVxcbnRpcmVsZXNzL1lQXFxudGlyZWxlc3NuZXNzL01cXG50aXJlc29tZS9QWVxcbnRpcmVzb21lbmVzcy9NXFxudGlzc3VlL1NNXFxudGl0L1NNXFxudGl0YW4vU01cXG50aXRhbmljXFxudGl0YW5pdW0vTVxcbnRpdGNoL1NcXG50aXRjaHlcXG50aXRoZS9EUlNNWkdcXG50aXRoZXIvTVxcbnRpdGlhbi9NXFxudGl0aWxsYXRlL0RTR05cXG50aXRpbGxhdGluZy9ZXFxudGl0aWxsYXRpb24vTVxcbnRpdGl2YXRlL0RTR05cXG50aXRpdmF0aW9uL01cXG50aXRsZS9EU01HXFxudGl0bGVkL1VcXG50aXRsZWhvbGRlci9NU1xcbnRpdGxpc3QvTVNcXG50aXRtaWNlXFxudGl0bW91c2UvTVxcbnRpdHRlci9TR01EXFxudGl0dGxlL1NNXFxudGl0dHkvU1xcbnRpdHVsYXJcXG50aXp6XFxudGl6enkvU01cXG50blxcbnRucGtcXG50by9JVVxcbnRvYWQvTVNcXG50b2Fkc3Rvb2wvTVNcXG50b2FkeS9EU01HXFxudG9hZHlpc20vTVxcbnRvYXN0L1NNRFJaR1xcbnRvYXN0ZXIvTVxcbnRvYXN0bWFzdGVyL1NNXFxudG9hc3RtaXN0cmVzcy9NU1xcbnRvYXN0eS9UUlNcXG50b2JhY2NvL01TXFxudG9iYWNjb25pc3QvU01cXG50b2JvZ2dhbi9aR1NNRFJcXG50b2JvZ2dhbmVyL01cXG50b2JvZ2dhbmluZy9NXFxudG9jY2F0YS9TXFxudG9jb3BoZXJvbFxcbnRvY3Npbi9TTVxcbnRvZGF5L01cXG50b2RkbGUvRFJTTVpHXFxudG9kZGxlci9NXFxudG9kZHkvU01cXG50b2UvRFNNXFxudG9lY2FwL1NNXFxudG9laG9sZC9NU1xcbnRvZWluZ1xcbnRvZW5haWwvTVNcXG50b2VyYWcvU1xcbnRvZmYvU1xcbnRvZmZlZS9TTVxcbnRvZnUvTVxcbnRvZy9TTVxcbnRvZ2EvTURTXFxudG9nZXRoZXIvUFxcbnRvZ2V0aGVybmVzcy9NXFxudG9nZ2VkXFxudG9nZ2luZ1xcbnRvZ2dsZS9EU01HXFxudG9ncy9NXFxudG9pbC9NRFJaR1NcXG50b2lsZXIvTVxcbnRvaWxldC9NREdTXFxudG9pbGV0cnkvU01cXG50b2lsZXR0ZS9NXFxudG9pbHNvbWVcXG50b2tlL01HRFNcXG50b2tlbi9TTVxcbnRva2VuaXNtL01cXG50b2xkL0FVXFxudG9sZS9NXFxudG9sZXJhYmxlL0lcXG50b2xlcmFibHkvSVxcbnRvbGVyYW5jZS9JTVxcbnRvbGVyYW5jZXNcXG50b2xlcmFudC9JWVxcbnRvbGVyYXRlL0dORFNcXG50b2xlcmF0aW9uL01cXG50b2xsL01ER1NcXG50b2xsYm9vdGgvTVxcbnRvbGxib290aHNcXG50b2xsZ2F0ZS9TTVxcbnRvbGx3YXkvU01cXG50b2x1ZW5lL01cXG50b20vU01cXG50b21haGF3ay9TR01EXFxudG9tYXRvL01cXG50b21hdG9lc1xcbnRvbWIvTURHU1xcbnRvbWJvbGEvU1xcbnRvbWJveS9NU1xcbnRvbWJveWlzaFxcbnRvbWJzdG9uZS9NU1xcbnRvbWNhdC9NU1xcbnRvbWUvTVNcXG50b21mb29sZXJ5L1NNXFxudG9tb2dyYXBoaWNcXG50b21vZ3JhcGh5L01cXG50b21vcnJvdy9NU1xcbnRvbXRpdC9NU1xcbnRvbi9TTVxcbnRvbmFsL1lcXG50b25hbGl0eS9TTVxcbnRvbmUnc1xcbnRvbmUvSVpHRFJTXFxudG9uZWFybS9TTVxcbnRvbmVsZXNzL1lcXG50b25lci9JTVxcbnRvbmcvTURHU1xcbnRvbmd1ZS9NR0RTXFxudG9uZ3VlbGVzc1xcbnRvbmljL1NNXFxudG9uaWdodC9NXFxudG9ubmFnZS9TTVxcbnRvbm5lL1NNXFxudG9uc2lsL01TXFxudG9uc2lsbGVjdG9teS9TTVxcbnRvbnNpbGxpdGlzL01cXG50b25zb3JpYWxcXG50b25zdXJlL0RTTUdcXG50b255L1JUXFxudG9vXFxudG9vay9BXFxudG9vbCdzXFxudG9vbC9BREdTXFxudG9vbGJhci9TTVxcbnRvb2xib3gvTVNcXG50b29sa2l0XFxudG9vbG1ha2VyL01TXFxudG9vdC9NRFJaR1NcXG50b290ZXIvTVxcbnRvb3RoL01EXFxudG9vdGhhY2hlL01TXFxudG9vdGhicnVzaC9NU1xcbnRvb3RoaWx5XFxudG9vdGhsZXNzXFxudG9vdGhwYXN0ZS9TTVxcbnRvb3RocGljay9TTVxcbnRvb3Roc29tZVxcbnRvb3RoeS9SVFxcbnRvb3RsZS9HRFNcXG50b290c2llL1NcXG50b3AvU01cXG50b3Bhei9NU1xcbnRvcGNvYXQvU01cXG50b3BkcmVzc2luZy9TTVxcbnRvcGVlL1NcXG50b3BmbGlnaHRcXG50b3BpXFxudG9waWFyeS9NXFxudG9waWMvU01cXG50b3BpY2FsL1lcXG50b3BpY2FsaXR5L01cXG50b3Brbm90L1NNXFxudG9wbGVzc1xcbnRvcG1hc3QvU01cXG50b3Btb3N0XFxudG9wbm90Y2hcXG50b3BvZ3JhcGhlci9TTVxcbnRvcG9ncmFwaGljXFxudG9wb2dyYXBoaWNhbC9ZXFxudG9wb2dyYXBoeS9TTVxcbnRvcG9sb2dpY2FsL1lcXG50b3BvbG9neVxcbnRvcHBlZFxcbnRvcHBlci9NU1xcbnRvcHBpbmcvU01cXG50b3BwbGUvR0RTXFxudG9wc2FpbC9TTVxcbnRvcHNpZGUvU01cXG50b3Bzb2lsL01cXG50b3BzcGluL01cXG50b3F1ZS9TTVxcbnRvci9TTVxcbnRvcmNoL0dNRFNcXG50b3JjaGJlYXJlci9NU1xcbnRvcmNobGlnaHQvTVxcbnRvcmVcXG50b3JlYWRvci9NU1xcbnRvcm1lbnQvU01ER1xcbnRvcm1lbnRpbmcvWVxcbnRvcm1lbnRvci9NU1xcbnRvcm5cXG50b3JuYWRvL01cXG50b3JuYWRvZXNcXG50b3JwZWRvL0dNRFxcbnRvcnBlZG9lc1xcbnRvcnBpZC9ZXFxudG9ycGlkaXR5L01cXG50b3Jwb3IvTVxcbnRvcnF1ZS9NR0RTXFxudG9ycmVudC9TTVxcbnRvcnJlbnRpYWxcXG50b3JyaWQvWVBcXG50b3JyaWRpdHkvTVxcbnRvcnJpZG5lc3MvTVxcbnRvcnNpb24vTVxcbnRvcnNpb25hbFxcbnRvcnNvL1NNXFxudG9ydCdzXFxudG9ydC9GRUFTXFxudG9ydGUvU01cXG50b3J0ZWxsaW5pL01cXG50b3J0aWxsYS9NU1xcbnRvcnRvaXNlL01TXFxudG9ydG9pc2VzaGVsbC9TTVxcbnRvcnRvbmkvTVxcbnRvcnR1b3VzL1BZXFxudG9ydHVvdXNuZXNzL01cXG50b3J0dXJlL0RSU01aR1xcbnRvcnR1cmVyL01cXG50b3J0dXJvdXNcXG50b3J1c1xcbnRvc2hcXG50b3NzL01EUlNaR1xcbnRvc3N1cC9NU1xcbnRvdC9TR01EXFxudG90YWwvR1NNRFlcXG50b3RhbGl0YXJpYW4vU01cXG50b3RhbGl0YXJpYW5pc20vTVxcbnRvdGFsaXR5L1NNXFxudG90YWxpemF0b3IvU01cXG50b3RlL01TXFxudG90ZW0vU01cXG50b3RlbWljXFxudG90dGVkXFxudG90dGVyL1pHTURSU1xcbnRvdHRlcmVyL01cXG50b3R0aW5nXFxudG91Y2FuL01TXFxudG91Y2gvQUdNRFNcXG50b3VjaGRvd24vU01cXG50b3VjaGUvQkpcXG50b3VjaGVkL1VcXG50b3VjaGlseVxcbnRvdWNoaW5lc3MvTVxcbnRvdWNoaW5nL1lcXG50b3VjaGxpbmUvU1xcbnRvdWNocGFwZXIvU1xcbnRvdWNoc2NyZWVuL01TXFxudG91Y2hzdG9uZS9NU1xcbnRvdWNoeS9SUFRcXG50b3VnaC9YVEdNRE5SWVBcXG50b3VnaGVuL1pHRFJcXG50b3VnaGVuZXIvTVxcbnRvdWdoaWUvU01cXG50b3VnaG5lc3MvTVxcbnRvdWdoc1xcbnRvdXBlZS9NU1xcbnRvdXIvQ0ZTR0RNXFxudG91cmlzbS9NXFxudG91cmlzdC9NU1xcbnRvdXJpc3RpY1xcbnRvdXJpc3R5XFxudG91cm1hbGluZS9NXFxudG91cm5hbWVudC9TTVxcbnRvdXJuZXkvTVNcXG50b3VybmlxdWV0L01TXFxudG91c2xlL0dEU1xcbnRvdXQvTURHU1xcbnRvdy9TWkdNRFJcXG50b3dhcmQvU1xcbnRvd2JvYXQvTVNcXG50b3dlbC9KR1NNRFxcbnRvd2VsZXR0ZS9TTVxcbnRvd2VsaW5nL01cXG50b3dlci9HTURcXG50b3doZWFkL01EU1xcbnRvd2hlZS9NU1xcbnRvd2xpbmUvTVNcXG50b3duL01TXFxudG93bmVlL1NcXG50b3duaG91c2UvTVNcXG50b3duaWUvTVNcXG50b3duc2ZvbGsvTVxcbnRvd25zaGlwL01TXFxudG93bnNtYW4vTVxcbnRvd25zbWVuXFxudG93bnNwZW9wbGUvTVxcbnRvd25zd29tYW4vTVxcbnRvd25zd29tZW5cXG50b3dwYXRoL01cXG50b3dwYXRoc1xcbnRvd3JvcGUvU01cXG50b3hlbWlhL01cXG50b3hpY1xcbnRveGljaXR5L1NNXFxudG94aWNvbG9naWNhbFxcbnRveGljb2xvZ2lzdC9TTVxcbnRveGljb2xvZ3kvTVxcbnRveGluL1NNXFxudG95L1NHTURcXG50b3lib3kvU1xcbnRyXFxudHJhYmVjdWxhXFxudHJhYmVjdWxhclxcbnRyYWJlY3VsZVxcbnRyYWNlL0pEUlNNWkdcXG50cmFjZWFiaWxpdHlcXG50cmFjZWFibGUvVVxcbnRyYWNlci9NXFxudHJhY2VyeS9TTVxcbnRyYWNoZWEvTVxcbnRyYWNoZWFlXFxudHJhY2hlYWxcXG50cmFjaGVvdG9teS9TTVxcbnRyYWNpbmcvTVxcbnRyYWNrL1pHU01EUlxcbnRyYWNrYmFsbC9TTVxcbnRyYWNrZXIvTVxcbnRyYWNrbGVzc1xcbnRyYWNrc3VpdC9TXFxudHJhY3Qnc1xcbnRyYWN0L0NFS0ZBU1xcbnRyYWN0YWJpbGl0eS9JTVxcbnRyYWN0YWJsZS9JXFxudHJhY3RhYmx5L0lcXG50cmFjdGlvbi9FRkFDS01cXG50cmFjdG9yL0ZDS01TXFxudHJhZFxcbnRyYWRlL0pEUlNNWkdcXG50cmFkZW1hcmsvU0dNRFxcbnRyYWRlci9NXFxudHJhZGVzbWFuL01cXG50cmFkZXNtZW5cXG50cmFkZXNwZW9wbGUvTVxcbnRyYWRlc3dvbWFuL01cXG50cmFkZXN3b21lblxcbnRyYWRpbmcvTVxcbnRyYWRpdGlvbi9NU1xcbnRyYWRpdGlvbmFsL1lcXG50cmFkaXRpb25hbGlzbS9NXFxudHJhZGl0aW9uYWxpc3QvU01cXG50cmFkdWNlL0RSU1pHXFxudHJhZHVjZXIvTVxcbnRyYWZmaWMvU01cXG50cmFmZmlja2VkXFxudHJhZmZpY2tlci9TTVxcbnRyYWZmaWNraW5nL01cXG50cmFnZWRpYW4vU01cXG50cmFnZWRpZW5uZS9NU1xcbnRyYWdlZHkvU01cXG50cmFnaWNcXG50cmFnaWNhbGx5XFxudHJhZ2ljb21lZHkvU01cXG50cmFnaWNvbWljXFxudHJhaWwvWkdTTURSXFxudHJhaWxibGF6ZXIvTVNcXG50cmFpbGJsYXppbmcvTVxcbnRyYWlsZXIvTVxcbnRyYWluL1pHU01EUkJcXG50cmFpbmVkL1VcXG50cmFpbmVlL1NNXFxudHJhaW5lci9NXFxudHJhaW5pbmcvTVxcbnRyYWlubG9hZC9NU1xcbnRyYWlubWFuL01cXG50cmFpbm1lblxcbnRyYWluc3BvdHRlci9TXFxudHJhaW5zcG90dGluZ1xcbnRyYWlwc2UvRFNNR1xcbnRyYWl0L1NNXFxudHJhaXRvci9TTVxcbnRyYWl0b3JvdXMvWVxcbnRyYWplY3RvcnkvU01cXG50cmFtL01TXFxudHJhbWNhci9TXFxudHJhbWxpbmVzXFxudHJhbW1lZFxcbnRyYW1tZWwvU0dNRFxcbnRyYW1tZWxlZC9VXFxudHJhbW1pbmdcXG50cmFtcC9aR1NNRFJcXG50cmFtcGVyL01cXG50cmFtcGxlL0RSU01aR1xcbnRyYW1wbGVyL01cXG50cmFtcG9saW5lL01HRFNcXG50cmFtd2F5L1NcXG50cmFuY2UvTVNcXG50cmFuY2hlL1NcXG50cmFucXVpbC9SWVRcXG50cmFucXVpbGl0eS9NXFxudHJhbnF1aWxpemUvWkdEUlNcXG50cmFucXVpbGl6ZXIvTVxcbnRyYW5zL0lcXG50cmFuc2FjdC9ER1NcXG50cmFuc2FjdGlvbi9TTVxcbnRyYW5zYWN0aW9uYWxcXG50cmFuc2FjdG9yL01TXFxudHJhbnNhdGxhbnRpY1xcbnRyYW5zY2VpdmVyL1NNXFxudHJhbnNjZW5kL0dTRFxcbnRyYW5zY2VuZGVuY2UvTVxcbnRyYW5zY2VuZGVudFxcbnRyYW5zY2VuZGVudGFsL1lcXG50cmFuc2NlbmRlbnRhbGlzbS9NXFxudHJhbnNjZW5kZW50YWxpc3QvU01cXG50cmFuc2NvbnRpbmVudGFsXFxudHJhbnNjcmliZS9aR0RSU1xcbnRyYW5zY3JpYmVyL01cXG50cmFuc2NyaXB0L01TXFxudHJhbnNjcmlwdGlvbi9TTVxcbnRyYW5zZHVjZXIvTVNcXG50cmFuc2R1Y3Rpb25cXG50cmFuc2VjdC9EU0dcXG50cmFuc2VwdC9NU1xcbnRyYW5zZmVyL01CU1xcbnRyYW5zZmVyYWwvTVNcXG50cmFuc2ZlcmVuY2UvTVxcbnRyYW5zZmVycmVkXFxudHJhbnNmZXJyaW5nXFxudHJhbnNmaWd1cmF0aW9uL01cXG50cmFuc2ZpZ3VyZS9HRFNcXG50cmFuc2Zpbml0ZVxcbnRyYW5zZml4L0RTR1xcbnRyYW5zZm9ybS9CU1pHTURSXFxudHJhbnNmb3JtYXRpb24vU01cXG50cmFuc2Zvcm1hdGlvbmFsXFxudHJhbnNmb3JtZXIvTVxcbnRyYW5zZnVzZS9EU1hHTlxcbnRyYW5zZnVzaW9uL01cXG50cmFuc2dlbmRlci9TXFxudHJhbnNnZW5pY1xcbnRyYW5zZ3Jlc3MvR0RTXFxudHJhbnNncmVzc2lvbi9TTVxcbnRyYW5zZ3Jlc3Nvci9TTVxcbnRyYW5zaWVuY2UvTVxcbnRyYW5zaWVuY3kvTVxcbnRyYW5zaWVudC9TTVlcXG50cmFuc2lzdG9yL1NNXFxudHJhbnNpc3Rvcml6ZS9EU0dcXG50cmFuc2l0L1NHTURcXG50cmFuc2l0aW9uL0dTTURcXG50cmFuc2l0aW9uYWwvWVxcbnRyYW5zaXRpdmUvSVNNWVxcbnRyYW5zaXRpdmVuZXNzL01cXG50cmFuc2l0aXZpdHkvTVxcbnRyYW5zaXRvcnlcXG50cmFuc2xcXG50cmFuc2xhdGFibGUvVVxcbnRyYW5zbGF0ZS9EU0dOQlhcXG50cmFuc2xhdGVkL1VcXG50cmFuc2xhdGlvbi9NXFxudHJhbnNsYXRvci9TTVxcbnRyYW5zbGl0ZXJhdGUvRFNHTlhcXG50cmFuc2xpdGVyYXRpb24vTVxcbnRyYW5zbG9jYXRpb25cXG50cmFuc2x1Y2VuY2UvTVxcbnRyYW5zbHVjZW5jeS9NXFxudHJhbnNsdWNlbnQvWVxcbnRyYW5zbWlncmF0ZS9HTkRTXFxudHJhbnNtaWdyYXRpb24vTVxcbnRyYW5zbWlzc2libGVcXG50cmFuc21pc3Npb24vTVNcXG50cmFuc21pdC9TXFxudHJhbnNtaXR0YWJsZVxcbnRyYW5zbWl0dGFsL01cXG50cmFuc21pdHRhbmNlL01cXG50cmFuc21pdHRlZFxcbnRyYW5zbWl0dGVyL1NNXFxudHJhbnNtaXR0aW5nXFxudHJhbnNtb2dyaWZpY2F0aW9uL01cXG50cmFuc21vZ3JpZnkvRFNOR1xcbnRyYW5zbXV0YXRpb24vU01cXG50cmFuc211dGUvQkRTR1xcbnRyYW5zbmF0aW9uYWwvTVNcXG50cmFuc29jZWFuaWNcXG50cmFuc29tL1NNXFxudHJhbnNwYWNpZmljXFxudHJhbnNwYXJlbmN5L1NNXFxudHJhbnNwYXJlbnQvWVxcbnRyYW5zcGhvYmlhL01cXG50cmFuc3Bob2JpY1xcbnRyYW5zcGlyYXRpb24vTVxcbnRyYW5zcGlyZS9EU0dcXG50cmFuc3BsYW50L01ER1NcXG50cmFuc3BsYW50YXRpb24vTVxcbnRyYW5zcG9sYXJcXG50cmFuc3BvbmRlci9TTVxcbnRyYW5zcG9ydC9CU1pHTURSXFxudHJhbnNwb3J0YXRpb24vTVxcbnRyYW5zcG9ydGVyL01cXG50cmFuc3Bvc2UvRFNHXFxudHJhbnNwb3NpdGlvbi9NU1xcbnRyYW5zc2V4dWFsL1NNXFxudHJhbnNzZXh1YWxpc20vTVxcbnRyYW5zc2hpcC9TTFxcbnRyYW5zc2hpcG1lbnQvTVxcbnRyYW5zc2hpcHBlZFxcbnRyYW5zc2hpcHBpbmdcXG50cmFuc3Vic3RhbnRpYXRpb24vTVxcbnRyYW5zdmVyc2FsXFxudHJhbnN2ZXJzZS9NWVNcXG50cmFuc3Zlc3Rpc20vTVxcbnRyYW5zdmVzdGl0ZS9NU1xcbnRyYXAvTVNcXG50cmFwZG9vci9NU1xcbnRyYXBlemUvU01cXG50cmFwZXppdW0vU01cXG50cmFwZXpvaWQvU01cXG50cmFwZXpvaWRhbFxcbnRyYXBwYWJsZVxcbnRyYXBwZWRcXG50cmFwcGVyL1NNXFxudHJhcHBpbmcvU1xcbnRyYXBwaW5ncy9NXFxudHJhcHNob290aW5nL01cXG50cmFzaC9HTURTXFxudHJhc2hjYW4vTVNcXG50cmFzaGluZXNzL01cXG50cmFzaHkvUlBUXFxudHJhdW1hL01TXFxudHJhdW1hdGljXFxudHJhdW1hdGljYWxseVxcbnRyYXVtYXRpemUvR0RTXFxudHJhdmFpbC9TR01EXFxudHJhdmVsL01EUlNaR0pcXG50cmF2ZWxlZC9VXFxudHJhdmVsZXIvTVxcbnRyYXZlbGluZy9NXFxudHJhdmVsb2d1ZS9NU1xcbnRyYXZlcnNhbC9TTVxcbnRyYXZlcnNlL0RTTUdcXG50cmF2ZXN0eS9HRFNNXFxudHJhd2wvWkdTTURSXFxudHJhd2xlci9NXFxudHJheS9NU1xcbnRyZWFjaGVyb3VzL1BZXFxudHJlYWNoZXJvdXNuZXNzL01cXG50cmVhY2hlcnkvU01cXG50cmVhY2xlL01cXG50cmVhY2x5XFxudHJlYWQvQUdTTVxcbnRyZWFkbGUvRFNNR1xcbnRyZWFkbWlsbC9NU1xcbnRyZWFzXFxudHJlYXNvbi9CTVxcbnRyZWFzb25vdXNcXG50cmVhc3VyZS9EUlNNWkdcXG50cmVhc3VyZXIvTVxcbnRyZWFzdXJ5L1NNXFxudHJlYXQvQUdTTURcXG50cmVhdGFibGVcXG50cmVhdGVkL1VcXG50cmVhdGlzZS9TTVxcbnRyZWF0bWVudC9NU1xcbnRyZWF0eS9TTVxcbnRyZWJsZS9NR0RTXFxudHJlZS9NRFNcXG50cmVlaW5nXFxudHJlZWxlc3NcXG50cmVlbGlrZVxcbnRyZWVsaW5lXFxudHJlZXRvcC9TTVxcbnRyZWZvaWwvU01cXG50cmVrL01TXFxudHJla2tlZFxcbnRyZWtrZXIvU01cXG50cmVra2luZ1xcbnRyZWxsaXMvR01EU1xcbnRyZW1hdG9kZS9NU1xcbnRyZW1ibGUvRFNNR1xcbnRyZW1lbmRvdXMvWVxcbnRyZW1vbG8vU01cXG50cmVtb3IvTVNcXG50cmVtdWxvdXMvUFlcXG50cmVtdWxvdXNuZXNzL01cXG50cmVuY2gnc1xcbnRyZW5jaC9BRFNHXFxudHJlbmNoYW5jeS9NXFxudHJlbmNoYW50L1lcXG50cmVuY2hlci9NU1xcbnRyZW5jaGVybWFuL01cXG50cmVuY2hlcm1lblxcbnRyZW5kL0dTTURcXG50cmVuZGlseVxcbnRyZW5kaW5lc3MvTVxcbnRyZW5kc2V0dGVyL1NcXG50cmVuZHNldHRpbmdcXG50cmVuZHkvUlNNUFRcXG50cmVwaWRhdGlvbi9NXFxudHJlc3Bhc3MvTURSU1pHXFxudHJlc3Bhc3Nlci9NXFxudHJlc3MvRU1TXFxudHJlc3RsZS9NU1xcbnRyZXdzXFxudHJleS9NU1xcbnRyaWFkL1NNXFxudHJpYWdlL01EXFxudHJpYWwvQVNNXFxudHJpYWxlZFxcbnRyaWFsaW5nXFxudHJpYW5nbGUvU01cXG50cmlhbmd1bGFyL1lcXG50cmlhbmd1bGF0ZS9HTkRTXFxudHJpYW5ndWxhdGlvbi9NXFxudHJpYXRobGV0ZS9TXFxudHJpYXRobG9uL1NNXFxudHJpYmFsXFxudHJpYmFsaXNtL01cXG50cmliZS9TTVxcbnRyaWJlc21hbi9NXFxudHJpYmVzbWVuXFxudHJpYmVzd29tYW4vTVxcbnRyaWJlc3dvbWVuXFxudHJpYnVsYXRpb24vU01cXG50cmlidW5hbC9TTVxcbnRyaWJ1bmUvTVNcXG50cmlidXRhcnkvU01cXG50cmlidXRlJ3NcXG50cmlidXRlL0ZTXFxudHJpY2UvTVxcbnRyaWNlbnRlbm5pYWwvTVNcXG50cmljZXBzL01TXFxudHJpY2VyYXRvcHMvTVxcbnRyaWNoaW5hL01cXG50cmljaGluYWVcXG50cmljaGlub3Npcy9NXFxudHJpY2svR1NNRFxcbnRyaWNrZXJ5L01cXG50cmlja2lseVxcbnRyaWNraW5lc3MvTVxcbnRyaWNrbGUvTUdEU1xcbnRyaWNrc3Rlci9TTVxcbnRyaWNreS9UUlBcXG50cmljb2xvci9TTVxcbnRyaWN5Y2xlL1NNXFxudHJpZGVudC9NU1xcbnRyaWVkL1VcXG50cmllbm5pYWwvTVlTXFxudHJpZXIvU01cXG50cmlmZWN0YS9TTVxcbnRyaWZsZS9NWkdEUlNcXG50cmlmbGVyL01cXG50cmlmb2NhbHMvTVxcbnRyaWcvTVxcbnRyaWdnZXIvTURTR1xcbnRyaWdseWNlcmlkZS9NU1xcbnRyaWdvbm9tZXRyaWNcXG50cmlnb25vbWV0cmljYWxcXG50cmlnb25vbWV0cnkvTVxcbnRyaWtlL1NNXFxudHJpbGF0ZXJhbC9TXFxudHJpbGJ5L1NNXFxudHJpbGwvR1NNRFxcbnRyaWxsaW9uL1NNSFxcbnRyaWxsaW9udGgvTVxcbnRyaWxsaW9udGhzXFxudHJpbGxpdW0vTVxcbnRyaWxvYml0ZS9TTVxcbnRyaWxvZ3kvU01cXG50cmltL1BNWVNcXG50cmltYXJhbi9NU1xcbnRyaW1lc3Rlci9TTVxcbnRyaW1tZWQvVVxcbnRyaW1tZXIvU01cXG50cmltbWVzdFxcbnRyaW1taW5nL1NNXFxudHJpbW1pbmdzL01cXG50cmltbmVzcy9NXFxudHJpbW9udGhseVxcbnRyaW5pdHJvdG9sdWVuZS9NXFxudHJpbml0eS9TTVxcbnRyaW5rZXQvU01cXG50cmlvL01TXFxudHJpcC9NWVNcXG50cmlwYXJ0aXRlXFxudHJpcGUvTVxcbnRyaXBsZS9NR0RTXFxudHJpcGxldC9TTVxcbnRyaXBsZXgvTVNcXG50cmlwbGljYXRlL01HRFNcXG50cmlwb2QvTVNcXG50cmlwb2RhbFxcbnRyaXBvc1xcbnRyaXBwZWRcXG50cmlwcGVyL1NNXFxudHJpcHBpbmdcXG50cmlwdHljaC9NXFxudHJpcHR5Y2hzXFxudHJpcHdpcmUvU1xcbnRyaXJlbWUvU01cXG50cmlzZWN0L1NER1xcbnRyaXNlY3Rpb24vTVxcbnRyaXRlL0ZQWVRcXG50cml0ZW5lc3MvRk1cXG50cml0ZXJcXG50cml0aXVtL01cXG50cml1bXBoL0dNRFxcbnRyaXVtcGhhbFxcbnRyaXVtcGhhbGlzbVxcbnRyaXVtcGhhbGlzdFxcbnRyaXVtcGhhbnQvWVxcbnRyaXVtcGhzXFxudHJpdW12aXIvTVNcXG50cml1bXZpcmF0ZS9TTVxcbnRyaXZhbGVudFxcbnRyaXZldC9NU1xcbnRyaXZpYS9NXFxudHJpdmlhbC9ZXFxudHJpdmlhbGl0eS9TTVxcbnRyaXZpYWxpemF0aW9uL01cXG50cml2aWFsaXplL0dEU1xcbnRyaXZpdW0vTVxcbnRyb2NoYWljXFxudHJvY2hlZS9TTVxcbnRyb2QvQVVcXG50cm9kZGVuL0FcXG50cm9nbG9keXRlL1NNXFxudHJvaWthL01TXFxudHJvbGwvU0dNRFxcbnRyb2xsZXkvU01cXG50cm9sbGV5YnVzL01TXFxudHJvbGxvcC9TTVxcbnRyb21ib25lL01TXFxudHJvbWJvbmlzdC9NU1xcbnRyb21wL1NHRFxcbnRyb24vU1xcbnRyb29wL1NaR01EUlxcbnRyb29wZXIvTVxcbnRyb29wc2hpcC9NU1xcbnRyb3BlL1NNXFxudHJvcGh5L1NNXFxudHJvcGljL01TXFxudHJvcGljYWwvWVxcbnRyb3BpY3MvTVxcbnRyb3Bpc20vU01cXG50cm9wb3NwaGVyZS9TTVxcbnRyb3QvTVNcXG50cm90aC9NXFxudHJvdHRlZFxcbnRyb3R0ZXIvU01cXG50cm90dGluZ1xcbnRyb3ViYWRvdXIvTVNcXG50cm91YmxlL0RTTUdcXG50cm91YmxlZC9VXFxudHJvdWJsZW1ha2VyL01TXFxudHJvdWJsZXNob290L0RSWkdTXFxudHJvdWJsZXNob290ZXIvTVxcbnRyb3VibGVzaG9vdGluZy9NXFxudHJvdWJsZXNob3RcXG50cm91Ymxlc29tZS9ZXFxudHJvdWdoL01cXG50cm91Z2hzXFxudHJvdW5jZS9EUlNaR1xcbnRyb3VuY2VyL01cXG50cm91cGUvTVpHRFJTXFxudHJvdXBlci9NXFxudHJvdXNlci9TTVxcbnRyb3VzZXJzL01cXG50cm91c3NlYXUvTVxcbnRyb3Vzc2VhdXhcXG50cm91dC9TTVxcbnRyb3ZlL1NNXFxudHJvdy9EU0dcXG50cm93ZWwvTURTR1xcbnRyb3kvU1xcbnRydWFuY3kvTVxcbnRydWFudC9HTURTXFxudHJ1Y2UvU01cXG50cnVjay9TWkdNRFJcXG50cnVja2VyL01cXG50cnVja2luZy9NXFxudHJ1Y2tsZS9NR0RTXFxudHJ1Y2tsb2FkL1NNXFxudHJ1Y3VsZW5jZS9NXFxudHJ1Y3VsZW50L1lcXG50cnVkZ2UvTUdEU1xcbnRydWUvTVRHRFJTXFxudHJ1ZWxvdmUvU01cXG50cnVmZmxlL01TXFxudHJ1Zy9TXFxudHJ1aXNtL01TXFxudHJ1bHkvVVxcbnRydW1wL1NHTURcXG50cnVtcGVyeS9NXFxudHJ1bXBldC9aR01EUlNcXG50cnVtcGV0ZXIvTVxcbnRydW5jYXRlL0dORFNcXG50cnVuY2F0aW9uL01cXG50cnVuY2hlb24vU01cXG50cnVuZGxlL01aR0RSU1xcbnRydW5kbGVyL01cXG50cnVuay9TR01cXG50cnVzcy9HTURTXFxudHJ1c3QvRVNHTURcXG50cnVzdGVlL01TXFxudHJ1c3RlZXNoaXAvU01cXG50cnVzdGZ1bC9FWVxcbnRydXN0ZnVsbmVzcy9NXFxudHJ1c3RpbmcvWVxcbnRydXN0d29ydGhpbmVzcy9NXFxudHJ1c3R3b3J0aHkvVFBSXFxudHJ1c3R5L1RSU01cXG50cnV0aC9aTVJcXG50cnV0aGVyL01cXG50cnV0aGZ1bC9VWVBcXG50cnV0aGZ1bG5lc3MvVU1cXG50cnV0aGluZXNzXFxudHJ1dGhzL1VcXG50cnknc1xcbnRyeS9BR0RTXFxudHJ5aW5nL1lcXG50cnlvdXQvU01cXG50cnlwdG9waGFuXFxudHJ5c3QvU01ER1xcbnRzYXJpc3RzXFxudHNldHNlL01TXFxudHNwXFxudHN1bmFtaS9TTVxcbnR0eXNcXG50dWIvU1pHTURSXFxudHViYS9NU1xcbnR1YmFsXFxudHViYnkvVFJcXG50dWJlL01TXFxudHViZWxlc3MvTVxcbnR1YmVyL01cXG50dWJlcmNsZS9TTVxcbnR1YmVyY3VsYXJcXG50dWJlcmN1bGluL01cXG50dWJlcmN1bG9zaXMvTVxcbnR1YmVyY3Vsb3VzXFxudHViZXJvc2UvTVxcbnR1YmVyb3VzXFxudHViZnVsL01TXFxudHViaW5nL01cXG50dWJ1bGFyXFxudHVidWxlL01TXFxudHVjay9NRFJTWkdcXG50dWNrZXIvTURHXFxudHVmdC9NRFJTWkdcXG50dWZ0ZXIvTVxcbnR1Zy9TTVxcbnR1Z2JvYXQvTVNcXG50dWdnZWRcXG50dWdnaW5nXFxudHVpdGlvbi9JTVxcbnR1bGFyZW1pYS9NXFxudHVsaXAvU01cXG50dWxsZS9NXFxudHVtL1NcXG50dW1ibGUvRFJTTVpHXFxudHVtYmxlZG93blxcbnR1bWJsZXIvTVxcbnR1bWJsZXdlZWQvU01cXG50dW1ibGluZy9NXFxudHVtYnJlbC9TTVxcbnR1bWVzY2VuY2UvTVxcbnR1bWVzY2VudFxcbnR1bWlkXFxudHVtaWRpdHkvTVxcbnR1bW15L1NNXFxudHVtb3IvU01cXG50dW1vcm91c1xcbnR1bXVsdC9TTVxcbnR1bXVsdHVvdXMvWVxcbnR1bi9TWkdNRFJcXG50dW5hL01TXFxudHVuZHJhL1NNXFxudHVuZS9NU1xcbnR1bmVmdWwvWVBcXG50dW5lZnVsbmVzcy9NXFxudHVuZWxlc3MvWVxcbnR1bmVyL01cXG50dW5ldXAvU01cXG50dW5nc3Rlbi9NXFxudHVuaWMvU01cXG50dW5uZWwvSlNNRFJaR1xcbnR1bm5lbGVyL01cXG50dW5ueS9TTVxcbnR1cGxlL1NcXG50dXBwZW5jZVxcbnR1cHBlbm55XFxudHVxdWUvU01cXG50dXJiYW4vU01EXFxudHVyYmlkXFxudHVyYmlkaXR5L01cXG50dXJiaW5lL1NNXFxudHVyYm8vU01cXG50dXJib2NoYXJnZS9aR0RSU1xcbnR1cmJvY2hhcmdlci9NXFxudHVyYm9mYW4vU01cXG50dXJib2pldC9TTVxcbnR1cmJvcHJvcC9TTVxcbnR1cmJvdC9TTVxcbnR1cmJ1bGVuY2UvTVxcbnR1cmJ1bGVudC9ZXFxudHVyZC9NU1xcbnR1cmR1Y2tlbi9TTVxcbnR1cmVlbi9TTVxcbnR1cmYvTURTR1xcbnR1cmZ5XFxudHVyZ2lkL1lcXG50dXJnaWRpdHkvTVxcbnR1cmtleS9TTVxcbnR1cm1lcmljL1NNXFxudHVybW9pbC9NU1xcbnR1cm4vQU1EUlNaR1xcbnR1cm5hYm91dC9TTVxcbnR1cm5hcm91bmQvU01cXG50dXJuYnVja2xlL1NNXFxudHVybmNvYXQvU01cXG50dXJuZXIvQU1cXG50dXJuaW5nL01TXFxudHVybmlwL1NNXFxudHVybmtleS9NU1xcbnR1cm5vZmYvTVNcXG50dXJub3V0L01TXFxudHVybm92ZXIvTVNcXG50dXJucGlrZS9NU1xcbnR1cm5zdGlsZS9TTVxcbnR1cm50YWJsZS9TTVxcbnR1cnBlbnRpbmUvTVxcbnR1cnBpdHVkZS9NXFxudHVycHNcXG50dXJxdW9pc2UvU01cXG50dXJyZXQvU01EXFxudHVydGxlL1NNXFxudHVydGxlZG92ZS9TTVxcbnR1cnRsZW5lY2svU01EXFxudHVzaC9NU1xcbnR1c2svTURTXFxudHVzc2xlL0RTTUdcXG50dXNzb2NrL01TXFxudHVzc29ja3lcXG50dXQvU01cXG50dXRlbGFnZS9NXFxudHV0ZWxhcnlcXG50dXRvci9TTURHXFxudHV0b3JlZC9VXFxudHV0b3JpYWwvU01cXG50dXRvcnNoaXAvTVxcbnR1dHRlZFxcbnR1dHRpL1NNXFxudHV0dGluZ1xcbnR1dHUvTVNcXG50dXgvTVNcXG50dXhlZG8vU01cXG50d2FkZGxlL01aR0RSU1xcbnR3YWRkbGVyL01cXG50d2Fpbi9NXFxudHdhbmcvU01ER1xcbnR3YW5neS9SVFxcbnR3YXNcXG50d2F0L1NcXG50d2Vhay9TTURHXFxudHdlZVxcbnR3ZWVkL1NNXFxudHdlZWRzL01cXG50d2VlZHkvUlRcXG50d2VlblxcbnR3ZWV0J3NcXG50d2VldC9BU0RHXFxudHdlZXRlci9TTVxcbnR3ZWV6ZXJzL01cXG50d2VsZnRoL01cXG50d2VsZnRoc1xcbnR3ZWx2ZS9TTVxcbnR3ZWx2ZW1vbnRoL01cXG50d2VsdmVtb250aHNcXG50d2VudGlldGgvTVxcbnR3ZW50aWV0aHNcXG50d2VudHkvU01IXFxudHdlcmsvU0RHXFxudHdlcnAvU01cXG50d2ljZVxcbnR3aWRkbGUvTUdEU1xcbnR3aWRkbHlcXG50d2lnL01TXFxudHdpZ2dlZFxcbnR3aWdnaW5nXFxudHdpZ2d5L1RSXFxudHdpbGlnaHQvTVxcbnR3aWxpdFxcbnR3aWxsL01EXFxudHdpbi9NRFJTWkdcXG50d2luZS9TTVxcbnR3aW5lci9NXFxudHdpbmdlL0RTTUdcXG50d2luay9TWVxcbnR3aW5rbGUvTUdKRFNcXG50d2lua2xpbmcvTVxcbnR3aW5uZWRcXG50d2lubmluZ1xcbnR3aW5zZXQvU1xcbnR3aXJsL1NNRFJaR1xcbnR3aXJsZXIvTVxcbnR3aXJseVxcbnR3aXN0J3NcXG50d2lzdC9VU0RHXFxudHdpc3Rlci9NU1xcbnR3aXN0eS9UUlxcbnR3aXQvTVNcXG50d2l0Y2gvR01EU1xcbnR3aXRjaHkvUlRcXG50d2l0dGVkXFxudHdpdHRlci9NRFNHXFxudHdpdHRlcnlcXG50d2l0dGluZ1xcbnR3aXh0XFxudHdvL1NNXFxudHdvZmVyL1NNXFxudHdvZm9sZFxcbnR3b3BlbmNlL1NNXFxudHdvcGVubnlcXG50d29zb21lL1NNXFxudHdwXFxudHljb29uL1NNXFxudHlpbmcvQVVcXG50eWtlL01TXFxudHltcGFuaS9NXFxudHltcGFuaWNcXG50eW1wYW5pc3QvTVNcXG50eW1wYW51bS9TTVxcbnR5cGUnc1xcbnR5cGUvQUdEU1xcbnR5cGVjYXN0L0dTXFxudHlwZWZhY2UvTVNcXG50eXBlc2NyaXB0L01TXFxudHlwZXNldC9TXFxudHlwZXNldHRlci9NU1xcbnR5cGVzZXR0aW5nL01cXG50eXBld3JpdGUvUlNaR1xcbnR5cGV3cml0ZXIvTVxcbnR5cGV3cml0aW5nL01cXG50eXBld3JpdHRlblxcbnR5cGV3cm90ZVxcbnR5cGhvaWQvTVxcbnR5cGhvb24vTVNcXG50eXBodXMvTVxcbnR5cGljYWwvVVlcXG50eXBpY2FsaXR5L01cXG50eXBpZmljYXRpb24vTVxcbnR5cGlmeS9OR0RTXFxudHlwaW5nL01cXG50eXBpc3QvU01cXG50eXBvL01TXFxudHlwb2dyYXBoZXIvU01cXG50eXBvZ3JhcGhpY1xcbnR5cG9ncmFwaGljYWwvWVxcbnR5cG9ncmFwaHkvTVxcbnR5cG9sb2d5L1NNXFxudHlyYW5uaWNcXG50eXJhbm5pY2FsL1lcXG50eXJhbm5pY2lkYWxcXG50eXJhbm5pY2lkZS9TXFxudHlyYW5uaXplL0dEU1xcbnR5cmFubm9zYXVyL01TXFxudHlyYW5ub3NhdXJ1cy9NU1xcbnR5cmFubm91c1xcbnR5cmFubnkvU01cXG50eXJhbnQvU01cXG50eXJvL01TXFxudHphdHppa2lcXG51L1NcXG51YmlxdWl0b3VzL1lcXG51YmlxdWl0eS9NXFxudWRkZXIvU01cXG51Zm9sb2dpc3QvU01cXG51Zm9sb2d5L01cXG51Z2hcXG51Z2xpbmVzcy9NXFxudWdseS9SVFBcXG51aFxcbnVoZlxcbnVrYXNlL1NNXFxudWt1bGVsZS9TTVxcbnVsY2VyL1NNXFxudWxjZXJhdGUvWERTR05cXG51bGNlcmF0aW9uL01cXG51bGNlcm91c1xcbnVsbmEvTVxcbnVsbmFlXFxudWxuYXJcXG51bHN0ZXIvTVNcXG51bHRcXG51bHRlcmlvclxcbnVsdGltYXRlL01ZXFxudWx0aW1hdHVtL01TXFxudWx0aW1vXFxudWx0cmEvU01cXG51bHRyYWNvbnNlcnZhdGl2ZS9TTVxcbnVsdHJhaGlnaFxcbnVsdHJhbGlnaHQvU01cXG51bHRyYW1hcmluZS9NXFxudWx0cmFtb2Rlcm5cXG51bHRyYXNlbnNpdGl2ZVxcbnVsdHJhc2hvcnRcXG51bHRyYXNvbmljXFxudWx0cmFzb25pY2FsbHlcXG51bHRyYXNvdW5kL01TXFxudWx0cmF2aW9sZXQvTVxcbnVsdWxhdGUvRFNHTlhcXG51bHVsYXRpb24vTVxcbnVtXFxudW1iZWwvU01cXG51bWJlci9NXFxudW1iaWxpY2FsXFxudW1iaWxpY2lcXG51bWJpbGljdXMvTVxcbnVtYnJhL1NNXFxudW1icmFnZS9NXFxudW1icmVsbGEvU01cXG51bWlhay9TTVxcbnVtbGF1dC9NU1xcbnVtcC9TR01EXFxudW1waXJlL01HRFNcXG51bXB0ZWVuL0hcXG51bmFicmlkZ2VkL01TXFxudW5hY2NlcHRhYmlsaXR5XFxudW5hY2NlcHRhYmxlXFxudW5hY2NvbW1vZGF0aW5nXFxudW5hY2NvdW50YWJseVxcbnVuYWR2ZW50dXJvdXNcXG51bmFlc3RoZXRpY1xcbnVuYWx0ZXJhYmx5XFxudW5hbWJpdGlvdXNcXG51bmFuaW1pdHkvTVxcbnVuYW5pbW91cy9ZXFxudW5hcHBhcmVudFxcbnVuYXBwZXRpemluZ1xcbnVuYXBwcmVjaWF0aXZlXFxudW5hcnlcXG51bmFzc2VydGl2ZVxcbnVuYXNzaW1pbGFibGVcXG51bmFzc3VtaW5nL1lcXG51bmF2YWlsaW5nL1lcXG51bmF3YXJlL1NcXG51bmJla25vd25zdFxcbnVuYmVuZC9TR1xcbnVuYmVudFxcbnVuYmlkXFxudW5ibGlua2luZy9ZXFxudW5ibHVzaGluZy9ZXFxudW5ib3NvbS9ER1xcbnVuYm91bmQvRFxcbnVuYm94L0dEU1xcbnVuYnJlYWthYmxlXFxudW5icm9rZW5cXG51bmNhbm55L1RcXG51bmNhcC9TXFxudW5jYXJpbmdcXG51bmNhdGFsb2d1ZWRcXG51bmNlYXNpbmcvWVxcbnVuY2hhbmdlYWJsZVxcbnVuY2hhcmFjdGVyaXN0aWNcXG51bmNoYXJpdGFibGVcXG51bmNoYXN0ZS9SVFxcbnVuY2lhbC9NXFxudW5jbGUvU01cXG51bmNsZWFuL0RSUFRcXG51bmNsZWFubHkvVFxcbnVuY2xlYXIvRFJUXFxudW5jb21mb3J0YWJsZVxcbnVuY29tbW9uL1RcXG51bmNvbXBlbGxpbmdcXG51bmNvbXBsYWluaW5nL1lcXG51bmNvbXBsaWNhdGVkXFxudW5jb21wcmVoZW5kaW5nL1lcXG51bmNvbXByb21pc2luZy9ZXFxudW5jb25kaXRpb25hbC9ZXFxudW5jb25nZW5pYWxcXG51bmNvbnNjaW9uYWJsZVxcbnVuY29uc2Npb25hYmx5XFxudW5jb25zY2lvdXMvTVxcbnVuY29uc3RpdHV0aW9uYWwvWVxcbnVuY29udHJvbGxhYmx5XFxudW5jb250cm92ZXJzaWFsXFxudW5jb29sXFxudW5jb29wZXJhdGl2ZVxcbnVuY291dGgvWVxcbnVuY3J1c2hhYmxlXFxudW5jdGlvbi9TTVxcbnVuY3R1b3VzL1lQXFxudW5jdHVvdXNuZXNzL01cXG51bmN1dFxcbnVuZGF1bnRlZC9ZXFxudW5kZWNpZGVkL1NNXFxudW5kZW1vbnN0cmF0aXZlL1lcXG51bmRlbmlhYmx5XFxudW5kZXJcXG51bmRlcmFjaGlldmUvTFpHRFJTXFxudW5kZXJhY2hpZXZlci9NXFxudW5kZXJhY3QvU0RHXFxudW5kZXJhZ2VcXG51bmRlcmFwcHJlY2lhdGVkXFxudW5kZXJhcm0vU01cXG51bmRlcmJlbGx5L1NNXFxudW5kZXJiaWQvU1xcbnVuZGVyYmlkZGluZ1xcbnVuZGVyYnJ1c2gvTVxcbnVuZGVyY2FycmlhZ2UvTVNcXG51bmRlcmNoYXJnZS9NR0RTXFxudW5kZXJjbGFzcy9NU1xcbnVuZGVyY2xhc3NtYW4vTVxcbnVuZGVyY2xhc3NtZW5cXG51bmRlcmNsb3RoZXMvTVxcbnVuZGVyY2xvdGhpbmcvTVxcbnVuZGVyY29hdC9HSlNNRFxcbnVuZGVyY29hdGluZy9NXFxudW5kZXJjb3ZlclxcbnVuZGVyY3VycmVudC9TTVxcbnVuZGVyY3V0L1NNXFxudW5kZXJjdXR0aW5nXFxudW5kZXJkZXZlbG9wZWRcXG51bmRlcmRldmVsb3BtZW50L01cXG51bmRlcmRvZy9TTVxcbnVuZGVyZG9uZVxcbnVuZGVyZW1wbG95ZWRcXG51bmRlcmVtcGxveW1lbnQvTVxcbnVuZGVyZXN0aW1hdGUvRFNNR05YXFxudW5kZXJlc3RpbWF0aW9uL01cXG51bmRlcmV4cG9zZS9HRFNcXG51bmRlcmV4cG9zdXJlL01TXFxudW5kZXJmZWRcXG51bmRlcmZlZWQvR1NcXG51bmRlcmZsb29yXFxudW5kZXJmbG93XFxudW5kZXJmb290XFxudW5kZXJmdW5kZWRcXG51bmRlcmZ1ci9NXFxudW5kZXJnYXJtZW50L1NNXFxudW5kZXJnby9HXFxudW5kZXJnb2VzXFxudW5kZXJnb25lXFxudW5kZXJncmFkL1NcXG51bmRlcmdyYWR1YXRlL1NNXFxudW5kZXJncm91bmQvTVNcXG51bmRlcmdyb3d0aC9NXFxudW5kZXJoYW5kXFxudW5kZXJoYW5kZWQvUFlcXG51bmRlcmhhbmRlZG5lc3MvTVxcbnVuZGVyaW5mbGF0ZWRcXG51bmRlcmxhaW5cXG51bmRlcmxheS9TTVxcbnVuZGVybGllL1NcXG51bmRlcmxpbmUvTUdEU1xcbnVuZGVybGluZy9NU1xcbnVuZGVybGlwL1NNXFxudW5kZXJseWluZ1xcbnVuZGVybWFubmVkXFxudW5kZXJtZW50aW9uZWRcXG51bmRlcm1pbmUvR0RTXFxudW5kZXJtb3N0XFxudW5kZXJuZWF0aC9NXFxudW5kZXJuZWF0aHNcXG51bmRlcm5vdXJpc2hlZFxcbnVuZGVybm91cmlzaG1lbnQvTVxcbnVuZGVycGFpZFxcbnVuZGVycGFudHMvTVxcbnVuZGVycGFydC9NU1xcbnVuZGVycGFzcy9NU1xcbnVuZGVycGF5L0dTTFxcbnVuZGVycGF5bWVudC9TTVxcbnVuZGVycGluL1NcXG51bmRlcnBpbm5lZFxcbnVuZGVycGlubmluZy9NU1xcbnVuZGVycGxheS9ER1NcXG51bmRlcnBvcHVsYXRlZFxcbnVuZGVycHJpdmlsZWdlZFxcbnVuZGVycHJvZHVjdGlvbi9NXFxudW5kZXJyYXRlL0dEU1xcbnVuZGVycmVwcmVzZW50ZWRcXG51bmRlcnNjb3JlL0RTTUdcXG51bmRlcnNlYS9TXFxudW5kZXJzZWNyZXRhcnkvU01cXG51bmRlcnNlbGwvR1NcXG51bmRlcnNleGVkXFxudW5kZXJzaGlydC9TTVxcbnVuZGVyc2hvb3QvU0dcXG51bmRlcnNob3J0cy9NXFxudW5kZXJzaG90XFxudW5kZXJzaWRlL01TXFxudW5kZXJzaWduL0RHU1xcbnVuZGVyc2lnbmVkL01cXG51bmRlcnNpemVkXFxudW5kZXJza2lydC9TTVxcbnVuZGVyc29sZFxcbnVuZGVyc3RhZmZlZFxcbnVuZGVyc3RhbmQvU0dCSlxcbnVuZGVyc3RhbmRhYmx5XFxudW5kZXJzdGFuZGluZy9NWVxcbnVuZGVyc3RhdGUvRFNMR1xcbnVuZGVyc3RhdGVtZW50L1NNXFxudW5kZXJzdG9vZFxcbnVuZGVyc3R1ZHkvR0RTTVxcbnVuZGVydGFrZS9aR0pSU1xcbnVuZGVydGFrZW5cXG51bmRlcnRha2VyL01cXG51bmRlcnRha2luZy9NXFxudW5kZXJ0aGluZ3MvTVxcbnVuZGVydG9uZS9NU1xcbnVuZGVydG9va1xcbnVuZGVydG93L1NNXFxudW5kZXJ1c2VkXFxudW5kZXJ1dGlsaXplZFxcbnVuZGVydmFsdWF0aW9uL01cXG51bmRlcnZhbHVlL0RTR1xcbnVuZGVyd2F0ZXJcXG51bmRlcndheVxcbnVuZGVyd2Vhci9NXFxudW5kZXJ3ZWlnaHQvTVxcbnVuZGVyd2VudFxcbnVuZGVyd2hlbG0vREdTXFxudW5kZXJ3aXJlL0RTXFxudW5kZXJ3b3JsZC9NU1xcbnVuZGVyd3JpdGUvWkdSU1xcbnVuZGVyd3JpdGVyL01cXG51bmRlcndyaXR0ZW5cXG51bmRlcndyb3RlXFxudW5kZXNpcmFibGUvTVNcXG51bmRpZXMvTVxcbnVuZG9cXG51bmRvdWJ0ZWQvWVxcbnVuZHJhbWF0aWNcXG51bmR1ZVxcbnVuZHVsYW50XFxudW5kdWxhdGUvRFNYR05cXG51bmR1bGF0aW9uL01cXG51bmR5aW5nXFxudW5lYXJ0aGxpbmVzcy9NXFxudW5lYXNlL01cXG51bmVhc3kvVFxcbnVuZWF0YWJsZVxcbnVuZWNvbm9taWNcXG51bmVtcGxveWVkL01cXG51bmVuZGluZ1xcbnVuZW50ZXJwcmlzaW5nXFxudW5lcXVhbC9EWVxcbnVuZXJyaW5nL1lcXG51bmVzc2VudGlhbFxcbnVuZXZlbi9ZXFxudW5leGNlcHRpb25hYmx5XFxudW5leGNpdGVkXFxudW5leGNpdGluZ1xcbnVuZXhwZWN0ZWQvWVBcXG51bmV4cGVjdGVkbmVzcy9NXFxudW5mYWlsaW5nL1lcXG51bmZhaXIvUFRSWVxcbnVuZmFsdGVyaW5nXFxudW5mYW1pbGlhclxcbnVuZmF0aG9tYWJseVxcbnVuZmVkXFxudW5mZWVsaW5nL1lcXG51bmZlbWluaW5lXFxudW5maXQvU1xcbnVuZml0dGluZ1xcbnVuZml4L0dEU1xcbnVuZmxhZ2dpbmcvWVxcbnVuZmxhcHBhYmlsaXR5L01cXG51bmZsYXBwYWJsZVxcbnVuZmxhcHBhYmx5XFxudW5mbGF0dGVyaW5nXFxudW5mbGluY2hpbmcvWVxcbnVuZm9yZ2V0dGFibHlcXG51bmZvcmdpdmFibHlcXG51bmZvcnR1bmF0ZS9NU1xcbnVuZnJpZW5kbHkvVFxcbnVuZnJvY2svREdcXG51bmZydWl0ZnVsXFxudW5mdW5ueVxcbnVuZ2FpbmxpbmVzcy9NXFxudW5nYWlubHkvUlBUXFxudW5nZW5lcm91c1xcbnVuZ2VudGxlXFxudW5nb2RseS9UXFxudW5ncmFjZWZ1bC9ZXFxudW5ncnVkZ2luZ1xcbnVuZ3VhcmRlZFxcbnVuZ3VlbnQvU01cXG51bmd1bGF0ZS9NU1xcbnVuaGFuZHkvVFxcbnVuaGFwcHkvVFxcbnVuaGVhbHRoZnVsXFxudW5oZWFsdGh5L1RcXG51bmhpc3RvcmljYWxcXG51bmhvbHkvVFxcbnVuaHVydFxcbnVuaWNhbWVyYWxcXG51bmljZWxsdWxhclxcbnVuaWNvcm4vU01cXG51bmljeWNsZS9TTVxcbnVuaWRpcmVjdGlvbmFsXFxudW5pZmljYXRpb24vQU1cXG51bmlmb3JtL1NNRFlHXFxudW5pZm9ybWl0eS9NXFxudW5pZnkvQUdEU05cXG51bmlsYXRlcmFsL1lcXG51bmlsYXRlcmFsaXNtXFxudW5pbXBvcnRhbnRcXG51bmltcHJlc3NpdmVcXG51bmluZm9ybWF0aXZlXFxudW5pbmhpYml0ZWQvWVxcbnVuaW5zdXJlZFxcbnVuaW50ZWxsaWdlbnRcXG51bmludGVuZGVkXFxudW5pbnRlcmVzdGluZ1xcbnVuaW50ZXJydXB0ZWQvWVxcbnVuaW50ZXJydXB0aWJsZVxcbnVuaW52aXRpbmdcXG51bmlvbi9BU01cXG51bmlvbmlzbS9NXFxudW5pb25pc3QvTVNcXG51bmlxdWUvWVRSUFxcbnVuaXF1ZW5lc3MvTVxcbnVuaXNleC9NXFxudW5pc29uL01cXG51bml0YXJ5XFxudW5pdGUvQUVHU0RcXG51bml0ZWRseVxcbnVuaXRpZXNcXG51bml0aXplL0RTR1xcbnVuaXR5L0VNXFxudW5pdmFsZW50XFxudW5pdmFsdmUvU01cXG51bml2ZXJzYWwvTVlTXFxudW5pdmVyc2FsaXNtXFxudW5pdmVyc2FsaXN0XFxudW5pdmVyc2FsaXR5L01cXG51bml2ZXJzYWxpemUvRFNHXFxudW5pdmVyc2UvU01cXG51bml2ZXJzaXR5L1NNXFxudW5pdm9jYWxcXG51bmp1c3QvWVxcbnVua2VtcHRcXG51bmtpbmQvVFxcbnVua2luZGx5L1RcXG51bmtub3dhYmxlL01cXG51bmtub3duL1NNXFxudW5sZWFkZWQvTVxcbnVubGVzc1xcbnVubGlrZS9QQlxcbnVubGlrZWx5L1RcXG51bmxpdFxcbnVubG9jay9EU0dcXG51bmxvdmFibGVcXG51bmxvdmVseS9UUlxcbnVubG92aW5nXFxudW5sdWNreS9UXFxudW5tYW5seS9UXFxudW5tYXJyaWVkXFxudW5tZWFuaW5nXFxudW5tZW50aW9uYWJsZS9NU1xcbnVubWVudGlvbmFibGVzL01cXG51bm1ldFxcbnVubWluZGZ1bFxcbnVubWlzc2FibGVcXG51bm1pc3Rha2FibHlcXG51bm1vcmFsXFxudW5tb3ZhYmxlXFxudW5tdXNpY2FsXFxudW5uZWNlc3NhcnlcXG51bm5lcnZpbmcvWVxcbnVub2JzZXJ2YW50XFxudW5vZmZlbnNpdmVcXG51bm9mZmljaWFsL1lcXG51bm9yaWdpbmFsXFxudW5wZW9wbGVcXG51bnBlcmNlcHRpdmVcXG51bnBlcnN1YXNpdmVcXG51bnBpY2svR0RTXFxudW5waW4vU1xcbnVucGxlYXNpbmdcXG51bnBvbGl0aWNhbFxcbnVucG9wdWxhclxcbnVucHJhY3RpY2FsXFxudW5wcmVjZWRlbnRlZC9ZXFxudW5wcm9mZXNzaW9uYWwvWVxcbnVucHJvbWlzaW5nXFxudW5wcm9waXRpb3VzXFxudW5xdWVzdGlvbmluZy9ZXFxudW5xdWlldC9UUlxcbnVucmVhZC9CXFxudW5yZWFkeVxcbnVucmVhbFxcbnVucmVhc29uaW5nXFxudW5yZWdlbmVyYXRlXFxudW5yZWxhdGVkXFxudW5yZWxlbnRpbmcvWVxcbnVucmVsaWV2ZWQvWVxcbnVucmVtYXJrYWJsZVxcbnVucmVtaXR0aW5nL1lcXG51bnJlcGVudGFudFxcbnVucmVwb3J0ZWRcXG51bnJlcHJlc2VudGF0aXZlXFxudW5yZXN0L01cXG51bnJldmVhbGluZ1xcbnVucmlwZS9UUlxcbnVucm9sbC9HRFNcXG51bnJvbWFudGljXFxudW5ydWxpbmVzcy9NXFxudW5ydWx5L1JUUFxcbnVuc2FmZS9ZVFJcXG51bnNhbGVhYmxlXFxudW5zYXZvcnlcXG51bnNjYXRoZWRcXG51bnNlZWluZy9ZXFxudW5zZWVtbHkvVFxcbnVuc2Vlbi9NXFxudW5zZW50aW1lbnRhbFxcbnVuc2V0XFxudW5zaGFrYWJsZVxcbnVuc2hha2FibHlcXG51bnNoYXBlbHlcXG51bnNob2NrYWJsZVxcbnVuc2hvcm5cXG51bnNpZ2h0bGluZXNzL01cXG51bnNpZ2h0bHkvUFRcXG51bnNtaWxpbmdcXG51bnNvY2lhYmxlXFxudW5zb2NpYWxcXG51bnNvbGRcXG51bnNvdW5kL1BSWVRcXG51bnNwZWFrYWJsZVxcbnVuc3BlYWthYmx5XFxudW5zcGVjaWZpY1xcbnVuc3BlY3RhY3VsYXJcXG51bnNwb3J0aW5nXFxudW5zdGFibGVcXG51bnN0ZWFkeS9UUlBcXG51bnN0aW50aW5nL1lcXG51bnN0cmFwcGluZ1xcbnVuc3Vic3RhbnRpYWxcXG51bnN1YnRsZVxcbnVuc3VpdGFibGVcXG51bnN1cmVcXG51bnN1c3BlY3RpbmcvWVxcbnVuc3ltbWV0cmljYWxcXG51bnRhY3RmdWxcXG51bnRoaW5rYWJseVxcbnVudGhpbmtpbmcvWVxcbnVudGlkeS9QVFJcXG51bnRpbFxcbnVudGltZWx5L1RcXG51bnRpcmluZy9ZXFxudW50b3VjaGFibGUvTVNcXG51bnRvd2FyZFxcbnVudHJ1ZS9SVFxcbnVudHJ1c3R3b3J0aHlcXG51bnRydXRoL01cXG51bnV0dGVyYWJsZVxcbnVudXR0ZXJhYmx5XFxudW53YXJyYW50YWJsZVxcbnVud2FyeS9UXFxudW53YXZlcmluZ1xcbnVud2VkXFxudW53ZWxjb21lL0dcXG51bndlbGxcXG51bndpZWxkaW5lc3MvTVxcbnVud2llbGR5L1RSUFxcbnVud2lzZS9SWVRcXG51bndvcnJpZWRcXG51bndvcnRoeS9UXFxudW53b3VuZFxcbnVud3JhcHBpbmdcXG51bnlpZWxkaW5nXFxudXAvU1xcbnVwYmVhdC9NU1xcbnVwYnJhaWQvU0dEXFxudXBicmluZ2luZy9NU1xcbnVwY2h1Y2svU0dEXFxudXBjb21pbmdcXG51cGNvdW50cnkvTVxcbnVwZGF0ZS9NR0RSU1xcbnVwZHJhZnQvTVNcXG51cGVuZC9TR0RcXG51cGZyb250XFxudXBncmFkZS9NR0RTXFxudXBoZWF2YWwvTVNcXG51cGhlbGRcXG51cGhpbGwvTVNcXG51cGhvbGQvWkdSU1xcbnVwaG9sZGVyL01cXG51cGhvbHN0ZXIvQVNHRFxcbnVwaG9sc3RlcmVyL01TXFxudXBob2xzdGVyeS9NXFxudXBrZWVwL01cXG51cGxhbmQvTVNcXG51cGxpZnQvSlNNREdcXG51cGxvYWQvU0RHXFxudXBtYXJrZXRcXG51cG1vc3RcXG51cG9uXFxudXBwZWRcXG51cHBlci9TTVxcbnVwcGVyY2FzZS9NXFxudXBwZXJjbGFzc21hbi9NXFxudXBwZXJjbGFzc21lblxcbnVwcGVyY2xhc3N3b21hblxcbnVwcGVyY2xhc3N3b21lblxcbnVwcGVyY3V0L01TXFxudXBwZXJjdXR0aW5nXFxudXBwZXJtb3N0XFxudXBwaW5nXFxudXBwaXNoXFxudXBwaXR5XFxudXByYWlzZS9EU0dcXG51cHJlYXIvR1NEXFxudXByaWdodC9NWVBTXFxudXByaWdodG5lc3MvTVxcbnVwcmlzaW5nL1NNXFxudXByaXZlclxcbnVwcm9hci9TTVxcbnVwcm9hcmlvdXMvWVxcbnVwcm9vdC9HU0RcXG51cHNjYWxlXFxudXBzZXQvU01cXG51cHNldHRpbmdcXG51cHNob3QvU01cXG51cHNpZGUvU01cXG51cHNpbG9uL01TXFxudXBzdGFnZS9HRFNcXG51cHN0YWlyc1xcbnVwc3RhbmRpbmdcXG51cHN0YXJ0L01EU0dcXG51cHN0YXRlL01cXG51cHN0cmVhbVxcbnVwc3Ryb2tlL1NNXFxudXBzdXJnZS9NR0RTXFxudXBzd2luZy9NU1xcbnVwdGFrZS9TTVxcbnVwdGVtcG9cXG51cHRocnVzdC9HU01cXG51cHRpY2svU01cXG51cHRpZ2h0XFxudXB0b3duL01cXG51cHRyZW5kXFxudXB0dXJuL0dTTURcXG51cHdhcmQvU1lcXG51cHdpbmRcXG51cmFjaWwvTVxcbnVyYW5pdW0vTVxcbnVyYmFuXFxudXJiYW5lL1JZVFxcbnVyYmFuaXR5L01cXG51cmJhbml6YXRpb24vTVxcbnVyYmFuaXplL0RTR1xcbnVyYmFub2xvZ2lzdC9NU1xcbnVyYmFub2xvZ3kvTVxcbnVyY2hpbi9TTVxcbnVyZWEvTVxcbnVyZW1pYS9NXFxudXJlbWljXFxudXJldGVyL1NNXFxudXJldGhhbmUvTVxcbnVyZXRocmEvTVxcbnVyZXRocmFlXFxudXJldGhyYWxcXG51cmdlL01HRFNcXG51cmdlbmN5L01cXG51cmdlbnQvWVxcbnVyaWNcXG51cmluYWwvU01cXG51cmluYWx5c2VzXFxudXJpbmFseXNpcy9NXFxudXJpbmFyeVxcbnVyaW5hdGUvR05EU1xcbnVyaW5hdGlvbi9NXFxudXJpbmUvTVxcbnVybi9TTVxcbnVyb2dlbml0YWxcXG51cm9sb2dpY2FsXFxudXJvbG9naXN0L01TXFxudXJvbG9neS9NXFxudXJzaW5lXFxudXJ0aWNhcmlhL01cXG51c2FiaWxpdHkvTVxcbnVzYWJsZS9VQVxcbnVzYWdlL1NNXFxudXNlL0FFRFNNR1xcbnVzZWQvVVxcbnVzZWZ1bC9QWVxcbnVzZWZ1bG5lc3MvTVxcbnVzZWxlc3MvWVBcXG51c2VsZXNzbmVzcy9NXFxudXNlci9NU1xcbnVzZXJuYW1lL01TXFxudXNoZXIvU01ER1xcbnVzaGVyZXR0ZS9TTVxcbnVzdVxcbnVzdWFsJ3NcXG51c3VhbC9VWVxcbnVzdXJlci9TTVxcbnVzdXJpb3VzXFxudXN1cnAvU0RSWkdcXG51c3VycGF0aW9uL01cXG51c3VycGVyL01cXG51c3VyeS9NXFxudXRlbnNpbC9TTVxcbnV0ZXJpXFxudXRlcmluZVxcbnV0ZXJ1cy9NXFxudXRpbGl0YXJpYW4vTVNcXG51dGlsaXRhcmlhbmlzbS9NXFxudXRpbGl0eS9TTVxcbnV0aWxpemF0aW9uL01cXG51dGlsaXplL0dCRFNcXG51dG1vc3QvTVxcbnV0b3BpYS9TTVxcbnV0dGVyL1NEWUdcXG51dHRlcmFuY2UvU01cXG51dHRlcm1vc3QvTVxcbnV2ZWl0aXNcXG51dnVsYS9TTVxcbnV2dWxhci9NU1xcbnV4b3Jpb3VzXFxudi9BU1xcbnZhYy9TXFxudmFjYW5jeS9TTVxcbnZhY2FudC9ZXFxudmFjYXRlL0RTR1xcbnZhY2F0aW9uL1pHTURSU1xcbnZhY2F0aW9uZXIvTVxcbnZhY2F0aW9uaXN0L1NNXFxudmFjY2luYXRlL0dORFNYXFxudmFjY2luYXRpb24vTVxcbnZhY2NpbmUvU01cXG52YWNpbGxhdGUvWEdORFNcXG52YWNpbGxhdGlvbi9NXFxudmFjdWl0eS9NXFxudmFjdW9sZS9NU1xcbnZhY3VvdXMvWVBcXG52YWN1b3VzbmVzcy9NXFxudmFjdXVtL0dTTURcXG52YWdhYm9uZC9TTURHXFxudmFnYWJvbmRhZ2UvTVxcbnZhZ2FyaW91c1xcbnZhZ2FyeS9TTVxcbnZhZ2luYS9TTVxcbnZhZ2luYWVcXG52YWdpbmFsL1lcXG52YWdpbml0aXNcXG52YWdyYW5jeS9NXFxudmFncmFudC9NU1xcbnZhZ3VlL1JZVFBcXG52YWd1ZW5lc3MvTVxcbnZhZ3VzXFxudmFpbi9SWVRcXG52YWluZ2xvcmlvdXMvWVxcbnZhaW5nbG9yeS9NXFxudmFsXFxudmFsYW5jZS9NU1xcbnZhbGUvTVNcXG52YWxlZGljdGlvbi9NU1xcbnZhbGVkaWN0b3JpYW4vU01cXG52YWxlZGljdG9yeS9TTVxcbnZhbGVuY2UvTVNcXG52YWxlbmN5L1NNXFxudmFsZW50aW5lL1NNXFxudmFsZXQvU01ER1xcbnZhbGV0dWRpbmFyaWFuL01TXFxudmFsZXR1ZGluYXJpYW5pc20vTVxcbnZhbGlhbmNlL01cXG52YWxpYW50L1lcXG52YWxpZC9ZXFxudmFsaWRhdGUvSUdORFNcXG52YWxpZGF0aW9uL0lNXFxudmFsaWRhdGlvbnNcXG52YWxpZGl0eS9JTVxcbnZhbGlkbmVzcy9NXFxudmFsaXNlL1NNXFxudmFsbGV5L1NNXFxudmFsb3IvTVxcbnZhbG9yb3VzL1lcXG52YWx1YWJsZS9NU1xcbnZhbHVhdGUvRFNHXFxudmFsdWF0aW9uL0NBTVNcXG52YWx1ZSdzXFxudmFsdWUvQ0FHU0RcXG52YWx1ZWxlc3NcXG52YWx1ZXIvU01cXG52YWx2ZS9EU01HXFxudmFsdmVsZXNzXFxudmFsdnVsYXJcXG52YW1vb3NlL0RTR1xcbnZhbXAvQU1ER1NcXG52YW1waXJlL1NNXFxudmFuL1NNXFxudmFuYWRpdW0vTVxcbnZhbmRhbC9TTVxcbnZhbmRhbGlzbS9NXFxudmFuZGFsaXplL0RTR1xcbnZhbmUvTVNcXG52YW5ndWFyZC9NU1xcbnZhbmlsbGEvU01cXG52YW5pc2gvSkRTR1xcbnZhbml0eS9TTVxcbnZhbm5lZFxcbnZhbm5pbmdcXG52YW5xdWlzaC9aR0RSU1xcbnZhbnF1aXNoZXIvTVxcbnZhbnRhZ2UvU01cXG52YXBlL0dEU1xcbnZhcGlkL1lQXFxudmFwaWRpdHkvTVxcbnZhcGlkbmVzcy9NXFxudmFwb3IvU01cXG52YXBvcml6YXRpb24vTVxcbnZhcG9yaXplL0RSU1pHXFxudmFwb3JpemVyL01cXG52YXBvcm91c1xcbnZhcG9yd2FyZVxcbnZhcG9yeVxcbnZhcXVlcm8vTVNcXG52YXIvU1xcbnZhcmlhYmlsaXR5L0lNXFxudmFyaWFibGUvSVNNXFxudmFyaWFibHkvSVxcbnZhcmlhbmNlL1NNXFxudmFyaWFudC9NU1xcbnZhcmlhdGUvTlhcXG52YXJpYXRpb24vTVxcbnZhcmljb2xvcmVkXFxudmFyaWNvc2VcXG52YXJpZWQvVVxcbnZhcmllZ2F0ZS9EU0dOXFxudmFyaWVnYXRpb24vTVxcbnZhcmlldGFsL1NNXFxudmFyaWV0eS9TTVxcbnZhcmlvdXMvWVxcbnZhcmxldC9TTVxcbnZhcm1pbnQvTVNcXG52YXJuaXNoL0dNRFNcXG52YXJuaXNoZWQvVVxcbnZhcnNpdHkvU01cXG52YXJ5L0RTR1xcbnZhcnlpbmcvVVxcbnZhc2N1bGFyXFxudmFzZS9NU1xcbnZhc2VjdG9teS9TTVxcbnZhc29jb25zdHJpY3Rpb25cXG52YXNvbW90b3JcXG52YXNzYWwvU01cXG52YXNzYWxhZ2UvTVxcbnZhc3QvTVJZVFNQXFxudmFzdG5lc3MvTVxcbnZhdC9TTVxcbnZhdHRlZFxcbnZhdHRpbmdcXG52YXVkZXZpbGxlL01cXG52YXVkZXZpbGxpYW4vTVNcXG52YXVsdC9TTURSWkdcXG52YXVsdGVyL01cXG52YXVsdGluZy9NXFxudmF1bnQvU01ER1xcbnZiXFxudmVhbC9NXFxudmVjdG9yL1NHTURcXG52ZWVqYXkvU01cXG52ZWVwL01TXFxudmVlci9NREdTXFxudmVnL01cXG52ZWdhbi9TTVxcbnZlZ2FuaXNtXFxudmVnZWJ1cmdlci9TXFxudmVnZXNcXG52ZWdldGFibGUvU01cXG52ZWdldGFyaWFuL1NNXFxudmVnZXRhcmlhbmlzbS9NXFxudmVnZXRhdGUvR05WRFNcXG52ZWdldGF0aW9uL01cXG52ZWdnZWRcXG52ZWdnZXNcXG52ZWdnaWUvU01cXG52ZWdnaWVidXJnZXIvU1xcbnZlZ2dpbmdcXG52ZWhlbWVuY2UvTVxcbnZlaGVtZW5jeS9NXFxudmVoZW1lbnQvWVxcbnZlaGljbGUvTVNcXG52ZWhpY3VsYXJcXG52ZWlsJ3NcXG52ZWlsL1VER1NcXG52ZWluL01ER1NcXG52ZWxhXFxudmVsYXIvU01cXG52ZWxkL01TXFxudmVsbHVtL01cXG52ZWxvY2lwZWRlL01TXFxudmVsb2NpdHkvU01cXG52ZWxvZHJvbWUvU1xcbnZlbG91ci9NU1xcbnZlbHVtL01cXG52ZWx2ZXQvTVxcbnZlbHZldGVlbi9NXFxudmVsdmV0eVxcbnZlbmFsL1lcXG52ZW5hbGl0eS9NXFxudmVuYXRpb24vTVxcbnZlbmQvREdTXFxudmVuZGV0dGEvU01cXG52ZW5kaWJsZVxcbnZlbmRvci9NU1xcbnZlbmVlci9NREdTXFxudmVuZXJhYmlsaXR5L01cXG52ZW5lcmFibGVcXG52ZW5lcmF0ZS9EU0dOXFxudmVuZXJhdGlvbi9NXFxudmVuZXJlYWxcXG52ZW5nZWFuY2UvTVxcbnZlbmdlZnVsL0FZXFxudmVuaWFsXFxudmVuaXJlbWFuL01cXG52ZW5pcmVtZW5cXG52ZW5pc29uL01cXG52ZW5vbS9NXFxudmVub21vdXMvWVxcbnZlbm91c1xcbnZlbnQnc1xcbnZlbnQvREdTXFxudmVudGlsYXRlL0dORFNcXG52ZW50aWxhdGlvbi9NXFxudmVudGlsYXRvci9TTVxcbnZlbnRpbGF0b3J5XFxudmVudHJhbFxcbnZlbnRyaWNsZS9TTVxcbnZlbnRyaWN1bGFyXFxudmVudHJpbG9xdWlzbS9NXFxudmVudHJpbG9xdWlzdC9TTVxcbnZlbnRyaWxvcXV5L01cXG52ZW50dXJlL0RTTUdcXG52ZW50dXJlc29tZS9QWVxcbnZlbnR1cmVzb21lbmVzcy9NXFxudmVudHVyb3VzL1BZXFxudmVudHVyb3VzbmVzcy9NXFxudmVudWUvQVNNXFxudmVyYWNpb3VzL1lcXG52ZXJhY2l0eS9NXFxudmVyYW5kYS9TTVxcbnZlcmFwYW1pbFxcbnZlcmIvS01TXFxudmVyYmFsL01ZU1xcbnZlcmJhbGl6YXRpb24vTVxcbnZlcmJhbGl6ZS9HRFNcXG52ZXJiYXRpbVxcbnZlcmJlbmEvU01cXG52ZXJiaWFnZS9NU1xcbnZlcmJvc2UvWVxcbnZlcmJvc2l0eS9NXFxudmVyYm90ZW5cXG52ZXJkYW50L1lcXG52ZXJkaWN0L1NNXFxudmVyZGlncmlzL0dNRFNcXG52ZXJkdXJlL01cXG52ZXJnZSdzXFxudmVyZ2UvRkRTR1xcbnZlcmdlci9NU1xcbnZlcmlmaWFibGUvVVxcbnZlcmlmaWNhdGlvbi9NXFxudmVyaWZpZWQvVVxcbnZlcmlmeS9EU05HXFxudmVyaWx5XFxudmVyaXNpbWlsaXR1ZGUvTVxcbnZlcml0YWJsZVxcbnZlcml0YWJseVxcbnZlcml0eS9TTVxcbnZlcm1pY2VsbGkvTVxcbnZlcm1pY3VsaXRlL01cXG52ZXJtaWZvcm1cXG52ZXJtaWxpb24vTVxcbnZlcm1pbi9NXFxudmVybWlub3VzXFxudmVybW91dGgvTVxcbnZlcm5hY3VsYXIvTVNcXG52ZXJuYWxcXG52ZXJuaWVyL1NNXFxudmVyb25pY2EvTVxcbnZlcnJ1Y2EvU01cXG52ZXJydWNhZVxcbnZlcnNhXFxudmVyc2F0aWxlXFxudmVyc2F0aWxpdHkvTVxcbnZlcnNlL0FGTkdNU0RYXFxudmVyc2VkL1VcXG52ZXJzaWZpY2F0aW9uL01cXG52ZXJzaWZpZXIvTVxcbnZlcnNpZnkvWkdORFJTXFxudmVyc2lvbi9BRklNU1xcbnZlcnNpb25lZFxcbnZlcnNpb25pbmdcXG52ZXJzby9TTVxcbnZlcnN1c1xcbnZlcnQvQVxcbnZlcnRlYnJhL01cXG52ZXJ0ZWJyYWVcXG52ZXJ0ZWJyYWxcXG52ZXJ0ZWJyYXRlL0lNU1xcbnZlcnRleC9NU1xcbnZlcnRpY2FsL01ZU1xcbnZlcnRpY2VzXFxudmVydGlnaW5vdXNcXG52ZXJ0aWdvL01cXG52ZXJ2ZS9NXFxudmVyeS9SVFxcbnZlc2ljbGUvU01cXG52ZXNpY3VsYXJcXG52ZXNpY3VsYXRlXFxudmVzcGVyL01TXFxudmVzc2VsL01TXFxudmVzdCdzXFxudmVzdC9JTERHU1xcbnZlc3RhbC9NU1xcbnZlc3RpYnVsZS9NU1xcbnZlc3RpZ2UvU01cXG52ZXN0aWdpYWwvWVxcbnZlc3RpbmcvTVxcbnZlc3RtZW50L0lNU1xcbnZlc3RyeS9TTVxcbnZlc3RyeW1hbi9NXFxudmVzdHJ5bWVuXFxudmV0L1NNXFxudmV0Y2gvTVNcXG52ZXRlcmFuL1NNXFxudmV0ZXJpbmFyaWFuL01TXFxudmV0ZXJpbmFyeS9TTVxcbnZldG8vTURHXFxudmV0b2VzXFxudmV0dGVkXFxudmV0dGluZ1xcbnZleC9HRFNcXG52ZXhhdGlvbi9TTVxcbnZleGF0aW91cy9ZXFxudmhmXFxudmlcXG52aWFcXG52aWFiaWxpdHkvTVxcbnZpYWJsZVxcbnZpYWJseVxcbnZpYWR1Y3QvU01cXG52aWFsL01TXFxudmlhbmQvU01cXG52aWJlL01TXFxudmliZXMvTVxcbnZpYnJhaGFycC9TTVxcbnZpYnJhbmN5L01cXG52aWJyYW50L1lcXG52aWJyYXBob25lL01TXFxudmlicmFwaG9uaXN0L01TXFxudmlicmF0ZS9HTkRTWFxcbnZpYnJhdGlvbi9NXFxudmlicmF0by9NU1xcbnZpYnJhdG9yL1NNXFxudmlicmF0b3J5XFxudmlidXJudW0vU01cXG52aWNhci9TTVxcbnZpY2FyYWdlL1NNXFxudmljYXJpb3VzL1lQXFxudmljYXJpb3VzbmVzcy9NXFxudmljZS9DTVNcXG52aWNlZFxcbnZpY2VnZXJlbnQvU01cXG52aWNlbm5pYWxcXG52aWNlcmVnYWxcXG52aWNlcm95L01TXFxudmljaHlzc29pc2UvTVxcbnZpY2luZ1xcbnZpY2luaXR5L01cXG52aWNpb3VzL1lQXFxudmljaW91c25lc3MvTVxcbnZpY2lzc2l0dWRlL1NNXFxudmljdGltL01TXFxudmljdGltaXphdGlvbi9NXFxudmljdGltaXplL0dEU1xcbnZpY3RpbWxlc3NcXG52aWN0b3IvTVNcXG52aWN0b3Jpb3VzL1lcXG52aWN0b3J5L1NNXFxudmljdHVhbC9TTURHXFxudmljdW5hL01TXFxudmlkZWxpY2V0XFxudmlkZW8vR1NNRFxcbnZpZGVvY2Fzc2V0dGUvU01cXG52aWRlb2NvbmZlcmVuY2luZ1xcbnZpZGVvZGlzYy9NU1xcbnZpZGVvcGhvbmUvTVNcXG52aWRlb3RhcGUvRFNNR1xcbnZpZGVvdGV4XFxudmllL0RTXFxudmlldy9BTURSU1pHXFxudmlld2FibGVcXG52aWV3ZXIvQU1cXG52aWV3ZXJzaGlwL01cXG52aWV3ZmluZGVyL1NNXFxudmlld2luZy9TTVxcbnZpZXdwb2ludC9NU1xcbnZpZ2VzaW1hbFxcbnZpZ2lsL1NNXFxudmlnaWxhbmNlL01cXG52aWdpbGFudC9ZXFxudmlnaWxhbnRlL1NNXFxudmlnaWxhbnRpc20vTVxcbnZpZ2lsYW50aXN0L01cXG52aWduZXR0ZS9EU01HXFxudmlnbmV0dGlzdC9NU1xcbnZpZ29yL01cXG52aWdvcm91cy9ZXFxudmlpXFxudmlpaVxcbnZpa2luZy9NU1xcbnZpbGUvWVRQUlxcbnZpbGVuZXNzL01cXG52aWxpZmljYXRpb24vTVxcbnZpbGlmeS9EU05HXFxudmlsbGEvU01cXG52aWxsYWdlL1JTTVpcXG52aWxsYWdlci9NXFxudmlsbGFpbi9TTVxcbnZpbGxhaW5vdXNcXG52aWxsYWlueS9TTVxcbnZpbGxlaW4vU01cXG52aWxsZWluYWdlL01cXG52aWxsaVxcbnZpbGx1cy9NXFxudmltL01cXG52aW5haWdyZXR0ZS9NXFxudmluY2libGUvSVxcbnZpbmRpY2F0ZS9YRFNHTlxcbnZpbmRpY2F0aW9uL01cXG52aW5kaWNhdG9yL01TXFxudmluZGljdGl2ZS9QWVxcbnZpbmRpY3RpdmVuZXNzL01cXG52aW5lL01TXFxudmluZWdhci9NXFxudmluZWdhcnlcXG52aW5leWFyZC9NU1xcbnZpbm8vTVxcbnZpbm91c1xcbnZpbnRhZ2UvTVNcXG52aW50bmVyL01TXFxudmlueWwvU01cXG52aW9sL01CU1xcbnZpb2xhL1NNXFxudmlvbGFibGUvSVxcbnZpb2xhdGUvR05EU1hcXG52aW9sYXRpb24vTVxcbnZpb2xhdG9yL1NNXFxudmlvbGVuY2UvTVxcbnZpb2xlbnQvWVxcbnZpb2xldC9NU1xcbnZpb2xpbi9NU1xcbnZpb2xpbmNlbGxvL1NcXG52aW9saW5pc3QvU01cXG52aW9saXN0L01TXFxudmlvbG9uY2VsbGlzdC9TTVxcbnZpb2xvbmNlbGxvL01TXFxudmlwZXIvU01cXG52aXBlcm91c1xcbnZpcmFnby9NXFxudmlyYWdvZXNcXG52aXJhbFxcbnZpcmVvL1NNXFxudmlyZ2luL01TXFxudmlyZ2luYWwvU01cXG52aXJnaW5pdHkvTVxcbnZpcmd1bGUvTVNcXG52aXJpbGVcXG52aXJpbGl0eS9NXFxudmlyb2xvZ2lzdC9TTVxcbnZpcm9sb2d5L01cXG52aXJ0dWFsL1lcXG52aXJ0dWFsaXphdGlvblxcbnZpcnR1ZS9TTVxcbnZpcnR1b3NpdHkvTVxcbnZpcnR1b3NvL01cXG52aXJ0dW91cy9ZUFxcbnZpcnR1b3VzbmVzcy9NXFxudmlydWxlbmNlL01cXG52aXJ1bGVudC9ZXFxudmlydXMvTVNcXG52aXNhL01EU0dcXG52aXNhZ2UvTVNcXG52aXNjZXJhXFxudmlzY2VyYWwvWVxcbnZpc2NpZFxcbnZpc2Nvc2UvTVxcbnZpc2Nvc2l0eS9NXFxudmlzY291bnQvU01cXG52aXNjb3VudGN5L1NNXFxudmlzY291bnRlc3MvTVNcXG52aXNjb3VzXFxudmlzY3VzL01cXG52aXNlL0FDTUdEU1xcbnZpc2liaWxpdHkvSU1cXG52aXNpYmxlL0lcXG52aXNpYmx5L0lcXG52aXNpb24vS0dEU01cXG52aXNpb25hcnkvU01cXG52aXNpdCdzXFxudmlzaXQvQVNHRFxcbnZpc2l0YW50L01TXFxudmlzaXRhdGlvbi9NU1xcbnZpc2l0b3IvTVNcXG52aXNvci9TTVxcbnZpc3RhL1NNXFxudmlzdWFsL1NNWVxcbnZpc3VhbGl6YXRpb24vU01cXG52aXN1YWxpemUvRFJTWkdcXG52aXN1YWxpemVyL01cXG52aXRhL01cXG52aXRhZVxcbnZpdGFsL1NZXFxudml0YWxpdHkvTVxcbnZpdGFsaXphdGlvbi9BTVxcbnZpdGFsaXplL0NBR1NEXFxudml0YWxzL01cXG52aXRhbWluL01TXFxudml0aWF0ZS9HTkRTXFxudml0aWF0aW9uL01cXG52aXRpY3VsdHVyZS9NXFxudml0aWN1bHR1cmlzdC9NU1xcbnZpdHJlb3VzXFxudml0cmlmYWN0aW9uL01cXG52aXRyaWZpY2F0aW9uL01cXG52aXRyaWZ5L0dORFNcXG52aXRyaW5lL1NNXFxudml0cmlvbC9NXFxudml0cmlvbGljXFxudml0cmlvbGljYWxseVxcbnZpdHRsZXMvTVxcbnZpdHVwZXJhdGUvR05WRFNcXG52aXR1cGVyYXRpb24vTVxcbnZpdmEvTVNcXG52aXZhY2VcXG52aXZhY2lvdXMvUFlcXG52aXZhY2lvdXNuZXNzL01cXG52aXZhY2l0eS9NXFxudml2YXJpYVxcbnZpdmFyaXVtL1NNXFxudml2aWQvUllUUFxcbnZpdmlkbmVzcy9NXFxudml2aWZ5L0FEU0dcXG52aXZpcGFyb3VzXFxudml2aXNlY3QvREdTXFxudml2aXNlY3Rpb24vTVxcbnZpdmlzZWN0aW9uYWxcXG52aXZpc2VjdGlvbmlzdC9TTVxcbnZpeGVuL1NNXFxudml4ZW5pc2gvWVxcbnZpelxcbnZpemllci9TTVxcbnZsZlxcbnZvY2FiXFxudm9jYWJsZS9NU1xcbnZvY2FidWxhcnkvU01cXG52b2NhbC9TTVlcXG52b2NhbGljXFxudm9jYWxpc3QvU01cXG52b2NhbGl6YXRpb24vTVNcXG52b2NhbGl6ZS9EU0dcXG52b2NhdGlvbi9GSUtBU01cXG52b2NhdGlvbmFsL1lcXG52b2NhdGl2ZS9NU1xcbnZvY2lmZXJhdGUvRFNHTlxcbnZvY2lmZXJhdGlvbi9NXFxudm9jaWZlcm91cy9ZUFxcbnZvY2lmZXJvdXNuZXNzL01cXG52b2RrYS9TTVxcbnZvZ3VlL1NNXFxudm9ndWlzaFxcbnZvaWNlL0lEU01HXFxudm9pY2VkL1VcXG52b2ljZWxlc3MvUFlcXG52b2ljZWxlc3NuZXNzL01cXG52b2ljZW1haWwvU01cXG52b2lkL01EU0dCXFxudm9pbGFcXG52b2lsZS9NXFxudm9sL1NcXG52b2xhdGlsZVxcbnZvbGF0aWxpdHkvTVxcbnZvbGF0aWxpemUvRFNHXFxudm9sY2FuaWNcXG52b2xjYW5pc21cXG52b2xjYW5vL01cXG52b2xjYW5vZXNcXG52b2xlL01TXFxudm9saXRpb24vTVxcbnZvbGl0aW9uYWxcXG52b2xsZXkvR1NNRFxcbnZvbGxleWJhbGwvTVNcXG52b2x0L0FNU1xcbnZvbHRhZ2UvTVNcXG52b2x0YWljXFxudm9sdG1ldGVyL1NNXFxudm9sdWJpbGl0eS9NXFxudm9sdWJsZVxcbnZvbHVibHlcXG52b2x1bWUvU01cXG52b2x1bWV0cmljXFxudm9sdW1pbm91cy9ZUFxcbnZvbHVtaW5vdXNuZXNzL01cXG52b2x1bnRhcmlseS9JXFxudm9sdW50YXJpc20vTVxcbnZvbHVudGFyeS9TTVxcbnZvbHVudGVlci9TR01EXFxudm9sdW50ZWVyaXNtL01cXG52b2x1cHR1YXJ5L1NNXFxudm9sdXB0dW91cy9QWVxcbnZvbHVwdHVvdXNuZXNzL01cXG52b2x1dGUvU01cXG52b21pdC9TTURHXFxudm9vZG9vL0dTTURcXG52b29kb29pc20vTVxcbnZvcmFjaW91cy9QWVxcbnZvcmFjaW91c25lc3MvTVxcbnZvcmFjaXR5L01cXG52b3J0ZXgvTVNcXG52b3RhcnkvU01cXG52b3RlJ3NcXG52b3RlL0NHVkRTXFxudm90ZXIvU01cXG52b3VjaC9EUlNaR1xcbnZvdWNoZXIvTVxcbnZvdWNoc2FmZS9EU0dcXG52b3cvU0dNRFxcbnZvd2VsL1NNXFxudm95YWdlL01aR0RSU1xcbnZveWFnZXIvTVxcbnZveWFnZXVyL1NNXFxudm95ZXVyL01TXFxudm95ZXVyaXNtL01cXG52b3lldXJpc3RpY1xcbnZ1bGNhbml6YXRpb24vTVxcbnZ1bGNhbml6ZS9HRFNcXG52dWxnYXIvUllUXFxudnVsZ2FyaWFuL01TXFxudnVsZ2FyaXNtL01TXFxudnVsZ2FyaXR5L1NNXFxudnVsZ2FyaXphdGlvbi9NXFxudnVsZ2FyaXplL1pHRFJTXFxudnVsZ2FyaXplci9NXFxudnVsbmVyYWJpbGl0aWVzXFxudnVsbmVyYWJpbGl0eS9JTVxcbnZ1bG5lcmFibGUvSVxcbnZ1bG5lcmFibHkvSVxcbnZ1bHBpbmVcXG52dWx0dXJlL1NNXFxudnVsdHVyb3VzXFxudnVsdmEvTVxcbnZ1bHZhZVxcbnZ1dnV6ZWxhL01TXFxudnlpbmdcXG53L0ROWFRHVkpcXG53YWJiaXQvU1xcbndhY2svTVJUU1xcbndhY2tpbmVzcy9NXFxud2Fja28vU01cXG53YWNreS9SUFRcXG53YWQvU1pHTURSXFxud2FkZGVkXFxud2FkZGluZy9NXFxud2FkZGxlL0RTTUdcXG53YWRlL01TXFxud2FkZXIvTVxcbndhZGVycy9NXFxud2FkZ2UvU1xcbndhZGkvTVNcXG53YWZlci9TTVxcbndhZmZsZS9NWkdEUlNcXG53YWZmbGVyL01cXG53YWZ0L01ER1NcXG53YWcvU1pHTURSXFxud2FnZS9NU1xcbndhZ2VkL1VcXG53YWdlci9aR01EUlxcbndhZ2VyZXIvTVxcbndhZ2dlZFxcbndhZ2dlcnkvU01cXG53YWdnaW5nXFxud2FnZ2lzaC9ZUFxcbndhZ2dpc2huZXNzL01cXG53YWdnbGUvTUdEU1xcbndhZ29uL1pTTVJcXG53YWdvbmVyL01cXG53YWd0YWlsL1NNXFxud2FpZi9NU1xcbndhaWwvTURSWkdTXFxud2FpbGVyL01cXG53YWlsaW5nL01cXG53YWluL01TXFxud2FpbnNjb3QvU0pNREdcXG53YWluc2NvdGluZy9NXFxud2FpbndyaWdodC9NU1xcbndhaXN0L1NNXFxud2Fpc3RiYW5kL01TXFxud2Fpc3Rjb2F0L01TXFxud2Fpc3RsaW5lL01TXFxud2FpdC9NRFJaR1NcXG53YWl0ZXIvTVxcbndhaXRpbmcvTVxcbndhaXRwZXJzb24vTVNcXG53YWl0cmVzcy9NU1xcbndhaXRzdGFmZi9NXFxud2FpdmUvRFJTWkdcXG53YWl2ZXIvTVxcbndha2UvTUdKRFNcXG53YWtlZnVsL1BZXFxud2FrZWZ1bG5lc3MvTVxcbndha2VuL0dTRFxcbndhbGRvL1NcXG53YWxkb2VzXFxud2FsZS9NR0RTXFxud2Fsay9NRFJaR1NcXG53YWxrYWJvdXQvU1xcbndhbGthd2F5L01TXFxud2Fsa2VyL01cXG53YWxraWVzXFxud2Fsa2luZy9NXFxud2Fsa291dC9TTVxcbndhbGtvdmVyL01TXFxud2Fsa3dheS9TTVxcbndhbGwvTURHU1xcbndhbGxhYnkvU01cXG53YWxsYWhcXG53YWxsYWhzXFxud2FsbGJvYXJkL01cXG53YWxsZXQvTVNcXG53YWxsZXllL0RTTVxcbndhbGxmbG93ZXIvTVNcXG53YWxsb3AvTURTSkdcXG53YWxsb3BpbmcvTVxcbndhbGxvdy9NRFNHXFxud2FsbHBhcGVyL1NNREdcXG53YWxseS9TXFxud2FsbnV0L01TXFxud2FscnVzL01TXFxud2FsdHovWkdNRFJTXFxud2FsdHplci9NXFxud2FtcHVtL01cXG53YW4vR1BEWVxcbndhbmQvTVNcXG53YW5kZXIvRFJTSlpHXFxud2FuZGVyZXIvTVxcbndhbmRlcmluZ3MvTVxcbndhbmRlcmx1c3QvU01cXG53YW5lL01TXFxud2FuZ2xlL01aR0RSU1xcbndhbmdsZXIvTVxcbndhbmsvRFJaR1NcXG53YW5uYVxcbndhbm5hYmUvU01cXG53YW5uYWJlZS9TXFxud2FubmVyXFxud2FubmVzcy9NXFxud2FubmVzdFxcbndhbnQvTURHU1xcbndhbnRlZC9VXFxud2FudG9uL01EWVNQR1xcbndhbnRvbm5lc3MvTVxcbndhcGl0aS9NU1xcbndhci9TTVxcbndhcmJsZS9NWkdEUlNcXG53YXJibGVyL01cXG53YXJib25uZXQvU01cXG53YXJkL0FNREdTXFxud2FyZGVuL01TXFxud2FyZGVyL01TXFxud2FyZHJlc3MvU1xcbndhcmRyb2JlL1NNXFxud2FyZHJvb20vU01cXG53YXJlL01TXFxud2FyZWhvdXNlL0RTTUdcXG53YXJlelxcbndhcmZhcmUvTVxcbndhcmZhcmluXFxud2FyaGVhZC9NU1xcbndhcmhvcnNlL1NNXFxud2FyaWx5L1VcXG53YXJpbmVzcy9VTVxcbndhcmxpa2VcXG53YXJsb2NrL01TXFxud2FybG9yZC9NU1xcbndhcm0vUERSWUhaVEdTXFxud2FybWJsb29kZWRcXG53YXJtZXIvTVxcbndhcm1oZWFydGVkL1BcXG53YXJtaGVhcnRlZG5lc3MvTVxcbndhcm1pc2hcXG53YXJtbmVzcy9NXFxud2FybW9uZ2VyL1NNR1xcbndhcm1vbmdlcmluZy9NXFxud2FybXRoL01cXG53YXJuL0pER1NcXG53YXJuaW5nL01cXG53YXJwL01ER1NcXG53YXJwYWludFxcbndhcnBhdGgvTVxcbndhcnBhdGhzXFxud2FycGxhbmUvTVNcXG53YXJyYW50L0dNRFNcXG53YXJyYW50ZWQvVVxcbndhcnJhbnR5L0RTTUdcXG53YXJyZWRcXG53YXJyZW4vTVNcXG53YXJyaW5nXFxud2Fycmlvci9TTVxcbndhcnNoaXAvU01cXG53YXJ0L01TXFxud2FydGhvZy9TTVxcbndhcnRpbWUvTVxcbndhcnR5L1RSXFxud2FyeS9VUFJUXFxud2FzXFxud2FzYWJpXFxud2FzaC9CSk1EUlNaR1xcbndhc2hhYmxlL1NNXFxud2FzaGJhc2luL1NNXFxud2FzaGJvYXJkL1NNXFxud2FzaGJvd2wvU01cXG53YXNoY2xvdGgvTVxcbndhc2hjbG90aHNcXG53YXNoZWQvVVxcbndhc2hlci9NXFxud2FzaGVyd29tYW4vTVxcbndhc2hlcndvbWVuXFxud2FzaGluZy9NXFxud2FzaG91dC9NU1xcbndhc2hyYWcvTVNcXG53YXNocm9vbS9NU1xcbndhc2hzdGFuZC9TTVxcbndhc2h0dWIvTVNcXG53YXNoeS9UUlxcbndhc24ndFxcbndhc3AvTVNcXG53YXNwaXNoL1lQXFxud2FzcGlzaG5lc3MvTVxcbndhc3NhaWwvU01ER1xcbndhc3RcXG53YXN0YWdlL01cXG53YXN0ZS9EUlNNWkdcXG53YXN0ZWJhc2tldC9NU1xcbndhc3RlZnVsL1BZXFxud2FzdGVmdWxuZXNzL01cXG53YXN0ZWxhbmQvU01cXG53YXN0ZXBhcGVyL01cXG53YXN0ZXIvTVxcbndhc3Rld2F0ZXJcXG53YXN0cmVsL1NNXFxud2F0Y2gvQlpHTURSU1xcbndhdGNoYWJsZS9VXFxud2F0Y2hiYW5kL01TXFxud2F0Y2hkb2cvU01cXG53YXRjaGVyL01cXG53YXRjaGZ1bC9ZUFxcbndhdGNoZnVsbmVzcy9NXFxud2F0Y2htYWtlci9NU1xcbndhdGNobWFraW5nL01cXG53YXRjaG1hbi9NXFxud2F0Y2htZW5cXG53YXRjaHN0cmFwL1NcXG53YXRjaHRvd2VyL1NNXFxud2F0Y2h3b3JkL01TXFxud2F0ZXIvR1NNRFxcbndhdGVyYmVkL01TXFxud2F0ZXJiaXJkL1NNXFxud2F0ZXJib2FyZC9NREpTR1xcbndhdGVyYm9hcmRpbmcvTVxcbndhdGVyYm9ybmVcXG53YXRlcmNvbG9yL01TXFxud2F0ZXJjb3Vyc2UvU01cXG53YXRlcmNyYWZ0L01cXG53YXRlcmNyZXNzL01cXG53YXRlcmZhbGwvU01cXG53YXRlcmZvd2wvU01cXG53YXRlcmZyb250L01TXFxud2F0ZXJob2xlL1NNXFxud2F0ZXJpbmVzcy9NXFxud2F0ZXJsaWx5L1NNXFxud2F0ZXJsaW5lL01TXFxud2F0ZXJsb2dnZWRcXG53YXRlcm1hcmsvTURHU1xcbndhdGVybWVsb24vU01cXG53YXRlcm1pbGwvTVNcXG53YXRlcnByb29mL1NNREdcXG53YXRlcnByb29maW5nL01cXG53YXRlcnMvTVxcbndhdGVyc2hlZC9NU1xcbndhdGVyc2lkZS9NU1xcbndhdGVyc3BvdXQvU01cXG53YXRlcnRpZ2h0XFxud2F0ZXJ3YXkvTVNcXG53YXRlcndoZWVsL1NNXFxud2F0ZXJ3b3Jrcy9NXFxud2F0ZXJ5L1BUUlxcbndhdHQvTVNcXG53YXR0YWdlL01cXG53YXR0bGUvTUdEU1xcbndhdmUvTVpHRFJTXFxud2F2ZWJhbmQvU1xcbndhdmVmb3JtXFxud2F2ZWZyb250XFxud2F2ZWxlbmd0aC9NXFxud2F2ZWxlbmd0aHNcXG53YXZlbGV0L1NNXFxud2F2ZWxpa2VcXG53YXZlci9aR01EUlxcbndhdmVyZXIvTVxcbndhdmVyaW5nL1lcXG53YXZpbmVzcy9NXFxud2F2eS9QUlRcXG53YXgvR01ETlNcXG53YXhpbmVzcy9NXFxud2F4d2luZy9TTVxcbndheHdvcmsvU01cXG53YXh5L1JQVFxcbndheS9TTVxcbndheWJpbGwvU01cXG53YXlmYXJlci9NU1xcbndheWZhcmluZy9TTVxcbndheWxhaWRcXG53YXlsYXkvUlNaR1xcbndheWxheWVyL01cXG53YXlzaWRlL1NNXFxud2F5d2FyZC9QWVxcbndheXdhcmRuZXNzL01cXG53YXpvby9TXFxud2VcXG53ZSdkXFxud2UnbGxcXG53ZSdyZVxcbndlJ3ZlXFxud2Vhay9QTlJZWFRcXG53ZWFrZW4vRFJaR1xcbndlYWtlbmVyL01cXG53ZWFrZmlzaC9NU1xcbndlYWtpc2hcXG53ZWFrbGluZy9TTVxcbndlYWtuZXNzL01TXFxud2VhbC9NSFNcXG53ZWFsdGgvTVxcbndlYWx0aGluZXNzL01cXG53ZWFsdGh5L1RSUFxcbndlYW4vREdTXFxud2VhcG9uL01TXFxud2VhcG9uaXplL0dEU1xcbndlYXBvbmxlc3NcXG53ZWFwb25yeS9NXFxud2Vhci9NUkJKU1pHXFxud2VhcmFibGUvVVxcbndlYXJlci9NXFxud2VhcmllZC9VXFxud2VhcmlseVxcbndlYXJpbmVzcy9NXFxud2Vhcmlzb21lL1lcXG53ZWFyeS9UR0RSU1BcXG53ZWFzZWwvTURZU0dcXG53ZWF0aGVyL1NNREdcXG53ZWF0aGVyYm9hcmQvU0dcXG53ZWF0aGVyY29jay9NU1xcbndlYXRoZXJpbmcvTVxcbndlYXRoZXJpemF0aW9uL01cXG53ZWF0aGVyaXplL0RTR1xcbndlYXRoZXJtYW4vTVxcbndlYXRoZXJtZW5cXG53ZWF0aGVycGVyc29uL01TXFxud2VhdGhlcnByb29mL0dTRFxcbndlYXRoZXJzdHJpcC9TXFxud2VhdGhlcnN0cmlwcGVkXFxud2VhdGhlcnN0cmlwcGluZy9NXFxud2VhdmUvRFJTTVpHXFxud2VhdmVyL01cXG53ZWF2aW5nL01cXG53ZWIvU01cXG53ZWJiZWRcXG53ZWJiaW5nL01cXG53ZWJjYW0vTVNcXG53ZWJjYXN0L1NNR1xcbndlYmZlZXRcXG53ZWJmb290L01cXG53ZWJpbmFyL1NNXFxud2ViaXNvZGUvTVNcXG53ZWJsb2cvTVNcXG53ZWJtYXN0ZXIvU01cXG53ZWJtaXN0cmVzcy9NU1xcbndlYnNpdGUvU01cXG53ZWQvQVNcXG53ZWRkZWQvQVxcbndlZGRlclxcbndlZGRpbmcvU01cXG53ZWRnZS9EU01HXFxud2VkZ2llL01TXFxud2VkbG9jay9NXFxud2VlL1JTTVRcXG53ZWVkL01EUlNaR1xcbndlZWRlci9NXFxud2VlZGtpbGxlci9TXFxud2VlZGxlc3NcXG53ZWVkeS9UUlxcbndlZWluZ1xcbndlZWsvTVlTXFxud2Vla2RheS9TTVxcbndlZWtlbmQvU1pHTURSXFxud2Vla2x5L1NNXFxud2Vla25pZ2h0L1NNXFxud2Vlbi9EU0dcXG53ZWVuaWUvTVRSU1xcbndlZW5zeS9SVFxcbndlZW55XFxud2VlcC9NUkpTWkdcXG53ZWVwZXIvTVxcbndlZXBpZVxcbndlZXB5L1RSU01cXG53ZWV2aWwvTVNcXG53ZWZ0L01TXFxud2VpZ2gnc1xcbndlaWdoL0FHRFxcbndlaWdoYnJpZGdlL1NcXG53ZWlnaHMvQVxcbndlaWdodC9NRFNKR1xcbndlaWdodGVkL1VcXG53ZWlnaHRpbHlcXG53ZWlnaHRpbmVzcy9NXFxud2VpZ2h0bGVzcy9ZUFxcbndlaWdodGxlc3NuZXNzL01cXG53ZWlnaHRsaWZ0ZXIvTVNcXG53ZWlnaHRsaWZ0aW5nL01cXG53ZWlnaHR5L1BUUlxcbndlaXIvTVNcXG53ZWlyZC9QVFJZXFxud2VpcmRpZS9NU1xcbndlaXJkbmVzcy9NXFxud2VpcmRvL01TXFxud2VsY29tZS9NR0RTXFxud2VsZC9NRFJCU1pHXFxud2VsZGVyL01cXG53ZWxmYXJlL01cXG53ZWxraW4vTVxcbndlbGwvTURQU0dcXG53ZWxsaGVhZC9TTVxcbndlbGxpZVxcbndlbGxpbmd0b24vTVNcXG53ZWxsbmVzcy9NXFxud2VsbHNwcmluZy9NU1xcbndlbGx5L1NcXG53ZWxzaC9aR0RSU1xcbndlbHNoZXIvTVxcbndlbHQvTURSU1pHXFxud2VsdGVyL0dNRFxcbndlbHRlcndlaWdodC9TTVxcbndlbi9NXFxud2VuY2gvTVNcXG53ZW5kL0RTR1xcbndlbnRcXG53ZXB0XFxud2VyZVxcbndlcmVuJ3RcXG53ZXJld29sZi9NXFxud2VyZXdvbHZlc1xcbndlc3QvTVxcbndlc3Rib3VuZFxcbndlc3Rlcmx5L1NNXFxud2VzdGVybi9TWk1SXFxud2VzdGVybmVyL01cXG53ZXN0ZXJuaXphdGlvbi9NXFxud2VzdGVybml6ZS9HRFNcXG53ZXN0ZXJubW9zdFxcbndlc3R3YXJkL1NcXG53ZXQvU01ZUFxcbndldGJhY2svU01cXG53ZXRsYW5kL1NNXFxud2V0bmVzcy9NXFxud2V0dGVyL1NNXFxud2V0dGVzdFxcbndldHRpbmdcXG53ZXR3YXJlL1NcXG53aGFjay9TSlpHTURSXFxud2hhY2tlci9NXFxud2hhbGUvRFJTTVpHXFxud2hhbGVib2F0L01TXFxud2hhbGVib25lL01cXG53aGFsZXIvTVxcbndoYWxpbmcvTVxcbndoYW0vTVNcXG53aGFtbWVkXFxud2hhbW1pbmdcXG53aGFtbXkvU01cXG53aGFyZi9NXFxud2hhcnZlc1xcbndoYXQvTVNcXG53aGF0Y2hhbWFjYWxsaXQvTVNcXG53aGF0ZXZlclxcbndoYXRub3QvTVxcbndoYXRzaGVybmFtZVxcbndoYXRzaGlzbmFtZVxcbndoYXRzaXQvU1xcbndoYXRzb2V2ZXJcXG53aGVhbC9TTVxcbndoZWF0L01OXFxud2hlYXRnZXJtXFxud2hlYXRtZWFsXFxud2hlZVxcbndoZWVkbGUvRFJTWkdcXG53aGVlZGxlci9NXFxud2hlZWwvU01EUkdcXG53aGVlbGJhcnJvdy9TTVxcbndoZWVsYmFzZS9TTVxcbndoZWVsY2hhaXIvU01cXG53aGVlbGhvdXNlL01TXFxud2hlZWxpZS9TTVxcbndoZWVsd3JpZ2h0L01TXFxud2hlZXplL0RTTUdcXG53aGVlemlseVxcbndoZWV6aW5lc3MvTVxcbndoZWV6eS9QUlRcXG53aGVsay9TTURcXG53aGVsbS9TREdcXG53aGVscC9TTURHXFxud2hlbi9NU1xcbndoZW5jZVxcbndoZW5ldmVyXFxud2hlbnNvZXZlclxcbndoZXJlL1NNXFxud2hlcmVhYm91dHMvTVxcbndoZXJlYXNcXG53aGVyZWF0XFxud2hlcmVieVxcbndoZXJlZm9yZS9NU1xcbndoZXJlaW5cXG53aGVyZW9mXFxud2hlcmVvblxcbndoZXJlc29ldmVyXFxud2hlcmV0b1xcbndoZXJldXBvblxcbndoZXJldmVyXFxud2hlcmV3aXRoXFxud2hlcmV3aXRoYWwvTVxcbndoZXJyeS9TTVxcbndoZXQvU1xcbndoZXRoZXJcXG53aGV0c3RvbmUvU01cXG53aGV0dGVkXFxud2hldHRpbmdcXG53aGV3XFxud2hleS9NXFxud2hpY2hcXG53aGljaGV2ZXJcXG53aGlmZi9TTURHXFxud2hpZmZsZXRyZWUvTVNcXG53aGlsZS9EU01HXFxud2hpbG9tXFxud2hpbHN0XFxud2hpbS9NU1xcbndoaW1wZXIvTURHU1xcbndoaW1zaWNhbC9ZXFxud2hpbXNpY2FsaXR5L01cXG53aGltc3kvU01cXG53aGluZS9EUlNNWkdcXG53aGluZXIvTVxcbndoaW5nZS9EUlNaR1xcbndoaW5nZWluZ1xcbndoaW5ueS9HRFNNXFxud2hpbnkvUlRcXG53aGlwL01TXFxud2hpcGNvcmQvTVxcbndoaXBsYXNoL01TXFxud2hpcHBlZFxcbndoaXBwZXIvTVNcXG53aGlwcGVyc25hcHBlci9NU1xcbndoaXBwZXQvTVNcXG53aGlwcGluZy9TTVxcbndoaXBwbGV0cmVlL1NNXFxud2hpcHBvb3J3aWxsL01TXFxud2hpcHNhdy9NREdTXFxud2hpci9NU1xcbndoaXJsL1NNREdcXG53aGlybGlnaWcvTVNcXG53aGlybHBvb2wvTVNcXG53aGlybHdpbmQvTVNcXG53aGlybHliaXJkL1NNXFxud2hpcnJlZFxcbndoaXJyaW5nXFxud2hpc2svU01EUlpHXFxud2hpc2tlci9NRFxcbndoaXNrZXJ5XFxud2hpc2tleS9NU1xcbndoaXNreXNcXG53aGlzcGVyL01EUlNaR1xcbndoaXNwZXJlci9NXFxud2hpc3QvTVxcbndoaXN0bGUvTVpHRFJTXFxud2hpc3RsZXIvTVxcbndoaXQvTUROUlNYVEdKXFxud2hpdGUvU1BNXFxud2hpdGViYWl0XFxud2hpdGVib2FyZC9TXFxud2hpdGVjYXAvU01cXG53aGl0ZWZpc2gvTVNcXG53aGl0ZWhlYWQvTVNcXG53aGl0ZWxpc3QvR0RTXFxud2hpdGVuL1pHRFJKXFxud2hpdGVuZXIvTVxcbndoaXRlbmVzcy9NXFxud2hpdGVuaW5nL01cXG53aGl0ZW91dC9TTVxcbndoaXRldGFpbC9NU1xcbndoaXRld2FsbC9TTVxcbndoaXRld2FzaC9NRFNHXFxud2hpdGV3YXRlci9NXFxud2hpdGV5L1NNXFxud2hpdGhlclxcbndoaXRpbmcvTVxcbndoaXRpc2hcXG53aGl0dGxlL1pHRFJTXFxud2hpdHRsZXIvTVxcbndoaXovTVxcbndoaXpraWQvTVxcbndoaXp6YmFuZy9NU1xcbndoaXp6ZWRcXG53aGl6emVzXFxud2hpenppbmdcXG53aG8nZFxcbndobydsbFxcbndobydyZVxcbndobyd2ZVxcbndoby9NXFxud2hvYVxcbndob2R1bml0L01TXFxud2hvZXZlclxcbndob2xlL1NNUFxcbndob2xlZm9vZC9TXFxud2hvbGVncmFpblxcbndob2xlaGVhcnRlZC9ZUFxcbndob2xlaGVhcnRlZG5lc3MvTVxcbndob2xlbWVhbFxcbndob2xlbmVzcy9NXFxud2hvbGVzYWxlL01aR0RSU1xcbndob2xlc2FsZXIvTVxcbndob2xlc29tZS9VUFxcbndob2xlc29tZWx5XFxud2hvbGVzb21lbmVzcy9VTVxcbndob2xld2hlYXRcXG53aG9sbHlcXG53aG9tXFxud2hvbWV2ZXJcXG53aG9tc29ldmVyXFxud2hvb3AvU01EUlpHXFxud2hvb3BlZS9TXFxud2hvb3Blci9NXFxud2hvb3NoL01EU0dcXG53aG9wL1NcXG53aG9wcGVkXFxud2hvcHBlci9TTVxcbndob3BwaW5nXFxud2hvcmUvU01HXFxud2hvcmVob3VzZS9NU1xcbndob3JlaXNoXFxud2hvcmlzaFxcbndob3JsL1NNRFxcbndob3NlXFxud2hvc29cXG53aG9zb2V2ZXJcXG53aHVwL1NcXG53aHVwcGVkXFxud2h1cHBpbmdcXG53aHknZFxcbndoeS9NXFxud2h5c1xcbndpY2svTURSU1pcXG53aWNrZWQvVFBSWVxcbndpY2tlZG5lc3MvTVxcbndpY2tlci9NXFxud2lja2Vyd29yay9NXFxud2lja2V0L1NNXFxud2lkZS9ZVFJQXFxud2lkZW1vdXRoZWRcXG53aWRlbi9TRFJaR1xcbndpZGVuZXIvTVxcbndpZGVuZXNzL01cXG53aWRlc2NyZWVuL01TXFxud2lkZXNwcmVhZFxcbndpZGdldC9TXFxud2lkb3cvU01EUlpHXFxud2lkb3dlci9NXFxud2lkb3dob29kL01cXG53aWR0aC9NXFxud2lkdGhzXFxud2llbGQvU0RSWkdcXG53aWVsZGVyL01cXG53aWVuZXIvU01cXG53aWVuaWUvU01cXG53aWZlL01ZXFxud2lmZWxlc3NcXG53aWcvU01cXG53aWdlb24vTVxcbndpZ2dlZFxcbndpZ2dpbmdcXG53aWdnbGUvRFJTTVpHXFxud2lnZ2xlci9NXFxud2lnZ2x5L1RSXFxud2lnaHQvU01cXG53aWdsZXQvU01cXG53aWd3YWcvU01cXG53aWd3YWdnZWRcXG53aWd3YWdnaW5nXFxud2lnd2FtL1NNXFxud2lraS9NU1xcbndpbGQvTVJZU1RQXFxud2lsZGNhcmQvTVNcXG53aWxkY2F0L01TXFxud2lsZGNhdHRlZFxcbndpbGRjYXR0ZXIvTVNcXG53aWxkY2F0dGluZ1xcbndpbGRlYmVlc3QvTVNcXG53aWxkZXJuZXNzL01TXFxud2lsZGZpcmUvTVNcXG53aWxkZmxvd2VyL1NNXFxud2lsZGZvd2wvTVxcbndpbGRsaWZlL01cXG53aWxkbmVzcy9NXFxud2lsZHMvTVxcbndpbGUvTUdEU1xcbndpbGluZXNzL01cXG53aWxsL01EU1xcbndpbGxmdWwvUFlcXG53aWxsZnVsbmVzcy9NXFxud2lsbGllcy9NXFxud2lsbGluZy9VUFlcXG53aWxsaW5nbmVzcy9VTVxcbndpbGxpd2F3L01TXFxud2lsbG93L1NNXFxud2lsbG93eVxcbndpbGxwb3dlci9NXFxud2lsbHkvU1xcbndpbHQvTURTR1xcbndpbHkvUlRQXFxud2ltcC9NRFNHXFxud2ltcGlzaFxcbndpbXBsZS9EU01HXFxud2ltcHkvUlRcXG53aW4vU0dNRFxcbndpbmNlL0RTTUdcXG53aW5jaC9NRFNHXFxud2luZCdzXFxud2luZC9VQVNHXFxud2luZGJhZy9TTVxcbndpbmRibG93blxcbndpbmRicmVhay9TWk1SXFxud2luZGJyZWFrZXIvTVxcbndpbmRidXJuL01EXFxud2luZGNoZWF0ZXIvU1xcbndpbmRjaGlsbC9NXFxud2luZGVkXFxud2luZGVyL1NNXFxud2luZGZhbGwvTVNcXG53aW5kZmxvd2VyL01TXFxud2luZGlseVxcbndpbmRpbmVzcy9NXFxud2luZGluZydzXFxud2luZGphbW1lci9TTVxcbndpbmRsYXNzL01TXFxud2luZGxlc3NcXG53aW5kbWlsbC9NREdTXFxud2luZG93L1NNREdcXG53aW5kb3dsZXNzXFxud2luZG93cGFuZS9TTVxcbndpbmRvd3NpbGwvU01cXG53aW5kcGlwZS9NU1xcbndpbmRwcm9vZlxcbndpbmRyb3cvU01cXG53aW5kc2NyZWVuL1NNXFxud2luZHNoaWVsZC9TTVxcbndpbmRzb2NrL01TXFxud2luZHN0b3JtL01TXFxud2luZHN1cmYvWkdEUlNcXG53aW5kc3VyZmVyL01cXG53aW5kc3VyZmluZy9NXFxud2luZHN3ZXB0XFxud2luZHVwL1NNXFxud2luZHdhcmQvTVxcbndpbmR5L1JUUFxcbndpbmUvTVNcXG53aW5lZ2xhc3MvTVNcXG53aW5lZ3Jvd2VyL01TXFxud2luZW1ha2VyL01TXFxud2luZXJ5L1NNXFxud2luZy9NRFJaR1xcbndpbmdkaW5nL01TXFxud2luZ2xlc3NcXG53aW5nbGlrZVxcbndpbmdudXQvU01cXG53aW5nc3Bhbi9NU1xcbndpbmdzcHJlYWQvU01cXG53aW5ndGlwL1NNXFxud2luay9NRFJTWkdcXG53aW5rZXIvTVxcbndpbmtsZS9EU01HXFxud2lubmFibGUvVVxcbndpbm5lci9TTVxcbndpbm5pbmcvTVlTXFxud2lubm93L1pHU0RSXFxud2lubm93ZXIvTVxcbndpbm8vTVNcXG53aW5zb21lL1lUUlBcXG53aW5zb21lbmVzcy9NXFxud2ludGVyL0dTTURcXG53aW50ZXJncmVlbi9NXFxud2ludGVyaXplL0dEU1xcbndpbnRlcnRpbWUvTVxcbndpbnRyeS9UUlxcbndpbnkvUlRcXG53aXBlL01aR0RSU1xcbndpcGVyL01cXG53aXJlJ3NcXG53aXJlL0FHRFNcXG53aXJlZC9TXFxud2lyZWhhaXIvTVNcXG53aXJlbGVzcy9NU1xcbndpcmV0YXAvTVNcXG53aXJldGFwcGVkXFxud2lyZXRhcHBlci9TTVxcbndpcmV0YXBwaW5nL01cXG53aXJpbmVzcy9NXFxud2lyaW5nL01cXG53aXJ5L1JUUFxcbndpc2RvbS9NXFxud2lzZS9NWVRHRFJTXFxud2lzZWFjcmUvU01cXG53aXNlY3JhY2svTURTR1xcbndpc2VndXkvU1xcbndpc2gvTURSU1pHXFxud2lzaGJvbmUvU01cXG53aXNoZXIvTVxcbndpc2hmdWwvWVxcbndpc2hsaXN0J3NcXG53aXNwL01TXFxud2lzcHkvUlRcXG53aXN0XFxud2lzdGVyaWEvU01cXG53aXN0ZnVsL1lQXFxud2lzdGZ1bG5lc3MvTVxcbndpdC9TTVxcbndpdGNoL01EU0dcXG53aXRjaGNyYWZ0L01cXG53aXRjaGVyeS9NXFxud2l0aFxcbndpdGhhbFxcbndpdGhkcmF3L1NHXFxud2l0aGRyYXdhbC9NU1xcbndpdGhkcmF3blxcbndpdGhkcmV3XFxud2l0aGUvRFJTTVpHXFxud2l0aGVyL0pHRFxcbndpdGhlcmluZy9ZXFxud2l0aGVycy9NXFxud2l0aGhlbGRcXG53aXRoaG9sZC9TR1xcbndpdGhob2xkaW5nL01cXG53aXRoaW4vTVxcbndpdGhvdXRcXG53aXRoc3RhbmQvR1NcXG53aXRoc3Rvb2RcXG53aXRsZXNzL1BZXFxud2l0bGVzc25lc3MvTVxcbndpdG5lc3MvTURTR1xcbndpdHMvTVxcbndpdHRlZFxcbndpdHRlci9TR0RcXG53aXR0aWNpc20vU01cXG53aXR0aWx5XFxud2l0dGluZXNzL01cXG53aXR0aW5nL1VZXFxud2l0dHkvUlBUXFxud2l2ZS9HRFNcXG53aXpcXG53aXphcmQvU01ZXFxud2l6YXJkcnkvTVxcbndpemVuZWRcXG53ay9ZXFxud29hZC9NXFxud29iYmxlL01HRFNcXG53b2JibGluZXNzL01cXG53b2JibHkvUlRQXFxud29kZ2UvU1xcbndvZS9TTVxcbndvZWJlZ29uZVxcbndvZWZ1bC9ZUFxcbndvZWZ1bGxlclxcbndvZWZ1bGxlc3RcXG53b2VmdWxuZXNzL01cXG53b2cvU1xcbndvay9TTU5cXG53b2tlXFxud29sZC9NU1xcbndvbGYvTURTR1xcbndvbGZob3VuZC9TTVxcbndvbGZpc2hcXG53b2xmcmFtL01cXG53b2x2ZXJpbmUvU01cXG53b2x2ZXNcXG53b21hbi9NXFxud29tYW5ob29kL01cXG53b21hbmlzaFxcbndvbWFuaXplL0RSU1pHXFxud29tYW5pemVyL01cXG53b21hbmtpbmQvTVxcbndvbWFubGlrZS9NXFxud29tYW5saW5lc3MvTVxcbndvbWFubHkvUlBUXFxud29tYi9NU1xcbndvbWJhdC9NU1xcbndvbWJsZS9TXFxud29tZW4vTVxcbndvbWVuZm9say9TTVxcbndvbWVuZm9sa3MvTVxcbndvbid0XFxud29uL01cXG53b25kZXIvTURHTFNcXG53b25kZXJmdWwvWVBcXG53b25kZXJmdWxuZXNzL01cXG53b25kZXJpbmcvWVxcbndvbmRlcmxhbmQvTVNcXG53b25kZXJtZW50L01cXG53b25kcm91cy9ZXFxud29uay9NU1xcbndvbmt5L1RSXFxud29udC9NRFxcbndvbnRlZC9VXFxud29vL1NaR0RSXFxud29vZC9NRE5TR1xcbndvb2RiaW5lL01cXG53b29kYmxvY2svTVNcXG53b29kY2FydmVyL01TXFxud29vZGNhcnZpbmcvU01cXG53b29kY2h1Y2svTVNcXG53b29kY29jay9TTVxcbndvb2RjcmFmdC9NXFxud29vZGN1dC9TTVxcbndvb2RjdXR0ZXIvU01cXG53b29kY3V0dGluZy9NXFxud29vZGVuL1JZVFBcXG53b29kZW5uZXNzL01cXG53b29kaW5lc3MvTVxcbndvb2RsYW5kL1NNXFxud29vZGxpY2VcXG53b29kbG90L1NNXFxud29vZGxvdXNlXFxud29vZG1hbi9NXFxud29vZG1lblxcbndvb2RwZWNrZXIvTVNcXG53b29kcGlsZS9TTVxcbndvb2RzL01cXG53b29kc2hlZC9TTVxcbndvb2RzaW5lc3MvTVxcbndvb2RzbWFuL01cXG53b29kc21lblxcbndvb2RzeS9SVFBcXG53b29kd2luZC9NU1xcbndvb2R3b3JrL01SWkdcXG53b29kd29ya2VyL01cXG53b29kd29ya2luZy9NXFxud29vZHdvcm0vU1xcbndvb2R5L1RQUlNNXFxud29vZXIvTVxcbndvb2YvTURSU1pHXFxud29vZmVyL01cXG53b29sL01OWFxcbndvb2xlbi9NXFxud29vbGdhdGhlcmluZy9NXFxud29vbGluZXNzXFxud29vbGxpbmVzcy9NXFxud29vbGx5L1JTTVBUXFxud29vemlseVxcbndvb3ppbmVzcy9NXFxud29venkvVFJQXFxud29wL1MhXFxud29yZCdzXFxud29yZC9BRFNHXFxud29yZGFnZS9NXFxud29yZGJvb2svU01cXG53b3JkaWx5XFxud29yZGluZXNzL01cXG53b3JkaW5nL1NNXFxud29yZGxlc3MvWVxcbndvcmRwbGF5L01cXG53b3Jkc21pdGhcXG53b3Jkc21pdGhzXFxud29yZHkvVFBSXFxud29yZVxcbndvcmsnc1xcbndvcmsvQURKU0dcXG53b3JrYWJsZS9VXFxud29ya2FkYXlcXG53b3JrYWhvbGljL1NNXFxud29ya2Fyb3VuZC9TXFxud29ya2Jhc2tldC9TXFxud29ya2JlbmNoL01TXFxud29ya2Jvb2svTVNcXG53b3JrZGF5L1NNXFxud29ya2VyL01TXFxud29ya2ZhcmUvTVxcbndvcmtmbG93L01TXFxud29ya2ZvcmNlL01cXG53b3JraG9yc2UvU01cXG53b3JraG91c2UvU01cXG53b3JraW5nJ3NcXG53b3JraW5nbWFuL01cXG53b3JraW5nbWVuXFxud29ya2luZ3MvTVxcbndvcmtpbmd3b21hbi9NXFxud29ya2luZ3dvbWVuXFxud29ya2xvYWQvTVNcXG53b3JrbWFuL01cXG53b3JrbWFubGlrZVxcbndvcmttYW5zaGlwL01cXG53b3JrbWF0ZS9TXFxud29ya21lblxcbndvcmtvdXQvU01cXG53b3JrcGxhY2UvTVNcXG53b3Jrcm9vbS9NU1xcbndvcmtzL01cXG53b3Jrc2hlZXQvTVNcXG53b3Jrc2hvcC9NU1xcbndvcmtzaHlcXG53b3Jrc2l0ZS9TXFxud29ya3NwYWNlXFxud29ya3N0YXRpb24vTVNcXG53b3JrdGFibGUvTVNcXG53b3JrdG9wL1NcXG53b3JrdXAvTVNcXG53b3Jrd2Vlay9TTVxcbndvcmxkL1NNXFxud29ybGRsaWVyXFxud29ybGRsaW5lc3MvVU1cXG53b3JsZGx5L1VUUFxcbndvcmxkdmlldy9TTVxcbndvcmxkd2lkZVxcbndvcm0vTURTR1xcbndvcm1ob2xlL01TXFxud29ybXdvb2QvTVxcbndvcm15L1RSXFxud29ybi9VXFxud29ycmllZC9ZXFxud29ycmllci9NXFxud29ycmltZW50L01cXG53b3JyaXNvbWVcXG53b3JyeS9aR0RSU01KXFxud29ycnlpbmcvWVxcbndvcnJ5d2FydC9TTVxcbndvcnNlL01cXG53b3JzZW4vRFNHXFxud29yc2hpcC9aR1NNRFJcXG53b3JzaGlwZXIvTVxcbndvcnNoaXBmdWxcXG53b3JzdC9TR01EXFxud29yc3RlZC9NXFxud29ydC9NXFxud29ydGgvTVxcbndvcnRoaWVzXFxud29ydGhpbHkvVVxcbndvcnRoaW5lc3MvVU1cXG53b3J0aGxlc3MvUFlcXG53b3J0aGxlc3NuZXNzL01cXG53b3J0aHdoaWxlXFxud29ydGh5J3NcXG53b3J0aHkvVVBSVFxcbndvdFxcbndvdGNoYVxcbndvdWxkJ3ZlXFxud291bGQvU1xcbndvdWxkbid0XFxud291bGRzdFxcbndvdW5kL1NHTURSXFxud292ZS9BXFxud292ZW4vQVVcXG53b3cvU0dNRFxcbndwbVxcbndyYWNrL0dTTURcXG53cmFpdGgvTVxcbndyYWl0aHNcXG53cmFuZ2xlL0RSU01aR0pcXG53cmFuZ2xlci9NXFxud3JhcCdzXFxud3JhcC9VU1xcbndyYXBhcm91bmQvU01cXG53cmFwcGVkL1VcXG53cmFwcGVyL1NNXFxud3JhcHBpbmcvTVNcXG53cmFzc2UvTVNcXG53cmF0aC9NXFxud3JhdGhmdWwvWVxcbndyZWFrL1NHRFxcbndyZWF0aC9NRFNHXFxud3JlYXRoZVxcbndyZWF0aHNcXG53cmVjay9TWkdNRFJcXG53cmVja2FnZS9NXFxud3JlY2tlci9NXFxud3Jlbi9NU1xcbndyZW5jaC9NRFNHXFxud3Jlc3QvU0dNRFxcbndyZXN0bGUvTVpHRFJTXFxud3Jlc3RsZXIvTVxcbndyZXN0bGluZy9NXFxud3JldGNoL01TXFxud3JldGNoZWQvVFBSWVxcbndyZXRjaGVkbmVzcy9NXFxud3JpZ2dsZS9NWkdEUlNcXG53cmlnZ2xlci9NXFxud3JpZ2dseVxcbndyaWdodC9NU1xcbndyaW5nL1NaR01SXFxud3Jpbmdlci9NXFxud3JpbmtsZS9NR0RTXFxud3JpbmtsZWQvVVxcbndyaW5rbHkvVFJTTVxcbndyaXN0L1NNXFxud3Jpc3RiYW5kL01TXFxud3Jpc3R3YXRjaC9NU1xcbndyaXQvTVJCSlNaR1xcbndyaXRlL1NcXG53cml0ZXIvTVxcbndyaXRoZS9NR0RTXFxud3JpdGluZy9NXFxud3JpdHRlbi9BVVxcbndyb25nL1NUR01QRFJZXFxud3Jvbmdkb2VyL1NNXFxud3Jvbmdkb2luZy9TTVxcbndyb25nZnVsL1BZXFxud3JvbmdmdWxuZXNzL01cXG53cm9uZ2hlYWRlZC9ZUFxcbndyb25naGVhZGVkbmVzcy9NXFxud3JvbmduZXNzL01cXG53cm90ZS9BXFxud3JvdGhcXG53cm91Z2h0XFxud3J1bmdcXG53cnkvWVxcbndyeWVyXFxud3J5ZXN0XFxud3J5bmVzcy9NXFxud3RcXG53dW5kZXJraW5kL1NcXG53dXJzdC9TTVxcbnd1c3MvTVNcXG53dXNzeS9SU01UXFxueFxcbnhjaVxcbnhjaWlcXG54Y2l2XFxueGNpeFxcbnhjdmlcXG54Y3ZpaVxcbnhlbm9uL01cXG54ZW5vcGhvYmUvTVNcXG54ZW5vcGhvYmlhL01cXG54ZW5vcGhvYmljXFxueGVyb2dyYXBoaWNcXG54ZXJvZ3JhcGh5L01cXG54ZXJveC9NRFNHXFxueGkvU01cXG54aWlcXG54aWlpXFxueGl2XFxueGl4XFxueG9yXFxueHJlZi9TXFxueHRlcm0vTVxcbnh2XFxueHZpXFxueHZpaVxcbnh2aWlpXFxueHhcXG54eGlcXG54eGlpXFxueHhpaWlcXG54eGl2XFxueHhpeFxcbnh4dlxcbnh4dmlcXG54eHZpaVxcbnh4dmlpaVxcbnh4eFxcbnh4eGlcXG54eHhpaVxcbnh4eGlpaVxcbnh4eGl2XFxueHh4aXhcXG54eHh2XFxueHh4dmlcXG54eHh2aWlcXG54eHh2aWlpXFxueHlsZW0vTVxcbnh5bGVuZVxcbnh5bG9waG9uZS9TTVxcbnh5bG9waG9uaXN0L01TXFxueSdhbGxcXG55L0ZcXG55YVxcbnlhY2h0L1NNREdcXG55YWNodGluZy9NXFxueWFjaHRzbWFuL01cXG55YWNodHNtZW5cXG55YWNodHN3b21hbi9NXFxueWFjaHRzd29tZW5cXG55YWhvby9TTVxcbnlhay9TTVxcbnlha2tlZFxcbnlha2tpbmdcXG55YW0vU01cXG55YW1tZXIvU1pHTURSXFxueWFtbWVyZXIvTVxcbnlhbmcvTVxcbnlhbmsvTURTR1xcbnlhcC9TTVxcbnlhcHBlZFxcbnlhcHBpbmdcXG55YXJkL01TXFxueWFyZGFnZS9NU1xcbnlhcmRhcm0vTVNcXG55YXJkbWFuL01cXG55YXJkbWFzdGVyL01TXFxueWFyZG1lblxcbnlhcmRzdGljay9NU1xcbnlhcm11bGtlL1NNXFxueWFybi9NU1xcbnlhcnJvdy9NXFxueWFzaG1hay9TXFxueWF3L1NHTURcXG55YXdsL01TXFxueWF3bi9NRFJTWkdcXG55YXduZXIvTVxcbnlhd3MvTVxcbnlkXFxueWUvUlNUXFxueWVhL1NNXFxueWVhaC9NXFxueWVhaHNcXG55ZWFyL01ZU1xcbnllYXJib29rL01TXFxueWVhcmxpbmcvTVNcXG55ZWFybG9uZ1xcbnllYXJseS9TTVxcbnllYXJuL0dTSkRcXG55ZWFybmluZy9NXFxueWVhc3QvU01cXG55ZWFzdHkvUlRcXG55ZWdnL01TXFxueWVsbC9NRFNHXFxueWVsbG93L01EUlRHUFNcXG55ZWxsb3doYW1tZXIvU1xcbnllbGxvd2lzaFxcbnllbGxvd25lc3MvTVxcbnllbGxvd3lcXG55ZWxwL01EU0dcXG55ZW4vU01cXG55ZW9tYW4vTVxcbnllb21hbnJ5L01cXG55ZW9tZW5cXG55ZXAvU01cXG55ZXMvTVNcXG55ZXNoaXZhL1NNXFxueWVzc2VkXFxueWVzc2luZ1xcbnllc3RlcmRheS9NU1xcbnllc3RlcnllYXIvTVxcbnlldFxcbnlldGkvTVNcXG55ZXcvU01cXG55aWQvU1xcbnlpZWxkL0pTR01EXFxueWlrZXNcXG55aW4vTVxcbnlpcC9TTVxcbnlpcGVcXG55aXBwZWRcXG55aXBwZWVcXG55aXBwaW5nXFxueW9cXG55b2IvU1xcbnlvYmJvL1NcXG55b2RlbC9TTURSWkdcXG55b2RlbGVyL01cXG55b2dhL01cXG55b2dpL01TXFxueW9naWNcXG55b2d1cnQvU01cXG55b2tlJ3NcXG55b2tlL1VHRFNcXG55b2tlbC9TTVxcbnlvbGsvTURTXFxueW9uXFxueW9uZGVyXFxueW9ua3NcXG55b3JlL01cXG55b3UnZFxcbnlvdSdsbFxcbnlvdSdyZVxcbnlvdSd2ZVxcbnlvdS9TTUhcXG55b3VuZy9UTVJcXG55b3VuZ2lzaFxcbnlvdW5nc3Rlci9NU1xcbnlvdXIvU1xcbnlvdXJzZWxmXFxueW91cnNlbHZlc1xcbnlvdXRoL01cXG55b3V0aGZ1bC9ZUFxcbnlvdXRoZnVsbmVzcy9NXFxueW91dGhzXFxueW93XFxueW93bC9NRFNHXFxueXIvU1xcbnl0dGVyYml1bS9NXFxueXR0cml1bS9NXFxueXVhbi9NXFxueXVjY2EvU01cXG55dWNrXFxueXVja3kvVFJcXG55dWsvU01cXG55dWtrZWRcXG55dWtraW5nXFxueXVra3lcXG55dWxlL01cXG55dWxldGlkZS9NXFxueXVtXFxueXVtbXkvVFJcXG55dXAvU01cXG55dXBwaWUvTVNcXG55dXBwaWZ5L0dEU1xcbnl1cnQvTVNcXG56L0ROWFRHSlxcbnphbmluZXNzL01cXG56YW55L1JTTVBUXFxuemFwL1NNXFxuemFwcGVkXFxuemFwcGVyL01TXFxuemFwcGluZ1xcbnphcHB5XFxuemVhbC9NXFxuemVhbG90L01TXFxuemVhbG90cnkvTVxcbnplYWxvdXMvWVBcXG56ZWFsb3VzbmVzcy9NXFxuemVicmEvU01cXG56ZWJ1L01TXFxuemVkL1NNXFxuemVpdGdlaXN0L1NNXFxuemVuaXRoL01cXG56ZW5pdGhzXFxuemVubmVkXFxuemVvbGl0ZS9TXFxuemVwaHlyL01TXFxuemVwcGVsaW4vTVNcXG56ZXJvL01ESFNHXFxuemVyb2VzXFxuemVzdC9NU1xcbnplc3RmdWwvWVBcXG56ZXN0ZnVsbmVzcy9NXFxuemVzdHkvUlRcXG56ZXRhL01TXFxuemlnemFnL1NNXFxuemlnemFnZ2VkXFxuemlnemFnZ2luZ1xcbnppbGNoL01cXG56aWxsaW9uL01TXFxuemluYy9NU1xcbnppbmNrZWRcXG56aW5ja2luZ1xcbnppbmUvU1xcbnppbmZhbmRlbC9NXFxuemluZy9NRFJaR1xcbnppbmdlci9NXFxuemluZ3kvUlRcXG56aW5uaWEvTVNcXG56aXAnc1xcbnppcC9VU1xcbnppcHBlZC9VXFxuemlwcGVyL01ER1NcXG56aXBwaW5nL1VcXG56aXBweS9UUlxcbnppcmNvbi9NU1xcbnppcmNvbml1bS9NXFxueml0L1NNXFxueml0aGVyL01TXFxuemxvdHkvU01cXG56bG90eXNcXG56b2RpYWMvTVNcXG56b2RpYWNhbFxcbnpvbWJpZS9NU1xcbnpvbmFsL1lcXG56b25lJ3NcXG56b25lL0FHRFNcXG56b25pbmcvTVxcbnpvbmtlZFxcbnpvby9TTVxcbnpvb2tlZXBlci9TTVxcbnpvb2xvZ2ljYWwvWVxcbnpvb2xvZ2lzdC9TTVxcbnpvb2xvZ3kvTVxcbnpvb20vTURTR1xcbnpvb3BoeXRlL1NNXFxuem9vcGh5dGljXFxuem9vcGxhbmt0b25cXG56b3JjaFxcbnpvc3RlclxcbnpvdW5kc1xcbnp1Y2NoaW5pL01TXFxuendpZWJhY2svTVxcbnp5ZGVjby9NXFxuenlnb3RlL1NNXFxuenlnb3RpY1xcbnp5bXVyZ3kvTVwifSl9LHBlcnNvbmFsOnQuam9pbihcIlxcblwiKSxtYXg6NX07cmV0dXJuIE9uKCkudXNlKFNhKS51c2UoR2EsbykudXNlKGNlKS51c2UoaWUpLnVzZSh5YSx7aWdub3JlOltcImRpc2FibGVkXCIsXCJob3N0XCIsXCJob3N0c1wiLFwiaW52YWxpZFwiLFwianVzdFwiXX0pLnVzZShrYSkudXNlKENhKS51c2UoVGEpLnVzZShqZSx7YWdlOjE5fSkudXNlKFhlKS51c2Uob2EpLnVzZShKbikucHJvY2VzcyhuKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gbn0pKX1mdW5jdGlvbiBMYShlKXt2YXIgYSxpPVphKCgwLG4udXNlU3RhdGUpKHt9KSwyKSxyPWlbMF0sdD1pWzFdLG89WmEoKDAsbi51c2VTdGF0ZSkoW10pLDIpLE09b1swXSxzPW9bMV0sbD1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGM9bFswXSxTPWxbMV0sdT1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGQ9dVswXSxtPXVbMV0scD1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGg9cFswXSxnPXBbMV0seT1aYSgoMCxuLnVzZVN0YXRlKSgwKSwyKSxiPXlbMF0sRD15WzFdLEc9ZS5zYW1wbGVUZXh0LHc9ZS5zZXRTYW1wbGVUZXh0LHY9ZS51cGRhdGVUaW1lcixrPXZvaWQgMD09PXY/MzAwOnYsUj1lLnBsYWNlaG9sZGVyLFk9dm9pZCAwPT09Uj9cIlByb3ZpZGUgc29tZSB0ZXh0IHRvIGdldCBzdGFydGVkXCI6UixBPWUuY3VzdG9tRGljdGlvbmFyeSxQPWUuYWRkVG9EaWN0aW9uYXJ5LEM9ZS5vcGVuTGlua3NJbk5ld1RhYixUPXZvaWQgMCE9PUMmJkM7KDAsbi51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBTKHNldFRpbWVvdXQoTmEocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLnQwPXQsbi5uZXh0PTMsamEoRyxBKTtjYXNlIDM6bi50MT1uLnNlbnQsKDAsbi50MCkobi50MSk7Y2FzZSA1OmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksaykpLGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dChjKX19KSxbR10pLCgwLG4udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZyghMCksbShzZXRUaW1lb3V0KE5hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpnKCExKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4pfSkpKSw0ZTMpKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoZCl9fSksW0ddKTt2YXIgeCx6LEUsQixOPWZ1bmN0aW9uKG4pe3ZhciBlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3phKE9iamVjdChhKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7RWEobixlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOnphKE9iamVjdChhKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSkpfSkpfXJldHVybiBufSh7fSxyKTtlLm1lc3NhZ2VzPXIubWVzc2FnZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT09bn0pKSx0KGUpO3ZhciBhPUZhKE0pO2EucHVzaChuKSxzKGEpfSxaPWZ1bmN0aW9uKCl7dmFyIG4sZT0obnVsbD09cnx8bnVsbD09PShuPXIubWVzc2FnZXMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlbmd0aCk+MCxhPSExO2lmKGUpcmV0dXJuIHIubWVzc2FnZXMuZm9yRWFjaCgoZnVuY3Rpb24obil7TS5zb21lKChmdW5jdGlvbihlKXtuLm5hbWUsYT0hMH0pKX0pKSxhfSxGPWZ1bmN0aW9uKG4sZSl7dmFyIGE7aWYobnVsbD09PShhPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSl7dmFyIGk9SlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSk7aS5wdXNoKG4pLHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeVwiLEpTT04uc3RyaW5naWZ5KGkpKX1lbHNlIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeVwiLEpTT04uc3RyaW5naWZ5KFtuXSkpO04oZSl9O3JldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFooKSwobnVsbD09cnx8bnVsbD09PShhPXIubWVzc2FnZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCk+MD9uLmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWxpc3RcIn0sKG51bGw9PXJ8fG51bGw9PT0oQj1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09Qj92b2lkIDA6Qi5sZW5ndGgpPjA/ci5tZXNzYWdlcy5tYXAoKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChmLHtrZXk6YSxzdWdnZXN0aW9uOmUsc291cmNlVGV4dDpyLnZhbHVlLHNhbXBsZVRleHQ6RyxzZXRTYW1wbGVUZXh0OncscmVtb3ZlU3VnZ2VzdGlvbjpOLGRpc21pc3NlZFN1Z2dlc3Rpb25zOk0saXNBY3RpdmU6YT09PWIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtEKG4pfShhKX0sYWRkVG9EaWN0aW9uYXJ5OlB8fEYsb3BlbkxpbmtzSW5OZXdUYWI6VH0pfSkpOm4uY3JlYXRlRWxlbWVudChcImg0XCIsbnVsbCxcIk5vIHN1Z2dlc3Rpb25zIHRvIHNob3cuLi5cIikpOm4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZVwifSwoej1cIlwiIT09RyxFPShudWxsPT1yfHxudWxsPT09KHg9ci5tZXNzYWdlcyl8fHZvaWQgMD09PXg/dm9pZCAwOngubGVuZ3RoKT4wLHo/aD9uLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7Y2xhc3NOYW1lOlwibG9hZGluZy1zcGlubmVyXCIsc3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQQ0V0TFNCQ2VTQlRZVzBnU0dWeVltVnlkQ0FvUUhOb1pYSmlLU3dnWm05eUlHVjJaWEo1YjI1bExpQk5iM0psSUVBZ2FIUjBjRG92TDJkdmJ5NW5iQzgzUVVwNllrd2dMUzArQ2p4emRtY2dkMmxrZEdnOUlqTTRJaUJvWldsbmFIUTlJak00SWlCMmFXVjNRbTk0UFNJd0lEQWdNemdnTXpnaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NpQWdJQ0E4WkdWbWN6NEtJQ0FnSUNBZ0lDQThiR2x1WldGeVIzSmhaR2xsYm5RZ2VERTlJamd1TURReUpTSWdlVEU5SWpBbElpQjRNajBpTmpVdU5qZ3lKU0lnZVRJOUlqSXpMamcyTlNVaUlHbGtQU0poSWo0S0lDQWdJQ0FnSUNBZ0lDQWdQSE4wYjNBZ2MzUnZjQzFqYjJ4dmNqMGlJemt5T1dGaE1TSWdjM1J2Y0MxdmNHRmphWFI1UFNJd0lpQnZabVp6WlhROUlqQWxJaTgrQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHpkRzl3SUhOMGIzQXRZMjlzYjNJOUlpTTVNamxoWVRFaUlITjBiM0F0YjNCaFkybDBlVDBpTGpZek1TSWdiMlptYzJWMFBTSTJNeTR4TkRZbElpOCtDaUFnSUNBZ0lDQWdJQ0FnSUR4emRHOXdJSE4wYjNBdFkyOXNiM0k5SWlNNU1qbGhZVEVpSUc5bVpuTmxkRDBpTVRBd0pTSXZQZ29nSUNBZ0lDQWdJRHd2YkdsdVpXRnlSM0poWkdsbGJuUStDaUFnSUNBOEwyUmxabk0rQ2lBZ0lDQThaeUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBnb2dJQ0FnSUNBZ0lEeG5JSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RFZ01Ta2lQZ29nSUNBZ0lDQWdJQ0FnSUNBOGNHRjBhQ0JrUFNKTk16WWdNVGhqTUMwNUxqazBMVGd1TURZdE1UZ3RNVGd0TVRnaUlHbGtQU0pQZG1Gc0xUSWlJSE4wY205clpUMGlkWEpzS0NOaEtTSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeGhibWx0WVhSbFZISmhibk5tYjNKdENpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZWFIwY21saWRYUmxUbUZ0WlQwaWRISmhibk5tYjNKdElnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVOUluSnZkR0YwWlNJS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1jbTl0UFNJd0lERTRJREU0SWdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnZQU0l6TmpBZ01UZ2dNVGdpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlQU0l3TGpWeklnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUNBZ0lDQWdJQ0FnSUNBOEwzQmhkR2crQ2lBZ0lDQWdJQ0FnSUNBZ0lEeGphWEpqYkdVZ1ptbHNiRDBpSTJabVppSWdZM2c5SWpNMklpQmplVDBpTVRnaUlISTlJakVpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdGdWFXMWhkR1ZVY21GdWMyWnZjbTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGRIUnlhV0oxZEdWT1lXMWxQU0owY21GdWMyWnZjbTBpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVDBpY205MFlYUmxJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaeWIyMDlJakFnTVRnZ01UZ2lDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEc4OUlqTTJNQ0F4T0NBeE9DSUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZFhJOUlqQXVOWE1pQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVndaV0YwUTI5MWJuUTlJbWx1WkdWbWFXNXBkR1VpSUM4K0NpQWdJQ0FnSUNBZ0lDQWdJRHd2WTJseVkyeGxQZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcImxvYWRpbmcuLi5cIn0pOnomJiFFfHxaKCkmJno/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxuLmNyZWF0ZUVsZW1lbnQoXCJoM1wiLHtjbGFzc05hbWU6XCJlbXB0eS1zdGF0ZS1oZWFkaW5nXCJ9LFwiTm8gaXNzdWVzIGZvdW5kXCIpLG4uY3JlYXRlRWxlbWVudChcInBcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtZGVzY3JpcHRpb25cIn0sXCJXZSByYW4gc2V2ZXJhbCBjaGVja3Mgb24geW91ciB0ZXh0IGFuZCBmb3VuZCBubyB3cml0aW5nIGlzc3Vlcy4gVGhpbmsgd2UgbWlzc2VkIHNvbWV0aGluZz8gXCIsXCIgXCIsbi5jcmVhdGVFbGVtZW50KFwiYVwiLHtocmVmOlwiaHR0cHM6Ly9uZXdyZWxpYy5zbGFjay5jb20vYXJjaGl2ZXMvQzAxQTc2UDNEUFVcIix0YXJnZXQ6VD9cIl9ibGFua1wiOlwiX3NlbGZcIn0sXCJMZXQgdXMga25vd1wiKSxcIi5cIikpOnZvaWQgMDpuLmNyZWF0ZUVsZW1lbnQoXCJoM1wiLHtjbGFzc05hbWU6XCJlbXB0eS1zdGF0ZS1oZWFkaW5nXCJ9LFkpKSkpfUxhLnByb3BUeXBlcz17c2FtcGxlVGV4dDpyKCkuc3RyaW5nLHBsYWNlaG9sZGVyOnIoKS5zdHJpbmcsc2V0U2FtcGxlVGV4dDpyKCkuZnVuYyx1cGRhdGVUaW1lcjpyKCkubnVtYmVyLGN1c3RvbURpY3Rpb25hcnk6cigpLmFycmF5LGFkZFRvRGljdGlvbmFyeTpyKCkuZnVuYyxvcGVuTGlua3NJbk5ld1RhYjpyKCkuYm9vbH07Y29uc3QgcWE9TGF9KSgpLG1vZHVsZS5leHBvcnRzPWl9KSgpOyIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBudW1iZXJJc05hTiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpcyhhLCBiKSB7XG5cdGlmIChhID09PSAwICYmIGIgPT09IDApIHtcblx0XHRyZXR1cm4gMSAvIGEgPT09IDEgLyBiO1xuXHR9XG5cdGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKG51bWJlcklzTmFOKGEpICYmIG51bWJlcklzTmFOKGIpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZChnZXRQb2x5ZmlsbCgpLCBPYmplY3QpO1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltT2JqZWN0SXMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShPYmplY3QsIHsgaXM6IHBvbHlmaWxsIH0sIHtcblx0XHRpczogZnVuY3Rpb24gdGVzdE9iamVjdElzKCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5pcyAhPT0gcG9seWZpbGw7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7XG5cbnZhciBvcmlnS2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGtleXNTaGltID0gb3JpZ0tleXMgPyBmdW5jdGlvbiBrZXlzKG8pIHsgcmV0dXJuIG9yaWdLZXlzKG8pOyB9IDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgb3JpZ2luYWxLZXlzID0gT2JqZWN0LmtleXM7XG5cbmtleXNTaGltLnNoaW0gPSBmdW5jdGlvbiBzaGltT2JqZWN0S2V5cygpIHtcblx0aWYgKE9iamVjdC5rZXlzKSB7XG5cdFx0dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gU2FmYXJpIDUuMCBidWdcblx0XHRcdHZhciBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBhcmdzICYmIGFyZ3MubGVuZ3RoID09PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdH0oMSwgMikpO1xuXHRcdGlmICgha2V5c1dvcmtzV2l0aEFyZ3VtZW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuXHRcdFx0XHRpZiAoaXNBcmdzKG9iamVjdCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKHNsaWNlLmNhbGwob2JqZWN0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhvYmplY3QpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMgPSBrZXlzU2hpbTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmtleXMgfHwga2V5c1NoaW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIG1vZGlmaWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNi1zaGltXG52YXIga2V5cyA9IHJlcXVpcmUoJ29iamVjdC1rZXlzJyk7XG52YXIgY2FuQmVPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdHJldHVybiB0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJyAmJiBvYmogIT09IG51bGw7XG59O1xudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scy9zaGFtcycpKCk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIHRvT2JqZWN0ID0gT2JqZWN0O1xudmFyICRwdXNoID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUucHVzaCcpO1xudmFyICRwcm9wSXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgb3JpZ2luYWxHZXRTeW1ib2xzID0gaGFzU3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgOiBudWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlMSkge1xuXHRpZiAoIWNhbkJlT2JqZWN0KHRhcmdldCkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7IH1cblx0dmFyIG9ialRhcmdldCA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzLCBzb3VyY2UsIGksIHByb3BzLCBzeW1zLCB2YWx1ZSwga2V5O1xuXHRmb3IgKHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgKytzKSB7XG5cdFx0c291cmNlID0gdG9PYmplY3QoYXJndW1lbnRzW3NdKTtcblx0XHRwcm9wcyA9IGtleXMoc291cmNlKTtcblx0XHR2YXIgZ2V0U3ltYm9scyA9IGhhc1N5bWJvbHMgJiYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgfHwgb3JpZ2luYWxHZXRTeW1ib2xzKTtcblx0XHRpZiAoZ2V0U3ltYm9scykge1xuXHRcdFx0c3ltcyA9IGdldFN5bWJvbHMoc291cmNlKTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBzeW1zLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGtleSA9IHN5bXNbaV07XG5cdFx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0XHQkcHVzaChwcm9wcywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdGtleSA9IHByb3BzW2ldO1xuXHRcdFx0dmFsdWUgPSBzb3VyY2Vba2V5XTtcblx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0b2JqVGFyZ2V0W2tleV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9ialRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZC5hcHBseShnZXRQb2x5ZmlsbCgpKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xudmFyIGJvdW5kID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlMSkge1xuXHRyZXR1cm4gcG9seWZpbGwoT2JqZWN0LCBhcmd1bWVudHMpO1xufTtcblxuZGVmaW5lUHJvcGVydGllcyhib3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlciA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIHY4LCBzcGVjaWZpY2FsbHkgaW4gbm9kZSA0LngsIGhhcyBhIGJ1ZyB3aXRoIGluY29ycmVjdCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlclxuXHQgKiBub3RlOiB0aGlzIGRvZXMgbm90IGRldGVjdCB0aGUgYnVnIHVubGVzcyB0aGVyZSdzIDIwIGNoYXJhY3RlcnNcblx0ICovXG5cdHZhciBzdHIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuXHR2YXIgbGV0dGVycyA9IHN0ci5zcGxpdCgnJyk7XG5cdHZhciBtYXAgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWFwW2xldHRlcnNbaV1dID0gbGV0dGVyc1tpXTtcblx0fVxuXHR2YXIgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwKTtcblx0dmFyIGFjdHVhbCA9ICcnO1xuXHRmb3IgKHZhciBrIGluIG9iaikge1xuXHRcdGFjdHVhbCArPSBrO1xuXHR9XG5cdHJldHVybiBzdHIgIT09IGFjdHVhbDtcbn07XG5cbnZhciBhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduIHx8ICFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Lypcblx0ICogRmlyZWZveCAzNyBzdGlsbCBoYXMgXCJwZW5kaW5nIGV4Y2VwdGlvblwiIGxvZ2ljIGluIGl0cyBPYmplY3QuYXNzaWduIGltcGxlbWVudGF0aW9uLFxuXHQgKiB3aGljaCBpcyA3MiUgc2xvd2VyIHRoYW4gb3VyIHNoaW0sIGFuZCBGaXJlZm94IDQwJ3MgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxuXHQgKi9cblx0dmFyIHRocm93ZXIgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoeyAxOiAyIH0pO1xuXHR0cnkge1xuXHRcdE9iamVjdC5hc3NpZ24odGhyb3dlciwgJ3h5Jyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gdGhyb3dlclsxXSA9PT0gJ3knO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBpbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRpZiAobGFja3NQcm9wZXJFbnVtZXJhdGlvbk9yZGVyKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGFzc2lnbkhhc1BlbmRpbmdFeGNlcHRpb25zKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0cmV0dXJuIE9iamVjdC5hc3NpZ247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltQXNzaWduKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0T2JqZWN0LFxuXHRcdHsgYXNzaWduOiBwb2x5ZmlsbCB9LFxuXHRcdHsgYXNzaWduOiBmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuYXNzaWduICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcbnZhciAkcHVzaCA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnB1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbnRyaWVzKE8pIHtcblx0dmFyIG9iaiA9IFJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG5cdHZhciBlbnRyeXMgPSBbXTtcblx0Zm9yICh2YXIga2V5IGluIG9iaikge1xuXHRcdGlmICgkaXNFbnVtZXJhYmxlKG9iaiwga2V5KSkgeyAvLyBjaGVja3Mgb3duLW5lc3MgYXMgd2VsbFxuXHRcdFx0JHB1c2goZW50cnlzLCBba2V5LCBvYmpba2V5XV0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC5lbnRyaWVzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmVudHJpZXMgOiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1FbnRyaWVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IGVudHJpZXM6IHBvbHlmaWxsIH0sIHtcblx0XHRlbnRyaWVzOiBmdW5jdGlvbiB0ZXN0RW50cmllcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QuZW50cmllcyAhPT0gcG9seWZpbGw7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG5cbnZhciAkaXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgJHB1c2ggPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsdWVzKE8pIHtcblx0dmFyIG9iaiA9IFJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG5cdHZhciB2YWxzID0gW107XG5cdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRpZiAoJGlzRW51bWVyYWJsZShvYmosIGtleSkpIHsgLy8gY2hlY2tzIG93bi1uZXNzIGFzIHdlbGxcblx0XHRcdCRwdXNoKHZhbHMsIG9ialtrZXldKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZChnZXRQb2x5ZmlsbCgpLCBPYmplY3QpO1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiB0eXBlb2YgT2JqZWN0LnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC52YWx1ZXMgOiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1WYWx1ZXMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShPYmplY3QsIHsgdmFsdWVzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0dmFsdWVzOiBmdW5jdGlvbiB0ZXN0VmFsdWVzKCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC52YWx1ZXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGlzUGxhaW5PYmplY3Q7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHgpIHtcbiAgcmV0dXJuIHggJiYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih4KSkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1BsYWluT2JqZWN0LmpzLm1hcCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzWydkZWZhdWx0J10gPSBmb3JiaWRFeHRyYVByb3BzO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoJ29iamVjdC5hc3NpZ24nKTtcblxudmFyIF9vYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb2JqZWN0KTtcblxudmFyIF9oYXMgPSByZXF1aXJlKCdoYXMnKTtcblxudmFyIF9oYXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFzKTtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUGxhaW5PYmplY3QnKTtcblxudmFyIF9pc1BsYWluT2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzUGxhaW5PYmplY3QpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBCJztcbnZhciBzcGVjaWFsUHJvcGVydHkgPSAncHJvcC10eXBlcy1leGFjdDogJyArIHplcm9XaWR0aFNwYWNlO1xudmFyIHNlbWFwaG9yZSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbFsnZm9yJ10gPT09ICdmdW5jdGlvbicgPyBTeW1ib2xbJ2ZvciddKHNwZWNpYWxQcm9wZXJ0eSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NwZWNpYWxQcm9wZXJ0eTtcblxuZnVuY3Rpb24gYnJhbmQoZm4pIHtcbiAgcmV0dXJuICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShmbiwgX2RlZmluZVByb3BlcnR5KHt9LCBzcGVjaWFsUHJvcGVydHksIHNlbWFwaG9yZSkpO1xufVxuXG5mdW5jdGlvbiBpc0JyYW5kZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW3NwZWNpYWxQcm9wZXJ0eV0gPT09IHNlbWFwaG9yZTtcbn1cblxuZnVuY3Rpb24gZm9yYmlkRXh0cmFQcm9wcyhwcm9wVHlwZXMpIHtcbiAgaWYgKCEoMCwgX2lzUGxhaW5PYmplY3QyWydkZWZhdWx0J10pKHByb3BUeXBlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnaXZlbiBwcm9wVHlwZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuICBpZiAoKDAsIF9oYXMyWydkZWZhdWx0J10pKHByb3BUeXBlcywgc3BlY2lhbFByb3BlcnR5KSAmJiAhaXNCcmFuZGVkKHByb3BUeXBlc1tzcGVjaWFsUHJvcGVydHldKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FnYWluc3QgYWxsIG9kZHMsIHlvdSBjcmVhdGVkIGEgcHJvcFR5cGUgZm9yIGEgcHJvcCB0aGF0IHVzZXMgYm90aCB0aGUgemVyby13aWR0aCBzcGFjZSBhbmQgb3VyIGN1c3RvbSBzdHJpbmcgLSB3aGljaCwgc2FkbHksIGNvbmZsaWN0cyB3aXRoIGBwcm9wLXR5cGVzLWV4YWN0YCcpO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKSh7fSwgcHJvcFR5cGVzLCBfZGVmaW5lUHJvcGVydHkoe30sIHNwZWNpYWxQcm9wZXJ0eSwgYnJhbmQoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGZvcmJpZFVua25vd25Qcm9wcyhwcm9wcywgXywgY29tcG9uZW50TmFtZSkge1xuICAgICAgdmFyIHVua25vd25Qcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuICEoMCwgX2hhczJbJ2RlZmF1bHQnXSkocHJvcFR5cGVzLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFN0cmluZyhjb21wb25lbnROYW1lKSArICc6IHVua25vd24gcHJvcHMgZm91bmQ6ICcgKyBTdHJpbmcodW5rbm93blByb3BzLmpvaW4oJywgJykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JiaWRVbmtub3duUHJvcHM7XG4gIH0oKSkpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBTY2hlZHVsZXIgPSByZXF1aXJlKCdzY2hlZHVsZXInKTtcbnZhciB0cmFjaW5nID0gcmVxdWlyZSgnc2NoZWR1bGVyL3RyYWNpbmcnKTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG5pZiAoIVJlYWN0KSB7XG4gIHtcbiAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTSB3YXMgbG9hZGVkIGJlZm9yZSBSZWFjdC4gTWFrZSBzdXJlIHlvdSBsb2FkIHRoZSBSZWFjdCBwYWNrYWdlIGJlZm9yZSBsb2FkaW5nIFJlYWN0RE9NLlwiICk7XG4gIH1cbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxudmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbnZhciBIb3N0UG9ydGFsID0gNDsgLy8gQSBzdWJ0cmVlLiBDb3VsZCBiZSBhbiBlbnRyeSBwb2ludCB0byBhIGRpZmZlcmVudCByZW5kZXJlci5cblxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xudmFyIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IDE5O1xudmFyIEZ1bmRhbWVudGFsQ29tcG9uZW50ID0gMjA7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbnZhciBCbG9jayA9IDIyO1xudmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIzO1xudmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDI0O1xuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVGdW5kYW1lbnRhbEFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgU2NvcGUgc3VwcG9ydC5cbnZhciBlbmFibGVOZXdSZWNvbmNpbGVyID0gZmFsc2U7IC8vIEVycm9ycyB0aGF0IGFyZSB0aHJvd24gd2hpbGUgdW5tb3VudGluZyAob3IgYWZ0ZXIgaW4gdGhlIGNhc2Ugb2YgcGFzc2l2ZSBlZmZlY3RzKVxudmFyIHdhcm5BYm91dFN0cmluZ1JlZnMgPSBmYWxzZTtcblxudmFyIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKTtcbi8qKlxuICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAqL1xuXG5cbnZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9ICB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwOyAvLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsdGVyIGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cblxudmFyIFNUUklORyA9IDE7IC8vIEEgc3RyaW5nIGF0dHJpYnV0ZSB0aGF0IGFjY2VwdHMgYm9vbGVhbnMgaW4gUmVhY3QuIEluIEhUTUwsIHRoZXNlIGFyZSBjYWxsZWRcbi8vIFwiZW51bWVyYXRlZFwiIGF0dHJpYnV0ZXMgd2l0aCBcInRydWVcIiBhbmQgXCJmYWxzZVwiIGFzIHBvc3NpYmxlIHZhbHVlcy5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwidHJ1ZVwiIHN0cmluZy5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcImZhbHNlXCIgc3RyaW5nLlxuXG52YXIgQk9PTEVBTklTSF9TVFJJTkcgPSAyOyAvLyBBIHJlYWwgYm9vbGVhbiBhdHRyaWJ1dGUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cblxudmFyIEJPT0xFQU4gPSAzOyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cblxudmFyIE9WRVJMT0FERURfQk9PTEVBTiA9IDQ7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIE5VTUVSSUMgPSA1OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSBcIjpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG52YXIgQVRUUklCVVRFX05BTUVfQ0hBUiA9IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyBcIlxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG52YXIgUk9PVF9BVFRSSUJVVEVfTkFNRSA9ICdkYXRhLXJlYWN0cm9vdCc7XG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXG4gIHtcbiAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcblxuICAgIHN3aXRjaCAocHJvcGVydHlJbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcblxuICAgICAgY2FzZSBPVkVSTE9BREVEX0JPT0xFQU46XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICAgIGNhc2UgTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKTtcblxuICAgICAgY2FzZSBQT1NJVElWRV9OVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUluZm8obmFtZSkge1xuICByZXR1cm4gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgdHlwZSwgbXVzdFVzZVByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lc3BhY2UsIHNhbml0aXplVVJMLCByZW1vdmVFbXB0eVN0cmluZykge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zYW5pdGl6ZVVSTCA9IHNhbml0aXplVVJMO1xuICB0aGlzLnJlbW92ZUVtcHR5U3RyaW5nID0gcmVtb3ZlRW1wdHlTdHJpbmc7XG59IC8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhpcyBsaXN0LCBiZSBzdXJlIHRvIGFsc28gYWRkIHRoZW0gdG9cbi8vIHRoZSBgcG9zc2libGVTdGFuZGFyZE5hbWVzYCBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0XG4vLyBuYW1lIHdhcm5pbmdzLlxuXG5cbnZhciBwcm9wZXJ0aWVzID0ge307IC8vIFRoZXNlIHByb3BzIGFyZSByZXNlcnZlZCBieSBSZWFjdC4gVGhleSBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxuXG52YXIgcmVzZXJ2ZWRQcm9wcyA9IFsnY2hpbGRyZW4nLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLCAvLyBUT0RPOiBUaGlzIHByZXZlbnRzIHRoZSBhc3NpZ25tZW50IG9mIGRlZmF1bHRWYWx1ZSB0byByZWd1bGFyXG4vLyBlbGVtZW50cyAobm90IGp1c3QgaW5wdXRzKS4gTm93IHRoYXQgUmVhY3RET01JbnB1dCBhc3NpZ25zIHRvIHRoZVxuLy8gZGVmYXVsdFZhbHVlIHByb3BlcnR5IC0tIGRvIHdlIG5lZWQgdGhpcz9cbidkZWZhdWx0VmFsdWUnLCAnZGVmYXVsdENoZWNrZWQnLCAnaW5uZXJIVE1MJywgJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLCAnc3R5bGUnXTtcbnJlc2VydmVkUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBSRVNFUlZFRCwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuXG5bWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnY2xhc3NOYW1lJywgJ2NsYXNzJ10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZlswXSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUgPSBfcmVmWzFdO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuXG5bJ2NvbnRlbnRFZGl0YWJsZScsICdkcmFnZ2FibGUnLCAnc3BlbGxDaGVjaycsICd2YWx1ZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBTVkcgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cbi8vIFNpbmNlIHRoZXNlIGFyZSBTVkcgYXR0cmlidXRlcywgdGhlaXIgYXR0cmlidXRlIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cblxuWydhdXRvUmV2ZXJzZScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZvY3VzYWJsZScsICdwcmVzZXJ2ZUFscGhhJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcy5cblxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLCAvLyBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgd3JpdHRlbiB0byB0aGUgRE9NXG4vLyBvbiB0aGUgY2xpZW50IHNpZGUgYmVjYXVzZSB0aGUgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudC4gSW5zdGVhZCB3ZSBjYWxsIGZvY3VzKCkuXG4nYXV0b0ZvY3VzJywgJ2F1dG9QbGF5JywgJ2NvbnRyb2xzJywgJ2RlZmF1bHQnLCAnZGVmZXInLCAnZGlzYWJsZWQnLCAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLCAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJywgJ2Zvcm1Ob1ZhbGlkYXRlJywgJ2hpZGRlbicsICdsb29wJywgJ25vTW9kdWxlJywgJ25vVmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c0lubGluZScsICdyZWFkT25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzY29wZWQnLCAnc2VhbWxlc3MnLCAvLyBNaWNyb2RhdGFcbidpdGVtU2NvcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSB0aGUgZmV3IFJlYWN0IHByb3BzIHRoYXQgd2Ugc2V0IGFzIERPTSBwcm9wZXJ0aWVzXG4vLyByYXRoZXIgdGhhbiBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW5zLlxuXG5bJ2NoZWNrZWQnLCAvLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC4gV2UgaGF2ZSBzcGVjaWFsIGxvZ2ljIGZvciBoYW5kbGluZyB0aGlzLlxuJ211bHRpcGxlJywgJ211dGVkJywgJ3NlbGVjdGVkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCB0cnVlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblxuWydjYXB0dXJlJywgJ2Rvd25sb2FkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBPVkVSTE9BREVEX0JPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJzLlxuXG5bJ2NvbHMnLCAncm93cycsICdzaXplJywgJ3NwYW4nIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFBPU0lUSVZFX05VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBudW1iZXJzLlxuXG5bJ3Jvd1NwYW4nLCAnc3RhcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE5VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7XG52YXIgQ0FNRUxJWkUgPSAvW1xcLVxcOl0oW2Etel0pL2c7XG5cbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTsgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgYXR0cmlidXRlIGZpbHRlci5cbi8vIFNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gYmUgaGFyZCB0byBmaW5kLiBUaGlzIGxpc3Qgd2FzIGNyZWF0ZWQgYnlcbi8vIHNjcmFwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblxuXG5bJ2FjY2VudC1oZWlnaHQnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FyYWJpYy1mb3JtJywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2NhcC1oZWlnaHQnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdkb21pbmFudC1iYXNlbGluZScsICdlbmFibGUtYmFja2dyb3VuZCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2dseXBoLW5hbWUnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdob3Jpei1hZHYteCcsICdob3Jpei1vcmlnaW4teCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnbGV0dGVyLXNwYWNpbmcnLCAnbGlnaHRpbmctY29sb3InLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFpbnQtb3JkZXInLCAncGFub3NlLTEnLCAncG9pbnRlci1ldmVudHMnLCAncmVuZGVyaW5nLWludGVudCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2Utd2lkdGgnLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtYmlkaScsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAndmVjdG9yLWVmZmVjdCcsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3b3JkLXNwYWNpbmcnLCAnd3JpdGluZy1tb2RlJywgJ3htbG5zOnhsaW5rJywgJ3gtaGVpZ2h0JyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeGxpbmsgbmFtZXNwYWNlLlxuXG5bJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bWwgbmFtZXNwYWNlLlxuXG5bJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlIGV4aXN0cyBib3RoIGluIEhUTUwgYW5kIFNWRy5cbi8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZSBpbiBTVkcgc28gd2UgY2FuJ3QganVzdCB1c2Vcbi8vIHRoZSBSZWFjdCBuYW1lIGxpa2Ugd2UgZG8gZm9yIGF0dHJpYnV0ZXMgdGhhdCBleGlzdCBvbmx5IGluIEhUTUwuXG5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlcyBhY2NlcHQgVVJMcy4gVGhlc2UgbXVzdCBub3QgYWxsb3cgamF2YXNjcmlwdDogVVJMUy5cbi8vIFRoZXNlIHdpbGwgYWxzbyBuZWVkIHRvIGFjY2VwdCBUcnVzdGVkIFR5cGVzIG9iamVjdCBpbiB0aGUgZnV0dXJlLlxuXG52YXIgeGxpbmtIcmVmID0gJ3hsaW5rSHJlZic7XG5wcm9wZXJ0aWVzW3hsaW5rSHJlZl0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKCd4bGlua0hyZWYnLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbid4bGluazpocmVmJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuZmFsc2UpO1xuWydzcmMnLCAnaHJlZicsICdhY3Rpb24nLCAnZm9ybUFjdGlvbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbiAgdHJ1ZSk7XG59KTtcblxuLy8gYW5kIGFueSBuZXdsaW5lIG9yIHRhYiBhcmUgZmlsdGVyZWQgb3V0IGFzIGlmIHRoZXkncmUgbm90IHBhcnQgb2YgdGhlIFVSTC5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbi8vIFRhYiBvciBuZXdsaW5lIGFyZSBkZWZpbmVkIGFzIFxcclxcblxcdDpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS10YWItb3ItbmV3bGluZVxuLy8gQSBDMCBjb250cm9sIGlzIGEgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UgXFx1MDAwMCBOVUxMIHRvIFxcdTAwMUZcbi8vIElORk9STUFUSU9OIFNFUEFSQVRPUiBPTkUsIGluY2x1c2l2ZTpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjMC1jb250cm9sLW9yLXNwYWNlXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxudmFyIGlzSmF2YVNjcmlwdFByb3RvY29sID0gL15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKlxcOi9pO1xudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gIHtcbiAgICBpZiAoIWRpZFdhcm4gJiYgaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdCh1cmwpKSB7XG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ0EgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3Qgd2lsbCBibG9jayBqYXZhc2NyaXB0OiBVUkxzIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4gJyArICdVc2UgZXZlbnQgaGFuZGxlcnMgaW5zdGVhZCBpZiB5b3UgY2FuLiBJZiB5b3UgbmVlZCB0byBnZW5lcmF0ZSB1bnNhZmUgSFRNTCB0cnkgJyArICd1c2luZyBkYW5nZXJvdXNseVNldElubmVySFRNTCBpbnN0ZWFkLiBSZWFjdCB3YXMgcGFzc2VkICVzLicsIEpTT04uc3RyaW5naWZ5KHVybCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSBcImV4cGVjdGVkXCIgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuXG4gKiBTb21lIHByb3BlcnRpZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvKSB7XG4gIHtcbiAgICBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZ1bGx5IGRpc2FibGVkIGphdmFzY3JpcHQ6IFVSTHMsIGFuZCBpZlxuICAgICAgICAvLyB0aGUgaHlkcmF0aW9uIGlzIHN1Y2Nlc3NmdWwgb2YgYSBqYXZhc2NyaXB0OiBVUkwsIHdlXG4gICAgICAgIC8vIHN0aWxsIHdhbnQgdG8gd2FybiBvbiB0aGUgY2xpZW50LlxuICAgICAgICBzYW5pdGl6ZVVSTCgnJyArIGV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZTtcbiAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IG51bGw7XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOKSB7XG4gICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBXZSBoYWQgYW4gYXR0cmlidXRlIGJ1dCBzaG91bGRuJ3QgaGF2ZSBoYWQgb25lLCBzbyByZWFkIGl0XG4gICAgICAgICAgLy8gZm9yIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cGVjdGVkLlxuICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgfSAvLyBFdmVuIGlmIHRoaXMgcHJvcGVydHkgdXNlcyBhIG5hbWVzcGFjZSB3ZSB1c2UgZ2V0QXR0cmlidXRlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXNzdW1lIGl0cyBuYW1lc3BhY2VkIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNvbmZpZy5cbiAgICAgICAgLy8gVG8gdXNlIGdldEF0dHJpYnV0ZU5TIHdlIG5lZWQgdGhlIGxvY2FsIG5hbWUgd2hpY2ggd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBpbiBvdXIgY29uZmlnIGF0bS5cblxuXG4gICAgICAgIHN0cmluZ1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gbnVsbCA/IGV4cGVjdGVkIDogc3RyaW5nVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBhdHRyaWJ1dGUgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy4gU29tZVxuICogYXR0cmlidXRlcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5cbmZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBvYmplY3QgaXMgYW4gb3BhcXVlIHJlZmVyZW5jZSBJRCwgaXQncyBleHBlY3RlZCB0aGF0XG4gICAgLy8gdGhlIG5leHQgcHJvcCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc2VydmVyIHZhbHVlLCBzbyBqdXN0IHJldHVyblxuICAgIC8vIGV4cGVjdGVkXG5cblxuICAgIGlmIChpc09wYXF1ZUh5ZHJhdGluZ09iamVjdChleHBlY3RlZCkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuXG4gIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHZhbHVlID0gbnVsbDtcbiAgfSAvLyBJZiB0aGUgcHJvcCBpc24ndCBpbiB0aGUgc3BlY2lhbCBsaXN0LCB0cmVhdCBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGUuXG5cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgfHwgcHJvcGVydHlJbmZvID09PSBudWxsKSB7XG4gICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHZhciBfYXR0cmlidXRlTmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSwgICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtdXN0VXNlUHJvcGVydHkgPSBwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5O1xuXG4gIGlmIChtdXN0VXNlUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHR5cGUgPT09IEJPT0xFQU4gPyBmYWxzZSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAvLyBgdG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVGhlIHJlc3QgYXJlIHRyZWF0ZWQgYXMgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgY2FzZXMuXG5cblxuICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lLFxuICAgICAgYXR0cmlidXRlTmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3R5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICB2YXIgYXR0cmlidXRlVmFsdWU7XG5cbiAgICBpZiAoX3R5cGUgPT09IEJPT0xFQU4gfHwgX3R5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTiAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgYXR0cmlidXRlIHR5cGUgaXMgYm9vbGVhbiwgd2Uga25vdyBmb3Igc3VyZSBpdCB3b24ndCBiZSBhbiBleGVjdXRpb24gc2lua1xuICAgICAgLy8gYW5kIHdlIHdvbid0IHJlcXVpcmUgVHJ1c3RlZCBUeXBlIGhlcmUuXG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICB7XG4gICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICBzYW5pdGl6ZVVSTChhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlTmFtZXNwYWNlKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoY3RvciwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHZhciBvd25lciA9ICBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsIDtcbiAgdmFyIHNvdXJjZSA9ICBmaWJlci5fZGVidWdTb3VyY2UgO1xuXG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5fcmVuZGVyKTtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICBkbyB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIobm9kZSk7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSk7XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiAnXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogJyArIHgubWVzc2FnZSArICdcXG4nICsgeC5zdGFjaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBjdXJyZW50ID0gbnVsbDtcbnZhciBpc1JlbmRlcmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAvLyBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgd29yay1pbi1wcm9ncmVzcyB2ZXJzaW9uLlxuXG5cbiAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgIGN1cnJlbnQgPSBudWxsO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5mdW5jdGlvbiBnZXRJc1JlbmRlcmluZygpIHtcbiAge1xuICAgIHJldHVybiBpc1JlbmRlcmluZztcbiAgfVxufVxuXG4vLyBGbG93IGRvZXMgbm90IGFsbG93IHN0cmluZyBjb25jYXRlbmF0aW9uIG9mIG1vc3Qgbm9uLXN0cmluZyB0eXBlcy4gVG8gd29ya1xuLy8gYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgd2UgdXNlIGFuIG9wYXF1ZSB0eXBlIHRoYXQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYnlcbi8vIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggZ2V0VG9TdHJpbmdWYWx1ZSBmaXJzdC5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICghKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMub25JbnB1dCB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEocHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuY2hlY2tlZCA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pOyAvLyBXZSBjb3VsZCd2ZSBwYXNzZWQgdGhpcyB0aGUgZmlyc3QgdGltZVxuICAvLyBidXQgaXQgdHJpZ2dlcnMgYSBidWcgaW4gSUUxMSBhbmQgRWRnZSAxNC8xNS5cbiAgLy8gQ2FsbGluZyBkZWZpbmVQcm9wZXJ0eSgpIGFnYWluIHNob3VsZCBiZSBlcXVpdmFsZW50LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNzY4XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG4gIHZhciB0cmFja2VyID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgZGV0YWNoVHJhY2tlcihub2RlKTtcbiAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgaWYgKGdldFRyYWNrZXIobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVE9ETzogT25jZSBpdCdzIGp1c3QgRmliZXIgd2UgY2FuIG1vdmUgdGhpcyB0byBub2RlLl93cmFwcGVyU3RhdGVcblxuXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihub2RlKTsgLy8gaWYgdGhlcmUgaXMgbm8gdHJhY2tlciBhdCB0aGlzIHBvaW50IGl0J3MgdW5saWtlbHlcbiAgLy8gdGhhdCB0cnlpbmcgYWdhaW4gd2lsbCBzdWNjZWVkXG5cbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcblxuICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICB0cmFja2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcblxuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gZmFsc2U7XG52YXIgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaXNDb250cm9sbGVkKHByb3BzKSB7XG4gIHZhciB1c2VzQ2hlY2tlZCA9IHByb3BzLnR5cGUgPT09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PT0gJ3JhZGlvJztcbiAgcmV0dXJuIHVzZXNDaGVja2VkID8gcHJvcHMuY2hlY2tlZCAhPSBudWxsIDogcHJvcHMudmFsdWUgIT0gbnVsbDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZFxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnaW5wdXQnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSksXG4gICAgY29udHJvbGxlZDogaXNDb250cm9sbGVkKHByb3BzKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICBpZiAoY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCAnY2hlY2tlZCcsIGNoZWNrZWQsIGZhbHNlKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcblxuICAgIGlmICghbm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgY29udHJvbGxlZCAmJiAhZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSB1bmRlZmluZWQgdG8gJyArICdhIGRlZmluZWQgdmFsdWUsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiAhY29udHJvbGxlZCAmJiAhZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byAnICsgJ3VuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcyk7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fCAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gY29lcmNlIHRvIG51bWJlciBoZXJlIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBub2RlLnZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAvLyBTdWJtaXQvcmVzZXQgaW5wdXRzIG5lZWQgdGhlIGF0dHJpYnV0ZSByZW1vdmVkIGNvbXBsZXRlbHkgdG8gYXZvaWRcbiAgICAvLyBibGFuay10ZXh0IGJ1dHRvbnMuXG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGNhc2NhZGUgb2ZcbiAgICAvLyBwcm9wZXJ0aWVzOlxuICAgIC8vICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAzLiBPdGhlcndpc2UgdGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGl0IG9ubHkgY2hhbmdlcyB3aGVuIGl0IG5lZWRzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCwgc3VjaCBhcyB0cmFuc2l0aW9uaW5nIGZyb20gYSBjaGVja2JveCBpbnRvIGEgdGV4dCBpbnB1dFxuICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyKGVsZW1lbnQsIHByb3BzLCBpc0h5ZHJhdGluZykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgfHwgcHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpc0J1dHRvbiA9IHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCc7IC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG5cbiAgICBpZiAoaXNCdXR0b24gJiYgKHByb3BzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcHMudmFsdWUgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpOyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICAgIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzaG91bGQgdXNlXG4gICAgICAgIC8vIHRoZSB3cmFwcGVyU3RhdGUuX2luaXRpYWxWYWx1ZSBwcm9wZXJ0eS4gVGhpcyB1c2VzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDMuIEFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHByb3BlcnR5LFxuICAgICAgLy8gc28gd2UgYXNzaWduIGRlZmF1bHRWYWx1ZSB0byB0aGUgc2FtZSB0aGluZyBhcyB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcCBhYm92ZS5cbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNrZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAvLyB3aWxsIHNvbWV0aW1lcyBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIGNoZWNrZWQgKGV2ZW4gYWZ0ZXIgZGV0YWNobWVudCkuXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG5cblxuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSAnJztcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBib3RoIHRoZSBjaGVja2VkIHByb3BlcnR5IGFuZFxuICAgIC8vIGF0dHJpYnV0ZSBhcmUgYXNzaWduZWQgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBkZWZhdWx0Q2hlY2tlZC4gVGhpcyB1c2VzOlxuICAgIC8vXG4gICAgLy8gICAxLiBUaGUgY2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDIuIFRoZSBkZWZhdWx0Q2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDMuIE90aGVyd2lzZSwgZmFsc2VcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gIW5vZGUuZGVmYXVsdENoZWNrZWQ7XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1xuICB9XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gbmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHVwZGF0ZVdyYXBwZXIobm9kZSwgcHJvcHMpO1xuICB1cGRhdGVOYW1lZENvdXNpbnMobm9kZSwgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVOYW1lZENvdXNpbnMocm9vdE5vZGUsIHByb3BzKSB7XG4gIHZhciBuYW1lID0gcHJvcHMubmFtZTtcblxuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH0gLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cblxuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcblxuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIFRoaXMgd2lsbCB0aHJvdyBpZiByYWRpbyBidXR0b25zIHJlbmRlcmVkIGJ5IGRpZmZlcmVudCBjb3BpZXMgb2YgUmVhY3RcbiAgICAgIC8vIGFuZCB0aGUgc2FtZSBuYW1lIGFyZSByZW5kZXJlZCBpbnRvIHRoZSBzYW1lIGZvcm0gKHNhbWUgYXMgIzE5MzkpLlxuICAgICAgLy8gVGhhdCdzIHByb2JhYmx5IG9rYXk7IHdlIGRvbid0IHN1cHBvcnQgaXQganVzdCBhcyB3ZSBkb24ndCBzdXBwb3J0XG4gICAgICAvLyBtaXhpbmcgUmVhY3QgcmFkaW8gYnV0dG9ucyB3aXRoIG5vbi1SZWFjdCBvbmVzLlxuXG5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgbmVlZCB1cGRhdGUgdGhlIHRyYWNrZWQgdmFsdWUgb24gdGhlIG5hbWVkIGNvdXNpbiBzaW5jZSB0aGUgdmFsdWVcbiAgICAgIC8vIHdhcyBjaGFuZ2VkIGJ1dCB0aGUgaW5wdXQgc2F3IG5vIGV2ZW50IG9yIHZhbHVlIHNldFxuXG5cbiAgICAgIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG90aGVyTm9kZSk7IC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgLy8gd2FzIHByZXZpb3VzbHkgY2hlY2tlZCB0byB1cGRhdGUgd2lsbCBjYXVzZSBpdCB0byBiZSBjb21lIHJlLWNoZWNrZWRcbiAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuXG4gICAgICB1cGRhdGVXcmFwcGVyKG90aGVyTm9kZSwgb3RoZXJQcm9wcyk7XG4gICAgfVxuICB9XG59IC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4vLyBGb3IgbnVtYmVyIGlucHV0cywgdGhlIGRpc3BsYXkgdmFsdWUgbG9zZXMgdHJhaWxpbmcgZGVjaW1hbCBwb2ludHMuIEZvciBlbWFpbCBpbnB1dHMsXG4vLyBDaHJvbWUgcmFpc2VzIFwiVGhlIHNwZWNpZmllZCB2YWx1ZSA8eD4gaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLlxuLy9cbi8vIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWZhdWx0VmFsdWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQsIGF2b2lkaW5nIHRoZXNlIHByb2JsZW1zXG4vLyB3aGVuIHRoZSB1c2VyIGlzIGlucHV0dGluZyB0ZXh0XG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzXG5cblxuZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gIGlmICggLy8gRm9jdXNlZCBudW1iZXIgaW5wdXRzIHN5bmNocm9uaXplIG9uIGJsdXIuIFNlZSBDaGFuZ2VFdmVudFBsdWdpbi5qc1xuICB0eXBlICE9PSAnbnVtYmVyJyB8fCBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZENoaWxkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnOyAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cblxuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gY2hpbGQ7IC8vIE5vdGU6IHdlIGRvbid0IHdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlLlxuICAgIC8vIEluc3RlYWQsIHRoaXMgaXMgZG9uZSBzZXBhcmF0ZWx5IGJlbG93IHNvIHRoYXRcbiAgICAvLyBpdCBoYXBwZW5zIGR1cmluZyB0aGUgaHlkcmF0aW9uIGNvZGUgcGF0aCB0b28uXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBob3N0IGNvbXBvbmVudCB0aGF0IHdhcm5zIHdoZW4gYHNlbGVjdGVkYCBpcyBzZXQuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGNvZGUgcGF0aCBhYm92ZSwgYnV0IHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gICAgLy8gV2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUgc28gdGhhdCBjbGllbnQgYW5kIGh5ZHJhdGlvbiBhcmUgY29uc2lzdGVudC5cbiAgICAvLyBUT0RPOiB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgY2F1c2UgYSBERVYtb25seSB0aHJvdyBmb3IgaHlkcmF0aW9uXG4gICAgLy8gaWYgY2hpbGRyZW4gY29udGFpbnMgYSBub24tZWxlbWVudCBvYmplY3QuIFdlIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhhdC5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnb2JqZWN0JyAmJiBwcm9wcy5jaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZFdhcm5JbnZhbGlkQ2hpbGQpIHtcbiAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBUT0RPOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cblxuXG4gICAgaWYgKHByb3BzLnNlbGVjdGVkICE9IG51bGwgJiYgIWRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uKSB7XG4gICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG5cbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICAvLyB2YWx1ZT1cIlwiIHNob3VsZCBtYWtlIGEgdmFsdWUgYXR0cmlidXRlICgjNjIxOSlcbiAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKSkpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgY2hpbGRyZW46IHVuZGVmaW5lZFxuICB9LCBwcm9wcyk7XG5cbiAgdmFyIGNvbnRlbnQgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuXG4gIGlmIChjb250ZW50KSB7XG4gICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMTtcblxue1xuICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gIGlmIChvd25lck5hbWUpIHtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3NlbGVjdCcsIHByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuXG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgJyArICd2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyhub2RlLCBtdWx0aXBsZSwgcHJvcFZhbHVlLCBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgdmFyIG9wdGlvbnMgPSBub2RlLm9wdGlvbnM7XG5cbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gcHJvcFZhbHVlO1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG9wdGlvbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KCckJyArIG9wdGlvbnNbX2ldLnZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbnNbX2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuXG4gICAgdmFyIGRlZmF1bHRTZWxlY3RlZCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvcHRpb25zLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChvcHRpb25zW19pMl0udmFsdWUgPT09IF9zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbX2kyXS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFNlbGVjdGVkID09PSBudWxsICYmICFvcHRpb25zW19pMl0uZGlzYWJsZWQpIHtcbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gb3B0aW9uc1tfaTJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBvcHRpb25hbGx5IHNldHRpbmcgdGhlXG4gKiBwcm9wcyBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4gSWYgYG11bHRpcGxlYCBpcyBmYWxzZSwgdGhlIHByb3AgbXVzdCBiZSBhXG4gKiBzdHJpbmdhYmxlLiBJZiBgbXVsdGlwbGVgIGlzIHRydWUsIHRoZSBwcm9wIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nYWJsZXMuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZVxuICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICpcbiAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBub3RcbiAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuXG4gKlxuICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlXG4gKiBzZWxlY3RlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIGlmICghKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCIgKTtcbiAgICB9XG4gIH0gLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgLy8gZ2V0IHJlc2V0IGlmIGB0ZXh0Q29udGVudGAgaXMgbXV0YXRlZC4gIFdlIGNvdWxkIGFkZCBhIGNoZWNrIGluIHNldFRleHRDb250ZW50XG4gIC8vIHRvIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZi93aGVuIHRoZSB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIG5vZGUgdmFsdWUgKHdoaWNoIHdvdWxkXG4gIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitTb3BoaWUgc2VlbWVkIHRvIGxpa2UgdGhpc1xuICAvLyBzb2x1dGlvbi4gVGhlIHZhbHVlIGNhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0IHNvIHRoYXQncyB3aHkgaXQncyBmb3JjZWRcbiAgLy8gdG8gYmUgYSBzdHJpbmcuXG5cblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoaWxkcmVuOiB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKVxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygndGV4dGFyZWEnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG5cbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHMudmFsdWU7IC8vIE9ubHkgYm90aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcgdG8gdXNlIGl0XG5cbiAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgKyAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBpZiAoIShjaGlsZHJlbi5sZW5ndGggPD0gMSkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG52YXIgTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogSFRNTF9OQU1FU1BBQ0UsXG4gIG1hdGhtbDogTUFUSF9OQU1FU1BBQ0UsXG4gIHN2ZzogU1ZHX05BTUVTUEFDRVxufTsgLy8gQXNzdW1lcyB0aGVyZSBpcyBubyBwYXJlbnQgbmFtZXNwYWNlLlxuXG5mdW5jdGlvbiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdzdmcnOlxuICAgICAgcmV0dXJuIFNWR19OQU1FU1BBQ0U7XG5cbiAgICBjYXNlICdtYXRoJzpcbiAgICAgIHJldHVybiBNQVRIX05BTUVTUEFDRTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIC8vIE5vIChvciBkZWZhdWx0KSBwYXJlbnQgbmFtZXNwYWNlOiBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4gICAgcmV0dXJuIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IFNWR19OQU1FU1BBQ0UgJiYgdHlwZSA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gV2UncmUgbGVhdmluZyBTVkcuXG4gICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9IC8vIEJ5IGRlZmF1bHQsIHBhc3MgbmFtZXNwYWNlIGJlbG93LlxuXG5cbiAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZTtcbn1cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoaWNoIGhhcyAndW5zYWZlJyBwcml2aWxlZ2VzIChyZXF1aXJlZCBieSB3aW5kb3dzOCBhcHBzKVxuICovXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIGlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxudmFyIHJldXNhYmxlU1ZHQ29udGFpbmVyO1xuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0SW5uZXJIVE1MID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgaHRtbCkge1xuICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09IE5hbWVzcGFjZXMuc3ZnKSB7XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTsgLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcblxuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICghaXNDdXN0b21Qcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEoaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIHtcbiAgICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gICAgdmFyIGV4cGFuZGVkU3R5bGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKG5leHRTdHlsZXMpO1xuICAgIHZhciB3YXJuZWRBYm91dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgICAgdmFyIG9yaWdpbmFsS2V5ID0gZXhwYW5kZWRVcGRhdGVzW2tleV07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcblxuICAgICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG5cbiAgICAgICAgaWYgKHdhcm5lZEFib3V0W3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG5cbn07XG5cbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbnZhciBIVE1MID0gJ19faHRtbCc7XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG5cblxuICBpZiAodm9pZEVsZW1lbnRUYWdzW3RhZ10pIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCB0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJiBwcm9wcy5jb250ZW50RWRpdGFibGUgJiYgcHJvcHMuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArICdSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiAnICsgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICsgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIC8vIFRoZXNlIGFyZSByZXNlcnZlZCBTVkcgYW5kIE1hdGhNTCBlbGVtZW50cy5cbiAgICAvLyBXZSBkb24ndCBtaW5kIHRoaXMgbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoZSBIVE1MIG9yIFNWRyBhbGxvd2VkIGF0dHJpYnV0ZSBsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6ICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBlbnRlcmtleWhpbnQ6ICdlbnRlcktleUhpbnQnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGV0YWlscyc6IDAsXG4gICdhcmlhLWRpc2FibGVkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaGlkZGVuJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaW52YWxpZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICdhcmlhLWxhYmVsJzogMCxcbiAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogMCxcbiAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgJ2FyaWEtY2hlY2tlZCc6IDAsXG4gICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAnYXJpYS1sZXZlbCc6IDAsXG4gICdhcmlhLW1vZGFsJzogMCxcbiAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogMCxcbiAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICdhcmlhLXByZXNzZWQnOiAwLFxuICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgJ2FyaWEtc2VsZWN0ZWQnOiAwLFxuICAnYXJpYS1zb3J0JzogMCxcbiAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAnYXJpYS12YWx1ZW1pbic6IDAsXG4gICdhcmlhLXZhbHVlbm93JzogMCxcbiAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgLy8gTGl2ZSBSZWdpb24gQXR0cmlidXRlc1xuICAnYXJpYS1hdG9taWMnOiAwLFxuICAnYXJpYS1idXN5JzogMCxcbiAgJ2FyaWEtbGl2ZSc6IDAsXG4gICdhcmlhLXJlbGV2YW50JzogMCxcbiAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWRyb3BlZmZlY3QnOiAwLFxuICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IDAsXG4gICdhcmlhLWNvbGNvdW50JzogMCxcbiAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAnYXJpYS1jb2xzcGFuJzogMCxcbiAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICdhcmlhLWVycm9ybWVzc2FnZSc6IDAsXG4gICdhcmlhLWZsb3d0byc6IDAsXG4gICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAnYXJpYS1vd25zJzogMCxcbiAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICdhcmlhLXJvd2luZGV4JzogMCxcbiAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICdhcmlhLXNldHNpemUnOiAwXG59O1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkkMS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY29ycmVjdE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShhcmlhTmFtZSkgPyBhcmlhTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gY29ycmVjdE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgY29ycmVjdE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IGxvd2VyQ2FzZWROYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gaW52YWxpZFByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCAnICsgJ3RvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vO1xuICB2YXIgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS87XG4gIHZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG4gIHZhciByQVJJQUNhbWVsJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllcyQxW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3VzaW4nIHx8IGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c291dCcpIHtcbiAgICAgIGVycm9yKCdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXZSBjYW4ndCByZWx5IG9uIHRoZSBldmVudCBzeXN0ZW0gYmVpbmcgaW5qZWN0ZWQgb24gdGhlIHNlcnZlci5cblxuXG4gICAgaWYgKGV2ZW50UmVnaXN0cnkgIT0gbnVsbCkge1xuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSBldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IGV2ZW50UmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcztcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgLy8gSWYgbm8gZXZlbnQgcGx1Z2lucyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHdlIGFyZSBpbiBhIHNlcnZlciBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHRlbGwgaWYgdGhlIGV2ZW50IG5hbWUgaXMgY29ycmVjdCBmb3Igc3VyZSwgYnV0IHdlIGNhbiBmaWx0ZXJcbiAgICAgIC8vIG91dCBrbm93biBiYWQgb25lcyBsaWtlIGBvbmNsaWNrYC4gV2UgY2FuJ3Qgc3VnZ2VzdCBhIHNwZWNpZmljIHJlcGxhY2VtZW50IHRob3VnaC5cbiAgICAgIGlmIChJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIExldCB0aGUgQVJJQSBhdHRyaWJ1dGUgaG9vayB2YWxpZGF0ZSBBUklBIGF0dHJpYnV0ZXNcblxuXG4gICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgZXJyb3IoJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2FyaWEnKSB7XG4gICAgICBlcnJvcignVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuICcgKyAnUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaXMnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgdHlwZW9mIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcbiAgICB2YXIgaXNSZXNlcnZlZCA9IHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7IC8vIEtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIG1hdGNoIHRoZSBjYXNpbmcgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXJ0eSBjb25maWcuXG5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZCAmJiBuYW1lICE9PSBsb3dlckNhc2VkTmFtZSkge1xuICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGxvd2VyY2FzZSBjYXNpbmcgc2luY2UgdGhhdCdzIGhvdyB0aGV5XG4gICAgICAvLyB3aWxsIGJlIGNhc2VkIGFueXdheSB3aXRoIHNlcnZlciByZW5kZXJpbmcuXG4gICAgICBlcnJvcignUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91ICcgKyAnaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tICcgKyAnYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiAnICsgJ0lmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgJyArICdpdCBmcm9tIHRoZSBET00gZWxlbWVudC4nLCBuYW1lLCBsb3dlckNhc2VkTmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSwgbmFtZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCBjYXNpbmcsIGRvIG5vdCB2YWxpZGF0ZVxuICAgIC8vIGRhdGEgdHlwZXMgZm9yIHJlc2VydmVkIHByb3BzXG5cblxuICAgIGlmIChpc1Jlc2VydmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBhIGtub3duIGF0dHJpYnV0ZSBpcyBhIGJhZCB0eXBlXG5cblxuICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBXYXJuIHdoZW4gcGFzc2luZyB0aGUgc3RyaW5ncyAnZmFsc2UnIG9yICd0cnVlJyBpbnRvIGEgYm9vbGVhbiBwcm9wXG5cblxuICAgIGlmICgodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICd0cnVlJykgJiYgcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbnZhciB3YXJuVW5rbm93blByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAge1xuICAgIHZhciB1bmtub3duUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KTtcbn1cblxudmFyIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFID0gMTtcbnZhciBJU19OT05fREVMRUdBVEVEID0gMSA8PCAxO1xudmFyIElTX0NBUFRVUkVfUEhBU0UgPSAxIDw8IDI7XG52YXIgSVNfUkVQTEFZRUQgPSAxIDw8IDQ7XG4vLyBzZXQgdG8gTEVHQUNZX0ZCX1NVUFBPUlQuIExFR0FDWV9GQl9TVVBQT1JUIG9ubHkgZ2V0cyBzZXQgd2hlblxuLy8gd2UgY2FsbCB3aWxsRGVmZXJMYXRlckZvckxlZ2FjeUZCU3VwcG9ydCwgdGh1cyBub3QgYmFpbGluZyBvdXRcbi8vIHdpbGwgcmVzdWx0IGluIGVuZGxlc3MgY3ljbGVzIGxpa2UgYW4gaW5maW5pdGUgbG9vcC5cbi8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBkZWZlciBkdXJpbmcgZXZlbnQgcmVwbGF5aW5nLlxuXG52YXIgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMgPSBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSB8IElTX05PTl9ERUxFR0FURUQgfCBJU19DQVBUVVJFX1BIQVNFO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiByZXN0b3JlSW1wbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oKSBuZWVkcyB0byBiZSBjYWxsZWQgdG8gaGFuZGxlIGEgdGFyZ2V0IGZvciBjb250cm9sbGVkIGV2ZW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZTsgLy8gR3VhcmQgYWdhaW5zdCBGaWJlciBiZWluZyB1bm1vdW50ZWQuXG5cbiAgaWYgKHN0YXRlTm9kZSkge1xuICAgIHZhciBfcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgICByZXN0b3JlSW1wbChpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSwgaW50ZXJuYWxJbnN0YW5jZS50eXBlLCBfcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIHJlc3RvcmVJbXBsID0gaW1wbDtcbn1cbmZ1bmN0aW9uIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KSB7XG4gIGlmIChyZXN0b3JlVGFyZ2V0KSB7XG4gICAgaWYgKHJlc3RvcmVRdWV1ZSkge1xuICAgICAgcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZVF1ZXVlID0gW3RhcmdldF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQ7XG4gIH1cbn1cbmZ1bmN0aW9uIG5lZWRzU3RhdGVSZXN0b3JlKCkge1xuICByZXR1cm4gcmVzdG9yZVRhcmdldCAhPT0gbnVsbCB8fCByZXN0b3JlUXVldWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiByZXN0b3JlU3RhdGVJZk5lZWRlZCgpIHtcbiAgaWYgKCFyZXN0b3JlVGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHJlc3RvcmVUYXJnZXQ7XG4gIHZhciBxdWV1ZWRUYXJnZXRzID0gcmVzdG9yZVF1ZXVlO1xuICByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbiAgcmVzdG9yZVF1ZXVlID0gbnVsbDtcbiAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KTtcblxuICBpZiAocXVldWVkVGFyZ2V0cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQocXVldWVkVGFyZ2V0c1tpXSk7XG4gICAgfVxuICB9XG59XG5cbi8vIHRoZSByZW5kZXJlci4gU3VjaCBhcyB3aGVuIHdlJ3JlIGRpc3BhdGNoaW5nIGV2ZW50cyBvciBpZiB0aGlyZCBwYXJ0eVxuLy8gbGlicmFyaWVzIG5lZWQgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcy4gRXZlbnR1YWxseSwgdGhpcyBBUEkgd2lsbCBnbyBhd2F5IHdoZW5cbi8vIGV2ZXJ5dGhpbmcgaXMgYmF0Y2hlZCBieSBkZWZhdWx0LiBXZSdsbCB0aGVuIGhhdmUgYSBzaW1pbGFyIEFQSSB0byBvcHQtb3V0IG9mXG4vLyBzY2hlZHVsZWQgd29yayBhbmQgaW5zdGVhZCBkbyBzeW5jaHJvbm91cyB3b3JrLlxuLy8gRGVmYXVsdHNcblxudmFyIGJhdGNoZWRVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYm9va2tlZXBpbmcpIHtcbiAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbn07XG5cbnZhciBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbn07XG5cbnZhciBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gYmF0Y2hlZFVwZGF0ZXNJbXBsO1xudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG52YXIgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmaW5pc2hFdmVudEhhbmRsZXIoKSB7XG4gIC8vIEhlcmUgd2Ugd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBoYXZlIHByb3BhZ2F0ZWQsIHdoaWNoIGlzIGltcG9ydGFudFxuICAvLyB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgLy8gVGhlbiB3ZSByZXN0b3JlIHN0YXRlIG9mIGFueSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgdmFyIGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzID0gbmVlZHNTdGF0ZVJlc3RvcmUoKTtcblxuICBpZiAoY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMpIHtcbiAgICAvLyBJZiBhIGNvbnRyb2xsZWQgZXZlbnQgd2FzIGZpcmVkLCB3ZSBtYXkgbmVlZCB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZlxuICAgIC8vIHRoZSBET00gbm9kZSBiYWNrIHRvIHRoZSBjb250cm9sbGVkIHZhbHVlLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIFJlYWN0XG4gICAgLy8gYmFpbHMgb3V0IG9mIHRoZSB1cGRhdGUgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGJvb2trZWVwaW5nKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIH1cblxuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyhmbiwgYSwgYikge1xuICBpZiAoaXNCYXRjaGluZ0V2ZW50VXBkYXRlcykge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihhLCBiKTtcbiAgfVxuXG4gIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKGZuLCBhLCBiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyhmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyID0gaXNJbnNpZGVFdmVudEhhbmRsZXI7XG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBkaXNjcmV0ZVVwZGF0ZXNJbXBsKGZuLCBhLCBiLCBjLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHByZXZJc0luc2lkZUV2ZW50SGFuZGxlcjtcblxuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZCh0aW1lU3RhbXApIHtcbiAge1xuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihfYmF0Y2hlZFVwZGF0ZXNJbXBsLCBfZGlzY3JldGVVcGRhdGVzSW1wbCwgX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCwgX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKSB7XG4gIGJhdGNoZWRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkVXBkYXRlc0ltcGw7XG4gIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGw7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHJldmVudE1vdXNlRXZlbnQobmFtZSwgdHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb25DbGljayc6XG4gICAgY2FzZSAnb25DbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2snOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bic6XG4gICAgY2FzZSAnb25Nb3VzZURvd25DYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmVDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlVXAnOlxuICAgIGNhc2UgJ29uTW91c2VVcENhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VFbnRlcic6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259IFRoZSBzdG9yZWQgY2FsbGJhY2suXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcblxuICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcyAoZXg6IG9ubG9hZCBldmVudHMgaW4gaW5jcmVtZW50YWwgbW9kZSkuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgaWYgKHByb3BzID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IHByb3BzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50TW91c2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBpbnN0LnR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbnZhciBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlOyAvLyBDaGVjayBpZiBicm93c2VyIHN1cHBvcnQgZXZlbnRzIHdpdGggcGFzc2l2ZSBsaXN0ZW5lcnNcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcblxuaWYgKGNhblVzZURPTSkge1xuICB0cnkge1xuICAgIHZhciBvcHRpb25zID0ge307IC8vICRGbG93Rml4TWU6IElnbm9yZSBGbG93IGNvbXBsYWluaW5nIGFib3V0IG5lZWRpbmcgYSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMsICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gIHRyeSB7XG4gICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2Q7XG5cbntcbiAgLy8gSW4gREVWIG1vZGUsIHdlIHN3YXAgb3V0IGludm9rZUd1YXJkZWRDYWxsYmFjayBmb3IgYSBzcGVjaWFsIHZlcnNpb25cbiAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gIC8vIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLiBCZWNhdXNlIFJlYWN0IHdyYXBzIGFsbCB1c2VyLXByb3ZpZGVkXG4gIC8vIGZ1bmN0aW9ucyBpbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGFuZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uIG9mXG4gIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gIC8vIGxpa2UgY2F1Z2h0IGV4Y2VwdGlvbnMsIGFuZCB0aGUgRGV2VG9vbHMgd29uJ3QgcGF1c2UgdW5sZXNzIHRoZSBkZXZlbG9wZXJcbiAgLy8gdGFrZXMgdGhlIGV4dHJhIHN0ZXAgb2YgZW5hYmxpbmcgcGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnMuIFRoaXMgaXNcbiAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAvLyB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoZSBlcnJvciBpcyB1bmNhdWdodC5cbiAgLy9cbiAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAvLyB0cnktY2F0Y2ggaW4gREVWLiBJbnN0ZWFkLCB3ZSBzeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgZmFrZSBldmVudCB0byBhIGZha2VcbiAgLy8gRE9NIG5vZGUsIGFuZCBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIGZyb20gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXJcbiAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAvLyBhIGdsb2JhbCBldmVudCBoYW5kbGVyLiBCdXQgYmVjYXVzZSB0aGUgZXJyb3IgaGFwcGVucyBpbiBhIGRpZmZlcmVudFxuICAvLyBldmVudCBsb29wIGNvbnRleHQsIGl0IGRvZXMgbm90IGludGVycnVwdCB0aGUgbm9ybWFsIHByb2dyYW0gZmxvdy5cbiAgLy8gRWZmZWN0aXZlbHksIHRoaXMgZ2l2ZXMgdXMgdHJ5LWNhdGNoIGJlaGF2aW9yIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmdcbiAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuICAvLyBDaGVjayB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBBUElzIHdlIG5lZWQgdG8gaW1wbGVtZW50IG91ciBzcGVjaWFsXG4gIC8vIERFViB2ZXJzaW9uIG9mIGludm9rZUd1YXJkZWRDYWxsYmFja1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncmVhY3QnKTtcblxuICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tEZXYobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgLy8gSWYgZG9jdW1lbnQgZG9lc24ndCBleGlzdCB3ZSBrbm93IGZvciBzdXJlIHdlIHdpbGwgY3Jhc2ggaW4gdGhpcyBtZXRob2RcbiAgICAgIC8vIHdoZW4gd2UgY2FsbCBkb2N1bWVudC5jcmVhdGVFdmVudCgpLiBIb3dldmVyIHRoaXMgY2FuIGNhdXNlIGNvbmZ1c2luZ1xuICAgICAgLy8gZXJyb3JzOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2tpbmN1YmF0b3IvY3JlYXRlLXJlYWN0LWFwcC9pc3N1ZXMvMzQ4MlxuICAgICAgLy8gU28gd2UgcHJlZW1wdGl2ZWx5IHRocm93IHdpdGggYSBiZXR0ZXIgbWVzc2FnZSBpbnN0ZWFkLlxuICAgICAgaWYgKCEodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgZG9jdW1lbnRgIGdsb2JhbCB3YXMgZGVmaW5lZCB3aGVuIFJlYWN0IHdhcyBpbml0aWFsaXplZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiBpbiBhIHRlc3QgZW52aXJvbm1lbnQgaWYgYSBjb21wb25lbnQgc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIHJ1bm5pbmcuIFRvIHNvbHZlIHRoaXMsIHlvdSBjYW4gZWl0aGVyIHVubW91bnQgdGhlIGNvbXBvbmVudCBhdCB0aGUgZW5kIG9mIHlvdXIgdGVzdCAoYW5kIGVuc3VyZSB0aGF0IGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBnZXQgY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBhc3luY2hyb25vdXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICB2YXIgZGlkQ2FsbCA9IGZhbHNlOyAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLiBXZVxuICAgICAgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBhdCB0aGUgYmVnaW5uaW5nLCB0aGVuIHNldCBpdCB0byBmYWxzZSByaWdodCBhZnRlclxuICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgLy8gc2V0IHRvIGZhbHNlLiBUaGlzIHN0cmF0ZWd5IHdvcmtzIGV2ZW4gaWYgdGhlIGJyb3dzZXIgaXMgZmxha3kgYW5kXG4gICAgICAvLyBmYWlscyB0byBjYWxsIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbHkgb25cbiAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgIHZhciBkaWRFcnJvciA9IHRydWU7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSB2YWx1ZSBvZiB3aW5kb3cuZXZlbnQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgaXRcbiAgICAgIC8vIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8gbGV0IHVzZXIgY29kZSBhY2Nlc3Mgd2luZG93LmV2ZW50IGluIHRoZVxuICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuXG4gICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdldmVudCcpO1xuXG4gICAgICBmdW5jdGlvbiByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpIHtcbiAgICAgICAgLy8gV2UgaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBjYWxsYmFjayBmcm9tIGV2ZW50IGxpc3RlbmVycyBzbyB0aGF0XG4gICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAvLyBuZXN0ZWQgY2FsbCB3b3VsZCB0cmlnZ2VyIHRoZSBmYWtlIGV2ZW50IGhhbmRsZXJzIG9mIGFueSBjYWxsIGhpZ2hlclxuICAgICAgICAvLyBpbiB0aGUgc3RhY2suXG4gICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgLy8gd2luZG93LmV2ZW50IGFzc2lnbm1lbnQgaW4gYm90aCBJRSA8PSAxMCBhcyB0aGV5IHRocm93IGFuIGVycm9yXG4gICAgICAgIC8vIFwiTWVtYmVyIG5vdCBmb3VuZFwiIGluIHN0cmljdCBtb2RlLCBhbmQgaW4gRmlyZWZveCB3aGljaCBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5ldmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpKSB7XG4gICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cblxuXG4gICAgICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soKSB7XG4gICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIH0gLy8gQ3JlYXRlIGEgZ2xvYmFsIGVycm9yIGV2ZW50IGhhbmRsZXIuIFdlIHVzZSB0aGlzIHRvIGNhcHR1cmUgdGhlIHZhbHVlXG4gICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgIC8vIHRoYW4gb25jZTsgZm9yIGV4YW1wbGUsIGlmIG5vbi1SZWFjdCBjb2RlIGFsc28gY2FsbHMgYGRpc3BhdGNoRXZlbnRgXG4gICAgICAvLyBhbmQgYSBoYW5kbGVyIGZvciB0aGF0IGV2ZW50IHRocm93cy4gV2Ugc2hvdWxkIGJlIHJlc2lsaWVudCB0byBtb3N0IG9mXG4gICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAvLyBsYXN0IGVycm9yIGV2ZW50IGlzIGFsd2F5cyB1c2VkLiBJZiB0aGUgY2FsbGJhY2sgYWN0dWFsbHkgZG9lcyBlcnJvcixcbiAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgbGFzdCBlcnJvciBldmVudCBpcyB0aGUgY29ycmVjdCBvbmUsIGJlY2F1c2UgaXQncyBub3RcbiAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgIC8vIGVycm9yaW5nIGFuZCB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhlIGBkaXNwYXRjaEV2ZW50YCBjYWxsIGJlbG93LiBJZlxuICAgICAgLy8gdGhlIGNhbGxiYWNrIGRvZXNuJ3QgZXJyb3IsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgd2FzIGZpcmVkLCB3ZSBrbm93IHRvXG4gICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuXG4gICAgICB2YXIgZXJyb3I7IC8vIFVzZSB0aGlzIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGVycm9yIGV2ZW50IGlzIGV2ZXIgY2FsbGVkLlxuXG4gICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBpc0Nyb3NzT3JpZ2luRXJyb3IgPSBmYWxzZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93RXJyb3IoZXZlbnQpIHtcbiAgICAgICAgZXJyb3IgPSBldmVudC5lcnJvcjtcbiAgICAgICAgZGlkU2V0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAvLyBTb21lIG90aGVyIGVycm9yIGhhbmRsZXIgaGFzIHByZXZlbnRlZCBkZWZhdWx0LlxuICAgICAgICAgIC8vIEJyb3dzZXJzIHNpbGVuY2UgdGhlIGVycm9yIHJlcG9ydCBpZiB0aGlzIGhhcHBlbnMuXG4gICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHsvLyBJZ25vcmUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhIGZha2UgZXZlbnQgdHlwZS5cblxuXG4gICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiAnaW52b2tlZ3VhcmRlZGNhbGxiYWNrJyk7IC8vIEF0dGFjaCBvdXIgZXZlbnQgaGFuZGxlcnNcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgIC8vIGVycm9ycywgaXQgd2lsbCB0cmlnZ2VyIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlci5cblxuICAgICAgZXZ0LmluaXRFdmVudChldnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICBpZiAod2luZG93RXZlbnREZXNjcmlwdG9yKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdldmVudCcsIHdpbmRvd0V2ZW50RGVzY3JpcHRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgIGlmICghZGlkU2V0RXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZXJyb3JlZCwgYnV0IHRoZSBlcnJvciBldmVudCBuZXZlciBmaXJlZC5cbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgKyAndGhlIGFjdHVhbCBlcnJvciBvYmplY3QgaW4gZGV2ZWxvcG1lbnQuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jcm9zc29yaWdpbi1lcnJvciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICB9IC8vIFJlbW92ZSBvdXIgZXZlbnQgbGlzdGVuZXJzXG5cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuXG4gICAgICBpZiAoIWRpZENhbGwpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLCBhbmQgb3VyIGV2ZW50IHdhcyBub3QgZGlzcGF0Y2hlZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NTg1XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgcHJvZHVjdGlvbiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgcmV0dXJuIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsO1xuXG52YXIgaGFzRXJyb3IgPSBmYWxzZTtcbnZhciBjYXVnaHRFcnJvciA9IG51bGw7IC8vIFVzZWQgYnkgZXZlbnQgc3lzdGVtIHRvIGNhcHR1cmUvcmV0aHJvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbnZhciBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbnZhciByZXRocm93RXJyb3IgPSBudWxsO1xudmFyIHJlcG9ydGVyID0ge1xuICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufTtcbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gKlxuICogSW4gcHJvZHVjdGlvbiwgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHRyeS1jYXRjaC4gVGhlIHJlYXNvbiB3ZSBkb24ndFxuICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gKiBpbXBsZW1lbnRhdGlvbiBpbiBERVYgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICogaXQgaW4gYSBnbG9iYWwgc28gaXQgY2FuIGJlIHJldGhyb3duIGJ5IGByZXRocm93Q2F1Z2h0RXJyb3JgIGxhdGVyLlxuICogVE9ETzogU2VlIGlmIGNhdWdodEVycm9yIGFuZCByZXRocm93RXJyb3IgY2FuIGJlIHVuaWZpZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgIGlmICghaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgcmV0aHJvd0Vycm9yID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICovXG5cbmZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc1JldGhyb3dFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHJldGhyb3dFcnJvcjtcbiAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5mdW5jdGlvbiBoYXNDYXVnaHRFcnJvcigpIHtcbiAgcmV0dXJuIGhhc0Vycm9yO1xufVxuZnVuY3Rpb24gY2xlYXJDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2F1Z2h0RXJyb3I7XG4gICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiY2xlYXJDYXVnaHRFcnJvciB3YXMgY2FsbGVkIGJ1dCBubyBlcnJvciB3YXMgY2FwdHVyZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IHNoYXJlZCBhbmQgYXNzdW1lZCB0byBiZSBzdGF0ZWxlc3MuXG4gKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICovXG5mdW5jdGlvbiBnZXQoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xufVxuZnVuY3Rpb24gaGFzKGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xufVxuXG4vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdHdvIHZhbHVlcy4gVGhleSdyZSB1c2VkIGJ5IFJlYWN0IERldiBUb29scy5cbnZhciBOb0ZsYWdzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFBlcmZvcm1lZFdvcmsgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG52YXIgUGxhY2VtZW50ID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBVcGRhdGUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjY7XG52YXIgRGVsZXRpb24gPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuODtcbnZhciBDb250ZW50UmVzZXQgPVxuLyogICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBEaWRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBSZWYgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgU25hcHNob3QgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMjU2O1xudmFyIFBhc3NpdmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjUxMjsgLy8gVE9ETyAoZWZmZWN0cykgUmVtb3ZlIHRoaXMgYml0IG9uY2UgdGhlIG5ldyByZWNvbmNpbGVyIGlzIHN5bmNlZCB0byB0aGUgb2xkLlxuXG52YXIgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2ID1cbi8qICAgICAqL1xuODE5MjtcbnZhciBIeWRyYXRpbmcgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIEh5ZHJhdGluZ0FuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjEwMjg7IC8vIFBhc3NpdmUgJiBVcGRhdGUgJiBDYWxsYmFjayAmIFJlZiAmIFNuYXBzaG90XG5cbnZhciBMaWZlY3ljbGVFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICovXG45MzI7IC8vIFVuaW9uIG9mIGFsbCBob3N0IGVmZmVjdHNcblxudmFyIEhvc3RFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICAgICAgKi9cbjIwNDc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbnZhciBJbmNvbXBsZXRlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSA9XG4vKiAqL1xuMTYzODQ7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICB2YXIgbm9kZSA9IGZpYmVyO1xuICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcblxuICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgZG8ge1xuICAgICAgbm9kZSA9IG5leHROb2RlO1xuXG4gICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAvLyBtb3VudGVkIGZpYmVyIGlzIHRoZSBwYXJlbnQgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gZmlndXJlIG91dFxuICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5leHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3YXMgYSBuZXN0ZWQgSG9zdFJvb3Qgd2hlbiB1c2VkIHdpdGhcbiAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICByZXR1cm4gbmVhcmVzdE1vdW50ZWQ7XG4gIH0gLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RSb290ID8gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gOiBudWxsO1xufVxuZnVuY3Rpb24gaXNGaWJlck1vdW50ZWQoZmliZXIpIHtcbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cbmZ1bmN0aW9uIGlzTW91bnRlZChjb21wb25lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lckZpYmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmICghZmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgaWYgKCEoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKCEobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gZmliZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gIC8vIHNwZWNpYWwgY2FzZXMgYW5kIHdlJ2xsIGRlYWwgd2l0aCB0aGVtLlxuXG5cbiAgdmFyIGEgPSBmaWJlcjtcbiAgdmFyIGIgPSBhbHRlcm5hdGU7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgaWYgKHBhcmVudEEgPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIGF0IHRoZSByb290LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcblxuICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBhbHRlcm5hdGUuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLiBDdXJyZW50bHksIGl0IG9ubHlcbiAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIFN1c3BlbnNlIGNvbXBvbmVudCBpcyBoaWRkZW4uIEFuIGV4dHJhIGZyYWdtZW50IGZpYmVyXG4gICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAvLyBvdmVyIHRoaXMgZXh0cmEgZnJhZ21lbnQgZmliZXIgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgdmFyIG5leHRQYXJlbnQgPSBwYXJlbnRBLnJldHVybjtcblxuICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgYSA9IGIgPSBuZXh0UGFyZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gSWYgYm90aCBjb3BpZXMgb2YgdGhlIHBhcmVudCBmaWJlciBwb2ludCB0byB0aGUgc2FtZSBjaGlsZCwgd2UgY2FuXG4gICAgLy8gYXNzdW1lIHRoYXQgdGhlIGNoaWxkIGlzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuIHdlIGJhaWxvdXQgb24gbG93XG4gICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG5cbiAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gYSkge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEIgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgLy8gd2F5IHRoaXMgY291bGQgcG9zc2libHkgaGFwcGVuIGlzIGlmIHRoaXMgd2FzIHVubW91bnRlZCwgaWYgYXQgYWxsLlxuXG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKGEuYWx0ZXJuYXRlID09PSBiKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgLy8gdW5tb3VudGVkLlxuXG5cbiAgaWYgKCEoYS50YWcgPT09IEhvc3RSb290KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICByZXR1cm4gYWx0ZXJuYXRlO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgJiYgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBkb2VzRmliZXJDb250YWluKHBhcmVudEZpYmVyLCBjaGlsZEZpYmVyKSB7XG4gIHZhciBub2RlID0gY2hpbGRGaWJlcjtcbiAgdmFyIHBhcmVudEZpYmVyQWx0ZXJuYXRlID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudEZpYmVyIHx8IG5vZGUgPT09IHBhcmVudEZpYmVyQWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkgPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5ID0gZm47XG59IC8vIFRPRE86IFVwZ3JhZGUgdGhpcyBkZWZpbml0aW9uIG9uY2Ugd2UncmUgb24gYSBuZXdlciB2ZXJzaW9uIG9mIEZsb3cgdGhhdFxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gVGhlIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cyB0byBiZSByZXBsYXllZC5cblxudmFyIHF1ZXVlZERpc2NyZXRlRXZlbnRzID0gW107IC8vIEluZGljYXRlcyBpZiBhbnkgY29udGludW91cyBldmVudCB0YXJnZXRzIGFyZSBub24tbnVsbCBmb3IgZWFybHkgYmFpbG91dC5cbi8vIGlmIHRoZSBsYXN0IHRhcmdldCB3YXMgZGVoeWRyYXRlZC5cblxudmFyIHF1ZXVlZEZvY3VzID0gbnVsbDtcbnZhciBxdWV1ZWREcmFnID0gbnVsbDtcbnZhciBxdWV1ZWRNb3VzZSA9IG51bGw7IC8vIEZvciBwb2ludGVyIGV2ZW50cyB0aGVyZSBjYW4gYmUgb25lIGxhdGVzdCBldmVudCBwZXIgcG9pbnRlcklkLlxuXG52YXIgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCk7XG52YXIgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpOyAvLyBXZSBjb3VsZCBjb25zaWRlciByZXBsYXlpbmcgc2VsZWN0aW9uY2hhbmdlIGFuZCB0b3VjaG1vdmVzIHRvby5cblxudmFyIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdO1xuZnVuY3Rpb24gaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSB7XG4gIHJldHVybiBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwO1xufVxudmFyIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hzdGFydCcsICdhdXhjbGljaycsICdkYmxjbGljaycsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJ1cCcsICdkcmFnZW5kJywgJ2RyYWdzdGFydCcsICdkcm9wJywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdpbnB1dCcsICd0ZXh0SW5wdXQnLCAvLyBJbnRlbnRpb25hbGx5IGNhbWVsQ2FzZVxuJ2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2NsaWNrJywgJ2NoYW5nZScsICdjb250ZXh0bWVudScsICdyZXNldCcsICdzdWJtaXQnXTtcbmZ1bmN0aW9uIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihldmVudFR5cGUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgIGV2ZW50U3lzdGVtRmxhZ3M6IGV2ZW50U3lzdGVtRmxhZ3MgfCBJU19SRVBMQVlFRCxcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnB1c2gocXVldWVkRXZlbnQpO1xufSAvLyBSZXNldHMgdGhlIHJlcGxheWluZyBmb3IgdGhpcyB0eXBlIG9mIGNvbnRpbnVvdXMgZXZlbnQgdG8gbm8gZXZlbnQuXG5cbmZ1bmN0aW9uIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShfcG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChleGlzdGluZ1F1ZXVlZEV2ZW50LCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9PT0gbnVsbCB8fCBleGlzdGluZ1F1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSBuYXRpdmVFdmVudCkge1xuICAgIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2ZpYmVyMiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0YXJnZXQuXG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZWRFdmVudDtcbiAgfSAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgcXVldWVkIHRoaXMgZXhhY3QgZXZlbnQsIHRoZW4gaXQncyBiZWNhdXNlXG4gIC8vIHRoZSBkaWZmZXJlbnQgZXZlbnQgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBET00gZXZlbnQgbGlzdGVuZXJzLlxuICAvLyBXZSBjYW4gYWNjdW11bGF0ZSB0aGUgZmxhZ3MsIGFuZCB0aGUgdGFyZ2V0Q29udGFpbmVycywgYW5kXG4gIC8vIHN0b3JlIGEgc2luZ2xlIGV2ZW50IHRvIGJlIHJlcGxheWVkLlxuXG5cbiAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gZXhpc3RpbmdRdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIGlmICh0YXJnZXRDb250YWluZXIgIT09IG51bGwgJiYgdGFyZ2V0Q29udGFpbmVycy5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgPT09IC0xKSB7XG4gICAgdGFyZ2V0Q29udGFpbmVycy5wdXNoKHRhcmdldENvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gZXhpc3RpbmdRdWV1ZWRFdmVudDtcbn1cblxuZnVuY3Rpb24gcXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUaGVzZSBzZXQgcmVsYXRlZFRhcmdldCB0byBudWxsIGJlY2F1c2UgdGhlIHJlcGxheWVkIGV2ZW50IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB3ZVxuICAvLyBtb3ZlZCBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdyAobm8gdGFyZ2V0KSBvbnRvIHRoZSB0YXJnZXQgb25jZSBpdCBoeWRyYXRlcy5cbiAgLy8gSW5zdGVhZCBvZiBtdXRhdGluZyB3ZSBjb3VsZCBjbG9uZSB0aGUgZXZlbnQuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICB7XG4gICAgICAgIHZhciBmb2N1c0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZEZvY3VzID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRGb2N1cywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZm9jdXNFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRyYWdFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWREcmFnLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBkcmFnRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBtb3VzZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRNb3VzZSwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbW91c2VFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBwb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQocG9pbnRlcklkLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJzLmdldChwb2ludGVySWQpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHBvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIF9wb2ludGVySWQyID0gX3BvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5zZXQoX3BvaW50ZXJJZDIsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChfcG9pbnRlcklkMikgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgX3BvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gQ2hlY2sgaWYgdGhpcyB0YXJnZXQgaXMgdW5ibG9ja2VkLiBSZXR1cm5zIHRydWUgaWYgaXQncyB1bmJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChxdWV1ZWRUYXJnZXQpIHtcbiAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaGFyZXMgYSBsb3Qgb2YgbG9naWMgd2l0aCBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50LlxuICAvLyBUcnkgdG8gdW5pZnkgdGhlbS4gSXQncyBhIGJpdCB0cmlja3kgc2luY2UgaXQgd291bGQgcmVxdWlyZSB0d28gcmV0dXJuXG4gIC8vIHZhbHVlcy5cbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIGJsb2NrZWQgb24gaHlkcmF0aW5nIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgLy8gSW5jcmVhc2UgaXRzIHByaW9yaXR5LlxuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBpbnN0YW5jZTtcbiAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShxdWV1ZWRUYXJnZXQubGFuZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpOyAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2ZcbiAgICAgICAgICAvLyBhIHJvb3Qgb3RoZXIgdGhhbiBzeW5jLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LmRvbUV2ZW50TmFtZSwgcXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgdmFyIF9maWJlcjMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMyAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIzKTtcbiAgICAgIH1cblxuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgaWYgKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpKSB7XG4gICAgbWFwLmRlbGV0ZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpIHtcbiAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBGaXJzdCByZXBsYXkgZGlzY3JldGUgZXZlbnRzLlxuXG4gIHdoaWxlIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHREaXNjcmV0ZUV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbMF07XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgLy8gSW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgYm91bmRhcnkgdG8gdW5ibG9ja1xuICAgICAgLy8gdGhlIG5leHQgZGlzY3JldGUgZXZlbnQuXG4gICAgICB2YXIgX2ZpYmVyNCA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihfZmliZXI0KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBuZXh0RGlzY3JldGVFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gICAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQobmV4dERpc2NyZXRlRXZlbnQuZG9tRXZlbnROYW1lLCBuZXh0RGlzY3JldGVFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5leHREaXNjcmV0ZUV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgICBuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAvLyBXZSd2ZSBzdWNjZXNzZnVsbHkgcmVwbGF5ZWQgdGhlIGZpcnN0IGV2ZW50LiBMZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgICAgcXVldWVkRGlzY3JldGVFdmVudHMuc2hpZnQoKTtcbiAgICB9XG4gIH0gLy8gTmV4dCByZXBsYXkgYW55IGNvbnRpbnVvdXMgZXZlbnRzLlxuXG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpKSB7XG4gICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSkge1xuICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpKSB7XG4gICAgcXVldWVkTW91c2UgPSBudWxsO1xuICB9XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuXG4gICAgaWYgKCFoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0KSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gdHJ1ZTsgLy8gU2NoZWR1bGUgYSBjYWxsYmFjayB0byBhdHRlbXB0IHJlcGxheWluZyBhcyBtYW55IGV2ZW50cyBhcyBhcmVcbiAgICAgIC8vIG5vdyB1bmJsb2NrZWQuIFRoaXMgZmlyc3QgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHVuYmxvY2tlZCB5ZXQuXG4gICAgICAvLyBXZSBjb3VsZCBjaGVjayBpdCBlYXJseSB0byBhdm9pZCBzY2hlZHVsaW5nIGFuIHVubmVjZXNzYXJ5IGNhbGxiYWNrLlxuXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksIHJlcGxheVVuYmxvY2tlZEV2ZW50cyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gIC8vIE1hcmsgYW55dGhpbmcgdGhhdCB3YXMgYmxvY2tlZCBvbiB0aGlzIGFzIG5vIGxvbmdlciBibG9ja2VkXG4gIC8vIGFuZCBlbGlnaWJsZSBmb3IgYSByZXBsYXkuXG4gIGlmIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdLCB1bmJsb2NrZWQpOyAvLyBUaGlzIGlzIGEgZXhwb25lbnRpYWwgc2VhcmNoIGZvciBlYWNoIGJvdW5kYXJ5IHRoYXQgY29tbWl0cy4gSSB0aGluayBpdCdzXG4gICAgLy8gd29ydGggaXQgYmVjYXVzZSB3ZSBleHBlY3QgdmVyeSBmZXcgZGlzY3JldGUgZXZlbnRzIHRvIHF1ZXVlIHVwIGFuZCBvbmNlXG4gICAgLy8gd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IHVuYmxvY2tlZCBpdCB3aWxsIGJlIGZhc3QgdG8gcmVwbGF5IHRoZW0uXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVldWVkRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1tpXTtcblxuICAgICAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIHZhciB1bmJsb2NrID0gZnVuY3Rpb24gKHF1ZXVlZEV2ZW50KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgfTtcblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbX2ldO1xuXG4gICAgaWYgKHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHRFeHBsaWNpdFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1swXTtcblxuICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChuZXh0RXhwbGljaXRUYXJnZXQpO1xuXG4gICAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSB1bmJsb2NrZWQuXG4gICAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgRGlzY3JldGVFdmVudCA9IDA7XG52YXIgVXNlckJsb2NraW5nRXZlbnQgPSAxO1xudmFyIENvbnRpbnVvdXNFdmVudCA9IDI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbn07XG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xuXG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG5cbnZhciBzdHlsZSA9IHt9O1xuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5cbmlmIChjYW5Vc2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb247XG4gIH0gLy8gU2FtZSBhcyBhYm92ZVxuXG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cbn1cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlvbicpO1xudmFyIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpO1xudmFyIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpO1xudmFyIGV2ZW50UHJpb3JpdGllcyA9IG5ldyBNYXAoKTsgLy8gV2Ugc3RvcmUgbW9zdCBvZiB0aGUgZXZlbnRzIGluIHRoaXMgbW9kdWxlIGluIHBhaXJzIG9mIHR3byBzdHJpbmdzIHNvIHdlIGNhbiByZS11c2Vcbi8vIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGFwcGx5IHRoZSBzYW1lIGxvZ2ljIGZvciBldmVudCBwcmlvcml0aXphdGlvbiBhbmQgdGhhdCBvZiB0aGVcbi8vIFNpbXBsZUV2ZW50UGx1Z2luLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBzbGlnaHRseSwgYnV0IHRoZSBhaW0gaXMgdG8gcmVkdWNlIGNvZGVcbi8vIGR1cGxpY2F0aW9uIChmb3Igd2hpY2ggdGhlcmUgd291bGQgYmUgcXVpdGUgYSBiaXQpLiBGb3IgdGhlIGV2ZW50cyB0aGF0IGFyZSBub3QgbmVlZGVkXG4vLyBmb3IgdGhlIFNpbXBsZUV2ZW50UGx1Z2luIChvdGhlckRpc2NyZXRlRXZlbnRzKSB3ZSBwcm9jZXNzIHRoZW0gc2VwYXJhdGVseSBhcyBhblxuLy8gYXJyYXkgb2YgdG9wIGxldmVsIGV2ZW50cy5cbi8vIExhc3RseSwgd2UgaWdub3JlIHByZXR0aWVyIHNvIHdlIGNhbiBrZWVwIHRoZSBmb3JtYXR0aW5nIHNhbmUuXG4vLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydjYW5jZWwnLCAnY2FuY2VsJywgJ2NsaWNrJywgJ2NsaWNrJywgJ2Nsb3NlJywgJ2Nsb3NlJywgJ2NvbnRleHRtZW51JywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY29weScsICdjdXQnLCAnY3V0JywgJ2F1eGNsaWNrJywgJ2F1eENsaWNrJywgJ2RibGNsaWNrJywgJ2RvdWJsZUNsaWNrJywgLy8gQ2FyZWZ1bCFcbidkcmFnZW5kJywgJ2RyYWdFbmQnLCAnZHJhZ3N0YXJ0JywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2Ryb3AnLCAnZm9jdXNpbicsICdmb2N1cycsIC8vIENhcmVmdWwhXG4nZm9jdXNvdXQnLCAnYmx1cicsIC8vIENhcmVmdWwhXG4naW5wdXQnLCAnaW5wdXQnLCAnaW52YWxpZCcsICdpbnZhbGlkJywgJ2tleWRvd24nLCAna2V5RG93bicsICdrZXlwcmVzcycsICdrZXlQcmVzcycsICdrZXl1cCcsICdrZXlVcCcsICdtb3VzZWRvd24nLCAnbW91c2VEb3duJywgJ21vdXNldXAnLCAnbW91c2VVcCcsICdwYXN0ZScsICdwYXN0ZScsICdwYXVzZScsICdwYXVzZScsICdwbGF5JywgJ3BsYXknLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyQ2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJEb3duJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVyVXAnLCAncmF0ZWNoYW5nZScsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Jlc2V0JywgJ3NlZWtlZCcsICdzZWVrZWQnLCAnc3VibWl0JywgJ3N1Ym1pdCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaENhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaEVuZCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNoU3RhcnQnLCAndm9sdW1lY2hhbmdlJywgJ3ZvbHVtZUNoYW5nZSddO1xudmFyIG90aGVyRGlzY3JldGVFdmVudHMgPSBbJ2NoYW5nZScsICdzZWxlY3Rpb25jaGFuZ2UnLCAndGV4dElucHV0JywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb251cGRhdGUnXTtcblxuXG52YXIgdXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnZHJhZycsICdkcmFnJywgJ2RyYWdlbnRlcicsICdkcmFnRW50ZXInLCAnZHJhZ2V4aXQnLCAnZHJhZ0V4aXQnLCAnZHJhZ2xlYXZlJywgJ2RyYWdMZWF2ZScsICdkcmFnb3ZlcicsICdkcmFnT3ZlcicsICdtb3VzZW1vdmUnLCAnbW91c2VNb3ZlJywgJ21vdXNlb3V0JywgJ21vdXNlT3V0JywgJ21vdXNlb3ZlcicsICdtb3VzZU92ZXInLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlck1vdmUnLCAncG9pbnRlcm91dCcsICdwb2ludGVyT3V0JywgJ3BvaW50ZXJvdmVyJywgJ3BvaW50ZXJPdmVyJywgJ3Njcm9sbCcsICdzY3JvbGwnLCAndG9nZ2xlJywgJ3RvZ2dsZScsICd0b3VjaG1vdmUnLCAndG91Y2hNb3ZlJywgJ3doZWVsJywgJ3doZWVsJ107IC8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2Fib3J0JywgJ2Fib3J0JywgQU5JTUFUSU9OX0VORCwgJ2FuaW1hdGlvbkVuZCcsIEFOSU1BVElPTl9JVEVSQVRJT04sICdhbmltYXRpb25JdGVyYXRpb24nLCBBTklNQVRJT05fU1RBUlQsICdhbmltYXRpb25TdGFydCcsICdjYW5wbGF5JywgJ2NhblBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnY2FuUGxheVRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZHVyYXRpb25DaGFuZ2UnLCAnZW1wdGllZCcsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnZXJyb3InLCAnZ290cG9pbnRlcmNhcHR1cmUnLCAnZ290UG9pbnRlckNhcHR1cmUnLCAnbG9hZCcsICdsb2FkJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkRGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2FkZWRNZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAnbG9hZFN0YXJ0JywgJ2xvc3Rwb2ludGVyY2FwdHVyZScsICdsb3N0UG9pbnRlckNhcHR1cmUnLCAncGxheWluZycsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3Byb2dyZXNzJywgJ3NlZWtpbmcnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndGltZVVwZGF0ZScsIFRSQU5TSVRJT05fRU5ELCAndHJhbnNpdGlvbkVuZCcsICd3YWl0aW5nJywgJ3dhaXRpbmcnXTtcbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKlxuICogaW50b1xuICpcbiAqIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcChbXG4gKiAgIFsnYWJvcnQnLCAnb25BYm9ydCddLFxuICogXSk7XG4gKlxuICogYW5kIHJlZ2lzdGVycyB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIC8vIEFzIHRoZSBldmVudCB0eXBlcyBhcmUgaW4gcGFpcnMgb2YgdHdvLCB3ZSBuZWVkIHRvIGl0ZXJhdGVcbiAgLy8gdGhyb3VnaCBpbiB0d29zLiBUaGUgZXZlbnRzIGFyZSBpbiBwYWlycyBvZiB0d28gdG8gc2F2ZSBjb2RlXG4gIC8vIGFuZCBpbXByb3ZlIGluaXQgcGVyZiBvZiBwcm9jZXNzaW5nIHRoaXMgYXJyYXksIGFzIGl0IHdpbGxcbiAgLy8gcmVzdWx0IGluIGZhciBmZXdlciBvYmplY3QgYWxsb2NhdGlvbnMgYW5kIHByb3BlcnR5IGFjY2Vzc2VzXG4gIC8vIGlmIHdlIG9ubHkgdXNlIHRocmVlIGFycmF5cyB0byBwcm9jZXNzIGFsbCB0aGUgY2F0ZWdvcmllcyBvZlxuICAvLyBpbnN0ZWFkIG9mIHR1cGxlcy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHRvcEV2ZW50ID0gZXZlbnRUeXBlc1tpXTtcbiAgICB2YXIgZXZlbnQgPSBldmVudFR5cGVzW2kgKyAxXTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50WzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudC5zbGljZSgxKTtcbiAgICB2YXIgcmVhY3ROYW1lID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldCh0b3BFdmVudCwgcHJpb3JpdHkpO1xuICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldCh0b3BFdmVudCwgcmVhY3ROYW1lKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbdG9wRXZlbnRdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFdmVudFByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldChldmVudFR5cGVzW2ldLCBwcmlvcml0eSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpIHtcbiAgdmFyIHByaW9yaXR5ID0gZXZlbnRQcmlvcml0aWVzLmdldChkb21FdmVudE5hbWUpOyAvLyBEZWZhdWx0IHRvIGEgQ29udGludW91c0V2ZW50LiBOb3RlOiB3ZSBtaWdodFxuICAvLyB3YW50IHRvIHdhcm4gaWYgd2UgY2FuJ3QgZGV0ZWN0IHRoZSBwcmlvcml0eVxuICAvLyBmb3IgdGhlIGV2ZW50LlxuXG4gIHJldHVybiBwcmlvcml0eSA9PT0gdW5kZWZpbmVkID8gQ29udGludW91c0V2ZW50IDogcHJpb3JpdHk7XG59XG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZUV2ZW50cygpIHtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIERpc2NyZXRlRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyh1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBVc2VyQmxvY2tpbmdFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBDb250aW51b3VzRXZlbnQpO1xuICBzZXRFdmVudFByaW9yaXRpZXMob3RoZXJEaXNjcmV0ZUV2ZW50cywgRGlzY3JldGVFdmVudCk7XG59XG5cbnZhciBTY2hlZHVsZXJfbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDk3O1xudmFyIExvd1ByaW9yaXR5ID0gOTY7XG52YXIgSWRsZVByaW9yaXR5ID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkgPSA5MDtcbnZhciBpbml0aWFsVGltZU1zID0gU2NoZWR1bGVyX25vdygpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuXG52YXIgU3luY0xhbmVQcmlvcml0eSA9IDE1O1xudmFyIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5ID0gMTQ7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDEzO1xudmFyIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHkgPSAxMjtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMTtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkgPSAxMDtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gOTtcbnZhciBEZWZhdWx0TGFuZVByaW9yaXR5ID0gODtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHkgPSA3O1xudmFyIFRyYW5zaXRpb25Qcmlvcml0eSA9IDY7XG52YXIgUmV0cnlMYW5lUHJpb3JpdHkgPSA1O1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDQ7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDM7XG52YXIgSWRsZUxhbmVQcmlvcml0eSA9IDI7XG52YXIgT2Zmc2NyZWVuTGFuZVByaW9yaXR5ID0gMTtcbnZhciBOb0xhbmVQcmlvcml0eSA9IDA7XG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgU3luY0JhdGNoZWRMYW5lID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICovXG40O1xudmFyIElucHV0RGlzY3JldGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI0O1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICovXG4zMjtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4xOTI7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAqL1xuMjU2O1xudmFyIERlZmF1bHRMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMzU4NDtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBUcmFuc2l0aW9uTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40MTg2MTEyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjYyOTE0NTYwO1xudmFyIFNvbWVSZXRyeUxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMzM1NTQ0MzI7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAqL1xuNjcxMDg4NjQ7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyNztcbnZhciBJZGxlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjg7XG52YXIgSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuODA1MzA2MzY4O1xudmFyIE9mZnNjcmVlbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjEwNzM3NDE4MjQ7XG52YXIgTm9UaW1lc3RhbXAgPSAtMTtcbmZ1bmN0aW9uIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkobmV3TGFuZVByaW9yaXR5KSB7XG59IC8vIFwiUmVnaXN0ZXJzXCIgdXNlZCB0byBcInJldHVyblwiIG11bHRpcGxlIHZhbHVlc1xuLy8gVXNlZCBieSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyBhbmQgZ2V0TmV4dExhbmVzOlxuXG52YXIgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICBpZiAoKFN5bmNMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIGlmICgoU3luY0JhdGNoZWRMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuICB9XG5cbiAgaWYgKChJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXREaXNjcmV0ZUxhbmVzID0gSW5wdXREaXNjcmV0ZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0RGlzY3JldGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXREaXNjcmV0ZUxhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXRDb250aW51b3VzTGFuZXMgPSBJbnB1dENvbnRpbnVvdXNMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dENvbnRpbnVvdXNMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dENvbnRpbnVvdXNMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBEZWZhdWx0SHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIERlZmF1bHRIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGRlZmF1bHRMYW5lcyA9IERlZmF1bHRMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChkZWZhdWx0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGRlZmF1bHRMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbkxhbmVzID0gVHJhbnNpdGlvbkxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHRyYW5zaXRpb25MYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvblByaW9yaXR5O1xuICAgIHJldHVybiB0cmFuc2l0aW9uTGFuZXM7XG4gIH1cblxuICB2YXIgcmV0cnlMYW5lcyA9IFJldHJ5TGFuZXMgJiBsYW5lcztcblxuICBpZiAocmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gUmV0cnlMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIHJldHJ5TGFuZXM7XG4gIH1cblxuICBpZiAobGFuZXMgJiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSWRsZUh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpZGxlTGFuZXMgPSBJZGxlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaWRsZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpZGxlTGFuZXM7XG4gIH1cblxuICBpZiAoKE9mZnNjcmVlbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE9mZnNjcmVlbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHtcbiAgICBlcnJvcignU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gIH0gLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlLCBidXQgYXMgYSBmYWxsYmFjaywgcmV0dXJuIHRoZSBlbnRpcmUgYml0bWFzay5cblxuXG4gIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgcmV0dXJuIGxhbmVzO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTG93U2NoZWR1bGVyUHJpb3JpdHksIHNvbWVob3cuIE1heWJlIHRoZSBzYW1lIGxhbmUgYXMgaHlkcmF0aW9uLlxuICAgICAgcmV0dXJuIERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlTGFuZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOb0xhbmVQcmlvcml0eTtcbiAgfVxufVxuZnVuY3Rpb24gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShsYW5lUHJpb3JpdHkpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OlxuICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9Qcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gIC8vIEVhcmx5IGJhaWxvdXQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmsgbGVmdC5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIG5leHRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciBuZXh0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHZhciBleHBpcmVkTGFuZXMgPSByb290LmV4cGlyZWRMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lczsgLy8gQ2hlY2sgaWYgYW55IHdvcmsgaGFzIGV4cGlyZWQuXG5cbiAgaWYgKGV4cGlyZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIG5leHRMYW5lcyA9IGV4cGlyZWRMYW5lcztcbiAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCB3b3JrIG9uIGFueSBpZGxlIHdvcmsgdW50aWwgYWxsIHRoZSBub24taWRsZSB3b3JrIGhhcyBmaW5pc2hlZCxcbiAgICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cbiAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICAgIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICB2YXIgbm9uSWRsZVVuYmxvY2tlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9uSWRsZVBpbmdlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIHBpbmdlZExhbmVzO1xuXG4gICAgICAgIGlmIChub25JZGxlUGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAodW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgaW4gdGhpcyBwYXRoIGlmIGEgZmFsbGJhY2sgdGltZXIgaXMgbm90IHNjaGVkdWxlZC5cbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfSAvLyBJZiB0aGVyZSBhcmUgaGlnaGVyIHByaW9yaXR5IGxhbmVzLCB3ZSdsbCBpbmNsdWRlIHRoZW0gZXZlbiBpZiB0aGV5XG4gIC8vIGFyZSBzdXNwZW5kZWQuXG5cblxuICBuZXh0TGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhuZXh0TGFuZXMpOyAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAvLyBpdCBhbmQgd2UnbGwgbG9zZSBvdXIgcHJvZ3Jlc3MuIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgdGhlIG5ldyBsYW5lcyBhcmVcbiAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG4gIGlmICh3aXBMYW5lcyAhPT0gTm9MYW5lcyAmJiB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmIC8vIElmIHdlIGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgdGhlbiBpbnRlcnJ1cHRpbmcgaXMgZmluZS4gRG9uJ3RcbiAgLy8gYm90aGVyIHdhaXRpbmcgdW50aWwgdGhlIHJvb3QgaXMgY29tcGxldGUuXG4gICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHdpcExhbmVzKTtcbiAgICB2YXIgd2lwTGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgICBpZiAobmV4dExhbmVQcmlvcml0eSA8PSB3aXBMYW5lUHJpb3JpdHkpIHtcbiAgICAgIHJldHVybiB3aXBMYW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBuZXh0TGFuZVByaW9yaXR5O1xuICAgIH1cbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsIGxpa2VcbiAgLy8gdXNlTXV0YWJsZVNvdXJjZSwgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgLy8gdGltZSB3ZSBhcHBseSB0aGUgZW50YW5nbGVtZW50LlxuXG5cbiAgdmFyIGVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICBpZiAoZW50YW5nbGVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICB2YXIgbGFuZXMgPSBuZXh0TGFuZXMgJiBlbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgbmV4dExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpIHtcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXZlbnRUaW1lID0gZXZlbnRUaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXZlbnRUaW1lID4gbW9zdFJlY2VudEV2ZW50VGltZSkge1xuICAgICAgbW9zdFJlY2VudEV2ZW50VGltZSA9IGV2ZW50VGltZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIHJldHVybiBtb3N0UmVjZW50RXZlbnRUaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogRXhwaXJhdGlvbiBoZXVyaXN0aWMgaXMgY29uc3RhbnQgcGVyIGxhbmUsIHNvIGNvdWxkIHVzZSBhIG1hcC5cbiAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZSk7XG4gIHZhciBwcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gIGlmIChwcmlvcml0eSA+PSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBVc2VyIGludGVyYWN0aW9ucyBzaG91bGQgZXhwaXJlIHNsaWdodGx5IG1vcmUgcXVpY2tseS5cbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy4gV2hlblxuICAgIC8vIHdlIG1hZGUgaXQgbGFyZ2VyLCBhIHByb2R1Y3QgbWV0cmljIGluIHd3dyByZWdyZXNzZWQsIHN1Z2dlc3RpbmcgdGhlcmUnc1xuICAgIC8vIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZiBzeW5jaHJvbm91c1xuICAgIC8vIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZVxuICAgIC8vIHN0YXJ2YXRpb24uIEhvd2V2ZXIsIHRoaXMgc2NlbmFyaW8gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdCBleHBpcmF0aW9uXG4gICAgLy8gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uIGRvZXMgaGFwcGVuLlxuICAgIC8vXG4gICAgLy8gQWxzbyBub3RlIHRoYXQsIGluIHRoZSBjYXNlIG9mIHVzZXIgaW5wdXQgc3BlY2lmaWNhbGx5LCB0aGlzIHdpbGwgc29vbiBub1xuICAgIC8vIGxvbmdlciBiZSBhbiBpc3N1ZSBiZWNhdXNlIHdlIHBsYW4gdG8gbWFrZSB1c2VyIGlucHV0IHN5bmNocm9ub3VzIGJ5XG4gICAgLy8gZGVmYXVsdCAodW50aWwgeW91IGVudGVyIGBzdGFydFRyYW5zaXRpb25gLCBvZiBjb3Vyc2UuKVxuICAgIC8vXG4gICAgLy8gSWYgd2VyZW4ndCBwbGFubmluZyB0byBtYWtlIHRoZXNlIHVwZGF0ZXMgc3luY2hyb25vdXMgc29vbiBhbnl3YXksIElcbiAgICAvLyB3b3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbnVtYmVyIGEgY29uZmlndXJhYmxlIHBhcmFtZXRlci5cbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gIH0gZWxzZSBpZiAocHJpb3JpdHkgPj0gVHJhbnNpdGlvblByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNTAwMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBBbnl0aGluZyBpZGxlIHByaW9yaXR5IG9yIGxvd2VyIHNob3VsZCBuZXZlciBleHBpcmUuXG4gICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHdlIHlpZWxkLiBXZSBjYW4gb3B0aW1pemUgYnkgc3RvcmluZ1xuICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGVuZGluZyBsYW5lcyBhbmQgY2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGVpclxuICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgLy8gaWYgaXQncyBwaW5nZWQsIGFzc3VtZSBpdCdzIENQVS1ib3VuZC4gQ29tcHV0ZSBhIG5ldyBleHBpcmF0aW9uIHRpbWVcbiAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICBpZiAoKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHwgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gQXNzdW1lcyB0aW1lc3RhbXBzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59IC8vIFRoaXMgcmV0dXJucyB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGxhbmVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5XG5mdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KSB7XG4gIHZhciBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+T2Zmc2NyZWVuTGFuZTtcblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybiBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuO1xuICB9XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gJiBPZmZzY3JlZW5MYW5lKSB7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICByZXR1cm4gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCkge1xuICByZXR1cm4gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBOb25JZGxlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgUmV0cnlMYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBhIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVXBkYXRlTGFuZShsYW5lUHJpb3JpdHksIHdpcExhbmVzKSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuXG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0RGlzY3JldGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUyID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXRDb250aW51b3VzTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTIgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKERlZmF1bHRMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTI7XG4gICAgICB9XG5cbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIElmIGFsbCB0aGUgZGVmYXVsdCBsYW5lcyBhcmUgYWxyZWFkeSBiZWluZyB3b3JrZWQgb24sIGxvb2sgZm9yIGFcbiAgICAgICAgICAvLyBsYW5lIGluIHRoZSB0cmFuc2l0aW9uIHJhbmdlLlxuICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAgIC8vIEFsbCB0aGUgdHJhbnNpdGlvbiBsYW5lcyBhcmUgdGFrZW4sIHRvby4gVGhpcyBzaG91bGQgYmUgdmVyeVxuICAgICAgICAgICAgLy8gcmFyZSwgYnV0IGFzIGEgbGFzdCByZXNvcnQsIHBpY2sgYSBkZWZhdWx0IGxhbmUuIFRoaXMgd2lsbCBoYXZlXG4gICAgICAgICAgICAvLyB0aGUgZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMztcbiAgICAgIH1cblxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OiAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kVHJhbnNpdGlvbkxhbmUgaW5zdGVhZFxuXG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRSZXRyeUxhbmUgaW5zdGVhZFxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgfVxuICB9XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVHJhbnNpdGlvbkxhbmUod2lwTGFuZXMsIHBlbmRpbmdMYW5lcykge1xuICAvLyBGaXJzdCBsb29rIGZvciBsYW5lcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHVuY2xhaW1lZCwgaS5lLiBoYXZlIG5vXG4gIC8vIHBlbmRpbmcgd29yay5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+cGVuZGluZ0xhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gSWYgYWxsIGxhbmVzIGhhdmUgcGVuZGluZyB3b3JrLCBsb29rIGZvciBhIGxhbmUgdGhhdCBpc24ndCBjdXJyZW50bHlcbiAgICAvLyBiZWluZyB3b3JrZWQgb24uXG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIGJlaW5nIHdvcmtlZCBvbiwgcGljayBhbnkgbGFuZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRSZXRyeUxhbmUod2lwTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYGZpbmRVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIOKAlCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICByZXR1cm4gbGFuZXMgJiAtbGFuZXM7XG59XG5cbmZ1bmN0aW9uIGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIGZpbmRzIHRoZSBtb3N0IHNpZ25pZmljYW50IG5vbi16ZXJvIGJpdC5cbiAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBOb0xhbmVzIDogMSA8PCBpbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIDw8IDEpIC0gMTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgLy8gYWZmZWN0aW5nIHRoZSBhbGdvcml0aG1zIHdoZXJlIGl0cyB1c2VkLiBIZXJlIEknbSB1c2luZ1xuICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG59XG5mdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgcmV0dXJuIGEgfCBiO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG59IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuLy8gdXBkYXRlcykgdG8gYSBncm91cCBvZiBsYW5lcyAodXNlZCBmb3IgZmx1c2hpbmcgd29yaykuXG5cbmZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBoaWdoZXJQcmlvcml0eUxhbmUoYSwgYikge1xuICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdCByYW5nZXMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gIHJldHVybiBhICE9PSBOb0xhbmUgJiYgYSA8IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAvLyBJbnRlbnRpb25hbGx5IHB1c2hpbmcgb25lIGJ5IG9uZS5cbiAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVG90YWxMYW5lczsgaSsrKSB7XG4gICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSwgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7IC8vIFRPRE86IFRoZW9yZXRpY2FsbHksIGFueSB1cGRhdGUgdG8gYW55IGxhbmUgY2FuIHVuYmxvY2sgYW55IG90aGVyIGxhbmUuIEJ1dFxuICAvLyBpdCdzIG5vdCBwcmFjdGljYWwgdG8gdHJ5IGV2ZXJ5IHNpbmdsZSBwb3NzaWJsZSBjb21iaW5hdGlvbi4gV2UgbmVlZCBhXG4gIC8vIGhldXJpc3RpYyB0byBkZWNpZGUgd2hpY2ggbGFuZXMgdG8gYXR0ZW1wdCB0byByZW5kZXIsIGFuZCBpbiB3aGljaCBiYXRjaGVzLlxuICAvLyBGb3Igbm93LCB3ZSB1c2UgdGhlIHNhbWUgaGV1cmlzdGljIGFzIGluIHRoZSBvbGQgRXhwaXJhdGlvblRpbWVzIG1vZGVsOlxuICAvLyByZXRyeSBhbnkgbGFuZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eSwgYnV0IGRvbid0IHRyeSB1cGRhdGVzIGF0IGhpZ2hlclxuICAvLyBwcmlvcml0eSB3aXRob3V0IGFsc28gaW5jbHVkaW5nIHRoZSBsb3dlciBwcmlvcml0eSB1cGRhdGVzLiBUaGlzIHdvcmtzIHdlbGxcbiAgLy8gd2hlbiBjb25zaWRlcmluZyB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLCBidXQgaXNuJ3RcbiAgLy8gc3VmZmljaWVudCBmb3IgdXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgcHJpb3JpdHksIHNpbmNlIHdlIHdhbnQgdG8gdHJlYXRcbiAgLy8gdGhvc2UgdXBkYXRlcyBhcyBwYXJhbGxlbC5cbiAgLy8gVW5zdXNwZW5kIGFueSB1cGRhdGUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkuXG5cbiAgdmFyIGhpZ2hlclByaW9yaXR5TGFuZXMgPSB1cGRhdGVMYW5lIC0gMTsgLy8gVHVybnMgMGIxMDAwIGludG8gMGIwMTExXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleCh1cGRhdGVMYW5lKTsgLy8gV2UgY2FuIGFsd2F5cyBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGJlY2F1c2Ugd2UgcHJlZmVyIHRoZSBtb3N0XG4gIC8vIHJlY2VudCBldmVudCwgYW5kIHdlIGFzc3VtZSB0aW1lIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cblxuICBldmVudFRpbWVzW2luZGV4XSA9IGV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzLCBldmVudFRpbWUpIHtcbiAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KSB7XG4gIHJvb3QuZXhwaXJlZExhbmVzIHw9IElucHV0RGlzY3JldGVMYW5lcyAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gaGFzRGlzY3JldGVMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgSW5wdXREaXNjcmV0ZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgfD0gdXBkYXRlTGFuZSAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcykge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lczsgLy8gTGV0J3MgdHJ5IGV2ZXJ5dGhpbmcgYWdhaW5cblxuICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gIHJvb3QuZXhwaXJlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gTm9MYW5lcztcbiAgICBldmVudFRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBsYW5lcyA9IGVudGFuZ2xlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gfD0gZW50YW5nbGVkTGFuZXM7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy4gT25seSB1c2VkIG9uIGxhbmVzLCBzbyBhc3N1bWUgaW5wdXQgaXMgYW4gaW50ZWdlci5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2sobGFuZXMpIHtcbiAgaWYgKGxhbmVzID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhsYW5lcykgLyBMTjIgfCAwKSB8IDA7XG59XG5cbi8vIEludGVudGlvbmFsbHkgbm90IG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgd291bGQgdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yXG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5OyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50OlxuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaEV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJXcmFwcGVyLmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKG5hdGl2ZUV2ZW50LnRpbWVTdGFtcCk7XG4gIH1cblxuICBkaXNjcmV0ZVVwZGF0ZXMoZGlzcGF0Y2hFdmVudCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGUoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkoVXNlckJsb2NraW5nUHJpb3JpdHkkMSwgZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICghX2VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWxsb3dSZXBsYXkgPSB0cnVlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiByZXBsYXlpbmcgY2FwdHVyZSBwaGFzZSBldmVudHMgaXMgY3VycmVudGx5IGJyb2tlblxuICAgIC8vIGJlY2F1c2Ugd2UgdXNlZCB0byBkbyBpdCBkdXJpbmcgdG9wLWxldmVsIG5hdGl2ZSBidWJibGUgaGFuZGxlcnNcbiAgICAvLyBidXQgbm93IHdlIHVzZSBkaWZmZXJlbnQgYnViYmxlIGFuZCBjYXB0dXJlIGhhbmRsZXJzLlxuICAgIC8vIEluIGVhZ2VyIG1vZGUsIHdlIGF0dGFjaCBjYXB0dXJlIGxpc3RlbmVycyBlYXJseSwgc28gd2UgbmVlZFxuICAgIC8vIHRvIGZpbHRlciB0aGVtIG91dCB1bnRpbCB3ZSBmaXggdGhlIGxvZ2ljIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cbiAgICAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gb3V0c2lkZSB0aGUgZmxhZyBidXQgSSBwdXQgaXQgaW5zaWRlIHRvIHJlZHVjZSByaXNrLlxuICAgIGFsbG93UmVwbGF5ID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSA9PT0gMDtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSAmJiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpICYmIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cywgYW5kIHRoaXMgaXMgYW5vdGhlciBkaXNjcmV0ZVxuICAgIC8vIGV2ZW50LCB0aGVuIHdlIGNhbid0IGRpc3BhdGNoIGl0IHJlZ2FyZGxlc3Mgb2YgaXRzIHRhcmdldCwgc2luY2UgdGhleVxuICAgIC8vIG5lZWQgdG8gZGlzcGF0Y2ggaW4gb3JkZXIuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KG51bGwsIC8vIEZsYWdzIHRoYXQgd2UncmUgbm90IGFjdHVhbGx5IGJsb2NrZWQgb24gYW55dGhpbmcgYXMgZmFyIGFzIHdlIGtub3cuXG4gICAgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAvLyBXZSBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxuICAgIGlmIChhbGxvd1JlcGxheSkge1xuICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICBpZiAoaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgICAvLyBUaGlzIHRoaXMgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIgb25jZSB0aGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBuZWVkIHRvIGNsZWFyIG9ubHkgaWYgd2UgZGlkbid0IHF1ZXVlIGJlY2F1c2VcbiAgICAvLyBxdWV1ZWluZyBpcyBhY2N1bW11bGF0aXZlLlxuXG5cbiAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCwgdGFyZ2V0Q29udGFpbmVyKTtcbn0gLy8gQXR0ZW1wdCBkaXNwYXRjaGluZyBhbiBldmVudC4gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVE9ETzogV2FybiBpZiBfZW5hYmxlZCBpcyBmYWxzZS5cbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgdHJlZSBoYXMgYmVlbiB1bm1vdW50ZWQgYWxyZWFkeS4gRGlzcGF0Y2ggd2l0aG91dCBhIHRhcmdldC5cbiAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBRdWV1ZSB0aGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIuIEFib3J0IGRpc3BhdGNoaW5nIHNpbmNlIHdlXG4gICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGlzIGV2ZW50IGRpc3BhdGNoZWQgdHdpY2UgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLlxuICAgICAgICAgIC8vIFRPRE86IElmIHRoaXMgaXMgdGhlIGZpcnN0IGRpc2NyZXRlIGV2ZW50IGluIHRoZSBxdWV1ZS4gU2NoZWR1bGUgYW4gaW5jcmVhc2VkXG4gICAgICAgICAgLy8gcHJpb3JpdHkgZm9yIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYnV0IHRvIGF2b2lkIGJsb2NraW5nXG4gICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0sIGRpc3BhdGNoIHRoZSBldmVudCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgICAvLyBUT0RPOiBXYXJuLlxuXG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucyBkdXJpbmcgYSByZXBsYXkgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGl0IG1pZ2h0IGJsb2NrXG4gICAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbS5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAvLyBJZiB3ZSBnZXQgYW4gZXZlbnQgKGV4OiBpbWcgb25sb2FkKSBiZWZvcmUgY29tbWl0dGluZyB0aGF0XG4gICAgICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgICAgIC8vIGV2ZW50IG9uIGEgbm9uLVJlYWN0IHRyZWUpLiBXZSBtaWdodCBhbHNvIGNvbnNpZGVyIHF1ZXVlaW5nIGV2ZW50cyBhbmRcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgdGhlbSBhZnRlciB0aGUgbW91bnQuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpOyAvLyBXZSdyZSBub3QgYmxvY2tlZCBvbiBhbnl0aGluZy5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlOyAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9IC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuXG5cbiAgaWYgKGNoYXJDb2RlID09PSAxMCkge1xuICAgIGNoYXJDb2RlID0gMTM7XG4gIH0gLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG5cblxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhIGZhY3Rvcnkgc28gdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCByZXR1cm5lZCBjb25zdHJ1Y3RvcnMuXG4vLyBJZiB3ZSBoYWQgYSBzaW5nbGUgY29uc3RydWN0b3IsIGl0IHdvdWxkIGJlIG1lZ2Ftb3JwaGljIGFuZCBlbmdpbmVzIHdvdWxkIGRlb3B0LlxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEludGVyZmFjZSkge1xuICAvKipcbiAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAgICovXG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbX3Byb3BOYW1lXTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbX3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9hc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09ICd1bmtub3duJykge1xuICAgICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgICAvLyBhbnkgcmVmZXJlbmNlcyB0byBjYW5jZWxCdWJibGUgdGhyb3cgXCJNZW1iZXIgbm90IGZvdW5kXCIuICBBXG4gICAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKi9cbiAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7Ly8gTW9kZXJuIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gIH0pO1xuXG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHZpZXc6IDAsXG4gIGRldGFpbDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSk7XG52YXIgbGFzdE1vdmVtZW50WDtcbnZhciBsYXN0TW92ZW1lbnRZO1xudmFyIGxhc3RNb3VzZUV2ZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCkge1xuICBpZiAoZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGxhc3RNb3VzZUV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gZXZlbnQuc2NyZWVuWCAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblg7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSAwO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IDA7XG4gICAgfVxuXG4gICAgbGFzdE1vdXNlRXZlbnQgPSBldmVudDtcbiAgfVxufVxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHNjcmVlblg6IDAsXG4gIHNjcmVlblk6IDAsXG4gIGNsaWVudFg6IDAsXG4gIGNsaWVudFk6IDAsXG4gIHBhZ2VYOiAwLFxuICBwYWdlWTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IDAsXG4gIGJ1dHRvbnM6IDAsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ID09PSB1bmRlZmluZWQpIHJldHVybiBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50O1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICB9LFxuICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRYJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WDtcbiAgICB9XG5cbiAgICB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCk7XG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gIH0sXG4gIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFknIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRZO1xuICAgIH0gLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKCkgaGVyZVxuICAgIC8vIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRvIGhhdmUgYWxyZWFkeSBydW4gd2hlbiBtb3ZlbWVudFhcbiAgICAvLyB3YXMgY29waWVkLlxuXG5cbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkYXRhVHJhbnNmZXI6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgcmVsYXRlZFRhcmdldDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgYW5pbWF0aW9uTmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cblxudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xuLy8gSGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBsaXN0IGZvciBub3cuXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICBFc2M6ICdFc2NhcGUnLFxuICBTcGFjZWJhcjogJyAnLFxuICBMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgVXA6ICdBcnJvd1VwJyxcbiAgUmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgRG93bjogJ0Fycm93RG93bicsXG4gIERlbDogJ0RlbGV0ZScsXG4gIFdpbjogJ09TJyxcbiAgTWVudTogJ0NvbnRleHRNZW51JyxcbiAgQXBwczogJ0NvbnRleHRNZW51JyxcbiAgU2Nyb2xsOiAnU2Nyb2xsTG9jaycsXG4gIE1velByaW50YWJsZUtleTogJ1VuaWRlbnRpZmllZCdcbn07XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICc4JzogJ0JhY2tzcGFjZScsXG4gICc5JzogJ1RhYicsXG4gICcxMic6ICdDbGVhcicsXG4gICcxMyc6ICdFbnRlcicsXG4gICcxNic6ICdTaGlmdCcsXG4gICcxNyc6ICdDb250cm9sJyxcbiAgJzE4JzogJ0FsdCcsXG4gICcxOSc6ICdQYXVzZScsXG4gICcyMCc6ICdDYXBzTG9jaycsXG4gICcyNyc6ICdFc2NhcGUnLFxuICAnMzInOiAnICcsXG4gICczMyc6ICdQYWdlVXAnLFxuICAnMzQnOiAnUGFnZURvd24nLFxuICAnMzUnOiAnRW5kJyxcbiAgJzM2JzogJ0hvbWUnLFxuICAnMzcnOiAnQXJyb3dMZWZ0JyxcbiAgJzM4JzogJ0Fycm93VXAnLFxuICAnMzknOiAnQXJyb3dSaWdodCcsXG4gICc0MCc6ICdBcnJvd0Rvd24nLFxuICAnNDUnOiAnSW5zZXJ0JyxcbiAgJzQ2JzogJ0RlbGV0ZScsXG4gICcxMTInOiAnRjEnLFxuICAnMTEzJzogJ0YyJyxcbiAgJzExNCc6ICdGMycsXG4gICcxMTUnOiAnRjQnLFxuICAnMTE2JzogJ0Y1JyxcbiAgJzExNyc6ICdGNicsXG4gICcxMTgnOiAnRjcnLFxuICAnMTE5JzogJ0Y4JyxcbiAgJzEyMCc6ICdGOScsXG4gICcxMjEnOiAnRjEwJyxcbiAgJzEyMic6ICdGMTEnLFxuICAnMTIzJzogJ0YxMicsXG4gICcxNDQnOiAnTnVtTG9jaycsXG4gICcxNDUnOiAnU2Nyb2xsTG9jaycsXG4gICcyMjQnOiAnTWV0YSdcbn07XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcblxuICAgIGlmIChrZXkgIT09ICdVbmlkZW50aWZpZWQnKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfSAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG5cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpOyAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cblxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gMTMgPyAnRW50ZXInIDogU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gIH1cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbW9kaWZpZXIga2V5IHRvIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBldmVudC5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNrZXlzLU1vZGlmaWVyc1xuICovXG5cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07IC8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG5cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGNvZGU6IDAsXG4gIGxvY2F0aW9uOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICByZXBlYXQ6IDAsXG4gIGxvY2FsZTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFBvaW50ZXJFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzL1xuICovXG5cbnZhciBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICB0b3VjaGVzOiAwLFxuICB0YXJnZXRUb3VjaGVzOiAwLFxuICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59KTtcblxudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb3VjaEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cblxudmFyIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHByb3BlcnR5TmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBXaGVlbEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQmVmb3JlSW5wdXQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2tleXByZXNzJywgJ3RleHRJbnB1dCcsICdwYXN0ZSddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uRW5kJywgWydjb21wb3NpdGlvbmVuZCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uU3RhcnQnLCBbJ2NvbXBvc2l0aW9uc3RhcnQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblVwZGF0ZScsIFsnY29tcG9zaXRpb251cGRhdGUnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG59IC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cblxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblN0YXJ0JztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvbkVuZCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbnVwZGF0ZSc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25VcGRhdGUnO1xuICB9XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcblxuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbXBvc2l0aW9uIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgS29yZWFuIElNRS5cbiAqIE91ciBmYWxsYmFjayBtb2RlIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIElFJ3MgS29yZWFuIElNRSxcbiAqIHNvIGp1c3QgdXNlIG5hdGl2ZSBjb21wb3NpdGlvbiBldmVudHMgd2hlbiBLb3JlYW4gSU1FIGlzIHVzZWQuXG4gKiBBbHRob3VnaCBDb21wb3NpdGlvbkV2ZW50LmxvY2FsZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLFxuICogaXQgaXMgYXZhaWxhYmxlIGluIElFLCB3aGVyZSBvdXIgZmFsbGJhY2sgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG5hdGl2ZUV2ZW50LmxvY2FsZSA9PT0gJ2tvJztcbn0gLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIHN0YXR1cywgaWYgYW55LlxuXG5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cblxuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvblN0YXJ0JztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25FbmQnO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFpc0NvbXBvc2luZyAmJiBldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uU3RhcnQnKSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZykge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBnZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCBldmVudFR5cGUpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KGV2ZW50VHlwZSwgZG9tRXZlbnROYW1lLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuXG4gICAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuXG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlICd0ZXh0SW5wdXQnOlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhOyAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdC5cblxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmICghaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIC8vIElFIGZpcmVzIHRoZSBga2V5cHJlc3NgIGV2ZW50IHdoZW4gYSB1c2VyIHR5cGVzIGFuIGVtb2ppIHZpYVxuICAgICAgICAvLyBUb3VjaCBrZXlib2FyZCBvZiBXaW5kb3dzLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBgY2hhcmAgcHJvcGVydHlcbiAgICAgICAgLy8gaG9sZHMgYW4gZW1vamkgY2hhcmFjdGVyIGxpa2UgYFxcdUQ4M0RcXHVERTBBYC4gIEJlY2F1c2UgaXRzIGxlbmd0aFxuICAgICAgICAvLyBpcyAyLCB0aGUgcHJvcGVydHkgYHdoaWNoYCBkb2VzIG5vdCByZXByZXNlbnQgYW4gZW1vamkgY29ycmVjdGx5LlxuICAgICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgd2UgZGlyZWN0bHkgcmV0dXJuIHRoZSBgY2hhcmAgcHJvcGVydHkgaW5zdGVhZCBvZlxuICAgICAgICAvLyB1c2luZyBgd2hpY2hgLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQuY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVFdmVudC53aGljaCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuXG5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCAnb25CZWZvcmVJbnB1dCcpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KCdvbkJlZm9yZUlucHV0JywgJ2JlZm9yZWlucHV0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgICBldmVudC5kYXRhID0gY2hhcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMSgpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNoYW5nZScsIFsnY2hhbmdlJywgJ2NsaWNrJywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnaW5wdXQnLCAna2V5ZG93bicsICdrZXl1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cbiAgZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGluc3QsICdvbkNoYW5nZScpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25DaGFuZ2UnLCAnY2hhbmdlJywgbnVsbCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cblxuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuXG4gIGJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCk7XG5cbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cblxuXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNpbicpIHtcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufSAvLyBGb3IgSUU4IGFuZCBJRTkuXG5cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCk7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2lucHV0JyB8fCBkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xsZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsICdudW1iZXInLCBub2RlLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuXG4gIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgfVxuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1JFUExBWUVEKSA9PT0gMCkge1xuICAgIC8vIElmIHRoaXMgaXMgYW4gb3ZlciBldmVudCB3aXRoIGEgdGFyZ2V0LCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgZGlzcGF0Y2hlZFxuICAgIC8vIHRoZSBldmVudCBpbiB0aGUgb3V0IGV2ZW50IG9mIHRoZSBvdGhlciB0YXJnZXQuIElmIHRoaXMgaXMgcmVwbGF5ZWQsXG4gICAgLy8gdGhlbiBpdCdzIGJlY2F1c2Ugd2UgY291bGRuJ3QgZGlzcGF0Y2ggYWdhaW5zdCB0aGlzIHRhcmdldCBwcmV2aW91c2x5XG4gICAgLy8gc28gd2UgaGF2ZSB0byBkbyBpdCBub3cgaW5zdGVhZC5cbiAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQ7XG5cbiAgICBpZiAocmVsYXRlZCkge1xuICAgICAgLy8gSWYgdGhlIHJlbGF0ZWQgbm9kZSBpcyBtYW5hZ2VkIGJ5IFJlYWN0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZVxuICAgICAgLy8gYWxyZWFkeSBkaXNwYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50cyBkdXJpbmcgaXRzIG1vdXNlb3V0LlxuICAgICAgaWYgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIHx8IGlzQ29udGFpbmVyTWFya2VkQXNSb290KHJlbGF0ZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3V0RXZlbnQgJiYgIWlzT3ZlckV2ZW50KSB7XG4gICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBvciBwb2ludGVyIGluIG9yIG91dCAtIGlnbm9yaW5nLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB3aW47IC8vIFRPRE86IHdoeSBpcyB0aGlzIG51bGxhYmxlIGluIHRoZSB0eXBlcyBidXQgd2UgcmVhZCBmcm9tIGl0P1xuXG4gIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gYG5hdGl2ZUV2ZW50VGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKGRvYykge1xuICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbiA9IHdpbmRvdztcbiAgICB9XG4gIH1cblxuICB2YXIgZnJvbTtcbiAgdmFyIHRvO1xuXG4gIGlmIChpc091dEV2ZW50KSB7XG4gICAgdmFyIF9yZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQ7XG5cbiAgICBmcm9tID0gdGFyZ2V0SW5zdDtcbiAgICB0byA9IF9yZWxhdGVkID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoX3JlbGF0ZWQpIDogbnVsbDtcblxuICAgIGlmICh0byAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0byk7XG5cbiAgICAgIGlmICh0byAhPT0gbmVhcmVzdE1vdW50ZWQgfHwgdG8udGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHRvLnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgdG8gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBNb3ZpbmcgdG8gYSBub2RlIGZyb20gb3V0c2lkZSB0aGUgd2luZG93LlxuICAgIGZyb20gPSBudWxsO1xuICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgfVxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgdmFyIGxlYXZlRXZlbnRUeXBlID0gJ29uTW91c2VMZWF2ZSc7XG4gIHZhciBlbnRlckV2ZW50VHlwZSA9ICdvbk1vdXNlRW50ZXInO1xuICB2YXIgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInKSB7XG4gICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgIGxlYXZlRXZlbnRUeXBlID0gJ29uUG9pbnRlckxlYXZlJztcbiAgICBlbnRlckV2ZW50VHlwZSA9ICdvblBvaW50ZXJFbnRlcic7XG4gICAgZXZlbnRUeXBlUHJlZml4ID0gJ3BvaW50ZXInO1xuICB9XG5cbiAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShmcm9tKTtcbiAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKHRvKTtcbiAgdmFyIGxlYXZlID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihsZWF2ZUV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJywgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgbGVhdmUudGFyZ2V0ID0gZnJvbU5vZGU7XG4gIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0b05vZGU7XG4gIHZhciBlbnRlciA9IG51bGw7IC8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3MgdGhpcyBuYXRpdmVFdmVudCBpZiB3ZSBhcmUgcHJvY2Vzc2luZ1xuICAvLyB0aGUgZmlyc3QgYW5jZXN0b3IuIE5leHQgdGltZSwgd2Ugd2lsbCBpZ25vcmUgdGhlIGV2ZW50LlxuXG4gIHZhciBuYXRpdmVUYXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChuYXRpdmVUYXJnZXRJbnN0ID09PSB0YXJnZXRJbnN0KSB7XG4gICAgdmFyIGVudGVyRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGVudGVyRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnZW50ZXInLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlckV2ZW50LnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlckV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBlbnRlciA9IGVudGVyRXZlbnQ7XG4gIH1cblxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xufVxuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFvYmplY3RJcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBvdXRlck5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0cyhvdXRlck5vZGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBvdXRlck5vZGUub3duZXJEb2N1bWVudDtcbiAgdmFyIHdpbiA9IG93bmVyRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uICYmIHdpbi5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7IC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cbi8qKlxuICogUmV0dXJucyB7c3RhcnQsIGVuZH0gd2hlcmUgYHN0YXJ0YCBpcyB0aGUgY2hhcmFjdGVyL2NvZGVwb2ludCBpbmRleCBvZlxuICogKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCkgd2l0aGluIHRoZSB0ZXh0Q29udGVudCBvZiBgb3V0ZXJOb2RlYCwgYW5kXG4gKiBgZW5kYCBpcyB0aGUgaW5kZXggb2YgKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpLlxuICpcbiAqIFJldHVybnMgbnVsbCBpZiB5b3UgcGFzcyBpbiBnYXJiYWdlIGlucHV0IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjcmFzaC5cbiAqXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nLlxuICovXG5cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZvY3VzTm9kZSAmJiAoZm9jdXNPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBlbmQgPSBsZW5ndGggKyBmb2N1c09mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgICBsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIGZpcnN0IGNoaWxkIGBuZXh0YC5cblxuXG4gICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gb3V0ZXJOb2RlKSB7XG4gICAgICAgIC8vIElmIGBvdXRlck5vZGVgIGhhcyBjaGlsZHJlbiwgdGhpcyBpcyBhbHdheXMgdGhlIHNlY29uZCB0aW1lIHZpc2l0aW5nXG4gICAgICAgIC8vIGl0LiBJZiBpdCBoYXMgbm8gY2hpbGRyZW4sIHRoaXMgaXMgc3RpbGwgdGhlIGZpcnN0IGxvb3AsIGFuZCB0aGUgb25seVxuICAgICAgICAvLyB2YWxpZCBzZWxlY3Rpb24gaXMgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGJvdGggZXF1YWwgdG8gdGhpcyBub2RlXG4gICAgICAgIC8vIGFuZCBib3RoIG9mZnNldHMgMCwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgaGFuZGxlZCBhYm92ZS5cbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBhbmNob3JOb2RlICYmICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5uZXh0U2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cblxuXG4gICAgbm9kZSA9IG5leHQ7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIChXb3VsZCBoYXBwZW4gaWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhcmVuJ3RcbiAgICAvLyBhY3R1YWxseSBpbnNpZGUgdGhlIHBhc3NlZC1pbiBub2RlLilcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kXG4gIH07XG59XG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNpb25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuXG5mdW5jdGlvbiBzZXRPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIGRvYyA9IG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgdmFyIHdpbiA9IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93OyAvLyBFZGdlIGZhaWxzIHdpdGggXCJPYmplY3QgZXhwZWN0ZWRcIiBpbiBzb21lIHNjZW5hcmlvcy5cbiAgLy8gKEZvciBpbnN0YW5jZTogVGlueU1DRSBlZGl0b3IgdXNlZCBpbiBhIGxpc3QgY29tcG9uZW50IHRoYXQgc3VwcG9ydHMgcGFzdGluZyB0byBhZGQgbW9yZSxcbiAgLy8gZmFpbHMgd2hlbiBwYXN0aW5nIDEwMCsgaXRlbXMpXG5cbiAgaWYgKCF3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRoLm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7IC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMSAmJiBzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc3RhcnRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzdGFydE1hcmtlci5vZmZzZXQgJiYgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gZW5kTWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ID09PSBlbmRNYXJrZXIub2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuICAgIHJldHVybiB0eXBlb2YgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PT0gJ3N0cmluZyc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcCgpIHtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KCk7XG5cbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQod2luLmRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cblxuLyoqXG4gKiBAaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiB3ZSBnZXQgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IHNlbGVjdGlvblxuICogZnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkby1ub3QtYXBwbHksIGxvb2tpbmcgYXQgYHNlbGVjdGlvblN0YXJ0YFxuICogYW5kIGBzZWxlY3Rpb25FbmRgIHJvd3MuXG4gKi9cblxuXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKSB7XG4gIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHJldHVybiB7XG4gICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgIHNlbGVjdGlvblJhbmdlOiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgfTtcbn1cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5cbmZ1bmN0aW9uIHJlc3RvcmVTZWxlY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gIHZhciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SYW5nZTtcblxuICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYgaXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgaWYgKHByaW9yU2VsZWN0aW9uUmFuZ2UgIT09IG51bGwgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBzZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwgcHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgfSAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuXG5cbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIGFuY2VzdG9yID0gcHJpb3JGb2N1c2VkRWxlbTtcblxuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAZ2V0U2VsZWN0aW9uOiBHZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3RhcnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25TZWxlY3QnLCBbJ2ZvY3Vzb3V0JywgJ2NvbnRleHRtZW51JywgJ2RyYWdlbmQnLCAnZm9jdXNpbicsICdrZXlkb3duJywgJ2tleXVwJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uJDEobm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG4vKipcbiAqIEdldCBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRUYXJnZXRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICB2YXIgZG9jID0gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50JDEgPT0gbnVsbCB8fCBhY3RpdmVFbGVtZW50JDEgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0JDEsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG5cbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIC8vIFRyYWNrIHRoZSBpbnB1dCBub2RlIHRoYXQgaGFzIGZvY3VzLlxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0O1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuXG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgLy9cbiAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuXG4gICAgY2FzZSAnc2VsZWN0aW9uY2hhbmdlJzpcbiAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciByZWFjdE5hbWUgPSB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5nZXQoZG9tRXZlbnROYW1lKTtcblxuICBpZiAocmVhY3ROYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQ7XG4gIHZhciByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2ZvY3VzJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2JsdXInO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYmVmb3JlYmx1cic6XG4gICAgY2FzZSAnYWZ0ZXJibHVyJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgLy8gdW53YW50ZWQgY2xpY2sgZXZlbnRzLlxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdhdXhjbGljayc6XG4gICAgY2FzZSAnZGJsY2xpY2snOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnbW91c2Vtb3ZlJzpcbiAgICBjYXNlICdtb3VzZXVwJzogLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZyc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnZXhpdCc6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICBjYXNlICdkcmFnb3Zlcic6XG4gICAgY2FzZSAnZHJhZ3N0YXJ0JzpcbiAgICBjYXNlICdkcm9wJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndG91Y2hjYW5jZWwnOlxuICAgIGNhc2UgJ3RvdWNoZW5kJzpcbiAgICBjYXNlICd0b3VjaG1vdmUnOlxuICAgIGNhc2UgJ3RvdWNoc3RhcnQnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBBTklNQVRJT05fRU5EOlxuICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFRSQU5TSVRJT05fRU5EOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzY3JvbGwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnd2hlZWwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29weSc6XG4gICAgY2FzZSAnY3V0JzpcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAncG9pbnRlcmNhbmNlbCc6XG4gICAgY2FzZSAncG9pbnRlcmRvd24nOlxuICAgIGNhc2UgJ3BvaW50ZXJtb3ZlJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcnVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICB7XG4gICAgLy8gU29tZSBldmVudHMgZG9uJ3QgYnViYmxlIGluIHRoZSBicm93c2VyLlxuICAgIC8vIEluIHRoZSBwYXN0LCBSZWFjdCBoYXMgYWx3YXlzIGJ1YmJsZWQgdGhlbSwgYnV0IHRoaXMgY2FuIGJlIHN1cnByaXNpbmcuXG4gICAgLy8gV2UncmUgZ29pbmcgdG8gdHJ5IGFsaWduaW5nIGNsb3NlciB0byB0aGUgYnJvd3NlciBiZWhhdmlvciBieSBub3QgYnViYmxpbmdcbiAgICAvLyB0aGVtIGluIFJlYWN0IGVpdGhlci4gV2UnbGwgc3RhcnQgYnkgbm90IGJ1YmJsaW5nIG9uU2Nyb2xsLCBhbmQgdGhlbiBleHBhbmQuXG4gICAgdmFyIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gIWluQ2FwdHVyZVBoYXNlICYmIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhZGQgYWxsIGV2ZW50cyBmcm9tXG4gICAgLy8gbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QgaW4gRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG4gICAgLy8gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBsaXN0LlxuICAgIC8vIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UgdGhhdCBjYW4gd2FpdCB1bnRpbCBSZWFjdCAxOC5cbiAgICBkb21FdmVudE5hbWUgPT09ICdzY3JvbGwnO1xuXG4gICAgdmFyIF9saXN0ZW5lcnMgPSBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudC50eXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpO1xuXG4gICAgaWYgKF9saXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgZXZlbnQgbGF6aWx5LlxuICAgICAgdmFyIF9ldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IF9ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBfbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogcmVtb3ZlIHRvcC1sZXZlbCBzaWRlIGVmZmVjdC5cbnJlZ2lzdGVyU2ltcGxlRXZlbnRzKCk7XG5yZWdpc3RlckV2ZW50cyQyKCk7XG5yZWdpc3RlckV2ZW50cyQxKCk7XG5yZWdpc3RlckV2ZW50cyQzKCk7XG5yZWdpc3RlckV2ZW50cygpO1xuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICAvLyBUT0RPOiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25jZXB0IG9mIGEgXCJTaW1wbGVFdmVudFBsdWdpblwiLlxuICAvLyBUaGlzIGlzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBldmVudCBzeXN0ZW0uIEFsbFxuICAvLyB0aGUgb3RoZXIgcGx1Z2lucyBhcmUgZXNzZW50aWFsbHkgcG9seWZpbGxzLiBTbyB0aGUgcGx1Z2luXG4gIC8vIHNob3VsZCBwcm9iYWJseSBiZSBpbmxpbmVkIHNvbWV3aGVyZSBhbmQgaGF2ZSBpdHMgbG9naWNcbiAgLy8gYmUgY29yZSB0aGUgdG8gZXZlbnQgc3lzdGVtLiBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93XG4gIC8vIHVzIHRvIHNoaXAgYnVpbGRzIG9mIFJlYWN0IHdpdGhvdXQgdGhlIHBvbHlmaWxsZWQgcGx1Z2lucyBiZWxvdy5cbiAgZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgdmFyIHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TKSA9PT0gMDsgLy8gV2UgZG9uJ3QgcHJvY2VzcyB0aGVzZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiB0aGVcbiAgLy8gZXZlbnQncyBuYXRpdmUgXCJidWJibGVcIiBwaGFzZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZVxuICAvLyBub3QgaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFRoYXQncyBiZWNhdXNlIHdlIGVtdWxhdGVcbiAgLy8gdGhlIGNhcHR1cmUgcGhhc2UgaGVyZSBzdGlsbC4gVGhpcyBpcyBhIHRyYWRlLW9mZixcbiAgLy8gYmVjYXVzZSBpbiBhbiBpZGVhbCB3b3JsZCB3ZSB3b3VsZCBub3QgZW11bGF0ZSBhbmQgdXNlXG4gIC8vIHRoZSBwaGFzZXMgcHJvcGVybHksIGxpa2Ugd2UgZG8gd2l0aCB0aGUgU2ltcGxlRXZlbnRcbiAgLy8gcGx1Z2luLiBIb3dldmVyLCB0aGUgcGx1Z2lucyBiZWxvdyBlaXRoZXIgZXhwZWN0XG4gIC8vIGVtdWxhdGlvbiAoRW50ZXJMZWF2ZSkgb3IgdXNlIHN0YXRlIGxvY2FsaXplZCB0byB0aGF0XG4gIC8vIHBsdWdpbiAoQmVmb3JlSW5wdXQsIENoYW5nZSwgU2VsZWN0KS4gVGhlIHN0YXRlIGluXG4gIC8vIHRoZXNlIG1vZHVsZXMgY29tcGxpY2F0ZXMgdGhpbmdzLCBhcyB5b3UnbGwgZXNzZW50aWFsbHlcbiAgLy8gZ2V0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlIHBoYXNlIGV2ZW50IG1pZ2h0IGNoYW5nZVxuICAvLyBzdGF0ZSwgb25seSBmb3IgdGhlIGZvbGxvd2luZyBidWJibGUgZXZlbnQgdG8gY29tZSBpblxuICAvLyBsYXRlciBhbmQgbm90IHRyaWdnZXIgYW55dGhpbmcgYXMgdGhlIHN0YXRlIG5vd1xuICAvLyBpbnZhbGlkYXRlcyB0aGUgaGV1cmlzdGljcyBvZiB0aGUgZXZlbnQgcGx1Z2luLiBXZVxuICAvLyBjb3VsZCBhbHRlciBhbGwgdGhlc2UgcGx1Z2lucyB0byB3b3JrIGluIHN1Y2ggd2F5cywgYnV0XG4gIC8vIHRoYXQgbWlnaHQgY2F1c2Ugb3RoZXIgdW5rbm93biBzaWRlLWVmZmVjdHMgdGhhdCB3ZVxuICAvLyBjYW4ndCBmb3JzZWUgcmlnaHQgbm93LlxuXG4gIGlmIChzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zKSB7XG4gICAgZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn0gLy8gTGlzdCBvZiBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluZGl2aWR1YWxseSBhdHRhY2hlZCB0byBtZWRpYSBlbGVtZW50cy5cblxuXG52YXIgbWVkaWFFdmVudFR5cGVzID0gWydhYm9ydCcsICdjYW5wbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ3BhdXNlJywgJ3BsYXknLCAncGxheWluZycsICdwcm9ncmVzcycsICdyYXRlY2hhbmdlJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICd0b2dnbGUnXS5jb25jYXQobWVkaWFFdmVudFR5cGVzKSk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciBwcmV2aW91c0luc3RhbmNlO1xuXG4gIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgIGZvciAodmFyIGkgPSBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRpID0gZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sXG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBsaXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJF9pID0gZGlzcGF0Y2hMaXN0ZW5lcnNbX2ldLFxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5pbnN0YW5jZSxcbiAgICAgICAgICBfY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIF9saXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKF9pbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBfbGlzdGVuZXIsIF9jdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGxpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpOyAvLyAgZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciA9IGZhbHNlO1xuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldEVsZW1lbnQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldEVsZW1lbnQsIGRvbUV2ZW50TmFtZSwgSVNfTk9OX0RFTEVHQVRFRCwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxudmFyIGxpc3RlbmluZ01hcmtlciA9ICdfcmVhY3RMaXN0ZW5pbmcnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5mdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG9uJ3QgaXRlcmF0ZSB0aHJvdWdoIGV2ZW50c1xuICAgICAgLy8gZm9yIHRoZSBzYW1lIHBvcnRhbCBjb250YWluZXIgb3Igcm9vdCBub2RlIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgLy8gVE9ETzogb25jZSB3ZSByZW1vdmUgdGhlIGZsYWcsIHdlIG1heSBiZSBhYmxlIHRvIGFsc29cbiAgICAgIC8vIHJlbW92ZSBzb21lIG9mIHRoZSBib29ra2VlcGluZyBtYXBzIHVzZWQgZm9yIGxhemluZXNzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmICghbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBmYWxzZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgdHJ1ZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50U3lzdGVtRmxhZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XG4gIHZhciB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudDsgLy8gc2VsZWN0aW9uY2hhbmdlIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudFxuICAvLyBvdGhlcndpc2UgaXQgd29uJ3QgY2FwdHVyZSBpbmNvbWluZyBldmVudHMgdGhhdCBhcmUgb25seVxuICAvLyB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LlxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnICYmIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgfSAvLyBJZiB0aGUgZXZlbnQgY2FuIGJlIGRlbGVnYXRlZCAob3IgaXMgY2FwdHVyZSBwaGFzZSksIHdlIGNhblxuICAvLyByZWdpc3RlciBpdCB0byB0aGUgcm9vdCBjb250YWluZXIuIE90aGVyd2lzZSwgd2Ugc2hvdWxkXG4gIC8vIHJlZ2lzdGVyIHRoZSBldmVudCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIG1hcmsgaXQgYXNcbiAgLy8gYSBub24tZGVsZWdhdGVkIGV2ZW50LlxuXG5cbiAgaWYgKHRhcmdldEVsZW1lbnQgIT09IG51bGwgJiYgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gRm9yIGFsbCBub24tZGVsZWdhdGVkIGV2ZW50cywgYXBhcnQgZnJvbSBzY3JvbGwsIHdlIGF0dGFjaFxuICAgIC8vIHRoZWlyIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgcmVzcGVjdGl2ZSBlbGVtZW50cyB0aGF0IHRoZWlyXG4gICAgLy8gZXZlbnRzIGZpcmUgb24uIFRoYXQgbWVhbnMgd2UgY2FuIHNraXAgdGhpcyBzdGVwLCBhcyBldmVudFxuICAgIC8vIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgcHJldmlvdXNseS4gSG93ZXZlciwgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgdGhlIHNjcm9sbCBldmVudCBiZWNhdXNlIHRoZSByZWFsaXR5IGlzIHRoYXQgYW55XG4gICAgLy8gZWxlbWVudCBjYW4gc2Nyb2xsLlxuICAgIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhcHBseSB0aGUgc2FtZSBsb2dpYyB0byBhbGxcbiAgICAvLyBldmVudHMgZnJvbSB0aGUgbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QuIFRoZW4gd2UgY2FuIHJlbW92ZVxuICAgIC8vIHRoaXMgc3BlY2lhbCBjYXNlIGFuZCB1c2UgdGhlIHNhbWUgbG9naWMgZm9yIGFsbCBldmVudHMuXG4gICAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX05PTl9ERUxFR0FURUQ7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTsgLy8gSWYgdGhlIGxpc3RlbmVyIGVudHJ5IGlzIGVtcHR5IG9yIHdlIHNob3VsZCB1cGdyYWRlLCB0aGVuXG4gIC8vIHdlIG5lZWQgdG8gdHJhcCBhbiBldmVudCBsaXN0ZW5lciBvbnRvIHRoZSB0YXJnZXQuXG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfQ0FQVFVSRV9QSEFTRTtcbiAgICB9XG5cbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgaXNEZWZlcnJlZExpc3RlbmVyRm9yTGVnYWN5RkJTdXBwb3J0KSB7XG4gIHZhciBsaXN0ZW5lciA9IGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKTsgLy8gSWYgcGFzc2l2ZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZXZlbnQgd2lsbCBiZVxuICAvLyBhY3RpdmUgYW5kIG5vdCBwYXNzaXZlLlxuXG4gIHZhciBpc1Bhc3NpdmVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxuICBpZiAocGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQpIHtcbiAgICAvLyBCcm93c2VycyBpbnRyb2R1Y2VkIGFuIGludGVydmVudGlvbiwgbWFraW5nIHRoZXNlIGV2ZW50c1xuICAgIC8vIHBhc3NpdmUgYnkgZGVmYXVsdCBvbiBkb2N1bWVudC4gUmVhY3QgZG9lc24ndCBiaW5kIHRoZW1cbiAgICAvLyB0byBkb2N1bWVudCBhbnltb3JlLCBidXQgY2hhbmdpbmcgdGhpcyBub3cgd291bGQgdW5kb1xuICAgIC8vIHRoZSBwZXJmb3JtYW5jZSB3aW5zIGZyb20gdGhlIGNoYW5nZS4gU28gd2UgZW11bGF0ZVxuICAgIC8vIHRoZSBleGlzdGluZyBiZWhhdmlvciBtYW51YWxseSBvbiB0aGUgcm9vdHMgbm93LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTk2NTFcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAndG91Y2hzdGFydCcgfHwgZG9tRXZlbnROYW1lID09PSAndG91Y2htb3ZlJyB8fCBkb21FdmVudE5hbWUgPT09ICd3aGVlbCcpIHtcbiAgICAgIGlzUGFzc2l2ZUxpc3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0YXJnZXRDb250YWluZXIgPSAgdGFyZ2V0Q29udGFpbmVyO1xuICB2YXIgdW5zdWJzY3JpYmVMaXN0ZW5lcjsgLy8gV2hlbiBsZWdhY3lGQlN1cHBvcnQgaXMgZW5hYmxlZCwgaXQncyBmb3Igd2hlbiB3ZVxuXG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHJldHVybiBncmFuZENvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyIHx8IGdyYW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgZ3JhbmRDb250YWluZXIucGFyZW50Tm9kZSA9PT0gdGFyZ2V0Q29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0O1xuXG4gIGlmICgoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFKSA9PT0gMCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX05PTl9ERUxFR0FURUQpID09PSAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lck5vZGUgPSB0YXJnZXRDb250YWluZXI7IC8vIElmIHdlIGFyZSB1c2luZyB0aGUgbGVnYWN5IEZCIHN1cHBvcnQgZmxhZywgd2VcblxuICAgIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgYmVsb3cgbG9naWMgYXR0ZW1wdHMgdG8gd29yayBvdXQgaWYgd2UgbmVlZCB0byBjaGFuZ2VcbiAgICAgIC8vIHRoZSB0YXJnZXQgZmliZXIgdG8gYSBkaWZmZXJlbnQgYW5jZXN0b3IuIFdlIGhhZCBzaW1pbGFyIGxvZ2ljXG4gICAgICAvLyBpbiB0aGUgbGVnYWN5IGV2ZW50IHN5c3RlbSwgZXhjZXB0IHRoZSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBzeXN0ZW1zIGlzIHRoYXQgdGhlIG1vZGVybiBldmVudCBzeXN0ZW0gbm93IGhhcyBhbiBldmVudCBsaXN0ZW5lclxuICAgICAgLy8gYXR0YWNoZWQgdG8gZWFjaCBSZWFjdCBSb290IGFuZCBSZWFjdCBQb3J0YWwgUm9vdC4gVG9nZXRoZXIsXG4gICAgICAvLyB0aGUgRE9NIG5vZGVzIHJlcHJlc2VudGluZyB0aGVzZSByb290cyBhcmUgdGhlIFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gVG8gZmlndXJlIG91dCB3aGljaCBhbmNlc3RvciBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLCB3ZSB0cmF2ZXJzZVxuICAgICAgLy8gdXAgdGhlIGZpYmVyIHRyZWUgZnJvbSB0aGUgdGFyZ2V0IGluc3RhbmNlIGFuZCBhdHRlbXB0IHRvIGZpbmRcbiAgICAgIC8vIHJvb3QgYm91bmRhcmllcyB0aGF0IG1hdGNoIHRoYXQgb2Ygb3VyIGN1cnJlbnQgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBJZiB3ZSBmaW5kIHRoYXQgXCJyb290Q29udGFpbmVyXCIsIHdlIGZpbmQgdGhlIHBhcmVudCBmaWJlclxuICAgICAgLy8gc3ViLXRyZWUgZm9yIHRoYXQgcm9vdCBhbmQgbWFrZSB0aGF0IG91ciBhbmNlc3RvciBpbnN0YW5jZS5cbiAgICAgIHZhciBub2RlID0gdGFyZ2V0SW5zdDtcblxuICAgICAgbWFpbkxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVUYWcgPSBub2RlLnRhZztcblxuICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFJvb3QgfHwgbm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGNvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGEgcG9ydGFsLCBidXQgaXQncyBub3QgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IuXG4gICAgICAgICAgICAvLyBOb3JtYWxseSBwb3J0YWxzIGhhbmRsZSB0aGVpciBvd24gZXZlbnRzIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBTbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBzdG9wIG5vdy4gSG93ZXZlciwgd2UgZG9uJ3Qga25vdyBpZiB0aGlzIHBvcnRhbFxuICAgICAgICAgICAgLy8gd2FzIHBhcnQgb2YgKm91ciogcm9vdC5cbiAgICAgICAgICAgIHZhciBncmFuZE5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgICAgICAgd2hpbGUgKGdyYW5kTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgZ3JhbmRUYWcgPSBncmFuZE5vZGUudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChncmFuZFRhZyA9PT0gSG9zdFJvb3QgfHwgZ3JhbmRUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhbmRDb250YWluZXIgPSBncmFuZE5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yIGFuZCB3ZSBmb3VuZCBpdCBhc1xuICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgb2YgdGhlIFBvcnRhbC4gVGhhdCBtZWFucyB3ZSBjYW4gaWdub3JlIGl0IGJlY2F1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBQb3J0YWwgd2lsbCBidWJibGUgdGhyb3VnaCB0byB1cy5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBncmFuZE5vZGUgPSBncmFuZE5vZGUucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTm93IHdlIG5lZWQgdG8gZmluZCBpdCdzIGNvcnJlc3BvbmRpbmcgaG9zdCBmaWJlciBpbiB0aGUgb3RoZXJcbiAgICAgICAgICAvLyB0cmVlLiBUbyBkbyB0aGlzIHdlIGNhbiB1c2UgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsIGJ1dCB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZmliZXIgaXMgYSBob3N0IGluc3RhbmNlLCBvdGhlcndpc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHRyYXZlcnNlIHVwIHRocm91Z2ggdGhlIERPTSB0aWxsIHdlIGZpbmQgdGhlIGNvcnJlY3RcbiAgICAgICAgICAvLyBub2RlIHRoYXQgaXMgZnJvbSB0aGUgb3RoZXIgdHJlZS5cblxuXG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnROb2RlLnRhZztcblxuICAgICAgICAgICAgaWYgKHBhcmVudFRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBwYXJlbnRUYWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBhbmNlc3Rvckluc3QgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICBjb250aW51ZSBtYWluTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJhdGNoZWRFdmVudFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgYW5jZXN0b3JJbnN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudFR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgIT09IG51bGwgPyByZWFjdE5hbWUgKyAnQ2FwdHVyZScgOiBudWxsO1xuICB2YXIgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZSA/IGNhcHR1cmVOYW1lIDogcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgbGFzdEhvc3RDb21wb25lbnQgPSBudWxsOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMi5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTIudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gc3RhdGVOb2RlOyAvLyBjcmVhdGVFdmVudEhhbmRsZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAocmVhY3RFdmVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKTtcblxuICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBsYXN0SG9zdENvbXBvbmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBhcmUgb25seSBhY2N1bXVsYXRpbmcgZXZlbnRzIGZvciB0aGUgdGFyZ2V0LCB0aGVuIHdlIGRvbid0XG4gICAgLy8gY29udGludWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggdGhlIFJlYWN0IGZpYmVyIHRyZWUgdG8gZmluZCBvdGhlclxuICAgIC8vIGxpc3RlbmVycy5cblxuXG4gICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuLy8gLSBDaGFuZ2VFdmVudFBsdWdpblxuLy8gLSBTZWxlY3RFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGVzZSBwbHVnaW5zXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMgKHZpYSBlbXVsYXRpb24pLlxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyAnQ2FwdHVyZSc7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMyA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMy50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG4gICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVOYW1lKTtcblxuICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3ROYW1lKTtcblxuICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gIGlmIChpbnN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkbyB7XG4gICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAvLyBldmVudHMgdG8gdGhlaXIgcGFyZW50LiBXZSBjb3VsZCBhbHNvIGdvIHRocm91Z2ggcGFyZW50Tm9kZSBvbiB0aGVcbiAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgfSB3aGlsZSAoaW5zdCAmJiBpbnN0LnRhZyAhPT0gSG9zdENvbXBvbmVudCk7XG5cbiAgaWYgKGluc3QpIHtcbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgQSBhbmQgQiwgb3IgbnVsbCBpZiB0aGV5IGFyZSBpblxuICogZGlmZmVyZW50IHRyZWVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gIHZhciBub2RlQSA9IGluc3RBO1xuICB2YXIgbm9kZUIgPSBpbnN0QjtcbiAgdmFyIGRlcHRoQSA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEEgPSBub2RlQTsgdGVtcEE7IHRlbXBBID0gZ2V0UGFyZW50KHRlbXBBKSkge1xuICAgIGRlcHRoQSsrO1xuICB9XG5cbiAgdmFyIGRlcHRoQiA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEIgPSBub2RlQjsgdGVtcEI7IHRlbXBCID0gZ2V0UGFyZW50KHRlbXBCKSkge1xuICAgIGRlcHRoQisrO1xuICB9IC8vIElmIEEgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIGRlcHRoQS0tO1xuICB9IC8vIElmIEIgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICAgIGRlcHRoQi0tO1xuICB9IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuXG5cbiAgdmFyIGRlcHRoID0gZGVwdGhBO1xuXG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKG5vZGVBID09PSBub2RlQiB8fCBub2RlQiAhPT0gbnVsbCAmJiBub2RlQSA9PT0gbm9kZUIuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gbm9kZUE7XG4gICAgfVxuXG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGV2ZW50LCB0YXJnZXQsIGNvbW1vbiwgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldDtcblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICBpZiAoaW5zdGFuY2UgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0YW5jZTQgPSBpbnN0YW5jZSxcbiAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2U0LnRhZztcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhpcyBwbHVnaW5cbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycy5cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGVudGVyRXZlbnQsIGZyb20sIHRvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcblxuICBpZiAoZnJvbSAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZnJvbSwgY29tbW9uLCBmYWxzZSk7XG4gIH1cblxuICBpZiAodG8gIT09IG51bGwgJiYgZW50ZXJFdmVudCAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZW50ZXJFdmVudCwgdG8sIGNvbW1vbiwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lICsgXCJfX1wiICsgKGNhcHR1cmUgPyAnY2FwdHVyZScgOiAnYnViYmxlJyk7XG59XG5cbnZhciBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IGZhbHNlO1xudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIEFVVE9GT0NVUyA9ICdhdXRvRm9jdXMnO1xudmFyIENISUxEUkVOID0gJ2NoaWxkcmVuJztcbnZhciBTVFlMRSA9ICdzdHlsZSc7XG52YXIgSFRNTCQxID0gJ19faHRtbCc7XG52YXIgSFRNTF9OQU1FU1BBQ0UkMSA9IE5hbWVzcGFjZXMuaHRtbDtcbnZhciB3YXJuZWRVbmtub3duVGFncztcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc7XG52YXIgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudDtcbnZhciB3YXJuRm9yVGV4dERpZmZlcmVuY2U7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlO1xudmFyIG5vcm1hbGl6ZUhUTUw7XG5cbntcbiAgd2FybmVkVW5rbm93blRhZ3MgPSB7XG4gICAgLy8gVGhlcmUgYXJlIHdvcmtpbmcgcG9seWZpbGxzIGZvciA8ZGlhbG9nPi4gTGV0IHBlb3BsZSB1c2UgaXQuXG4gICAgZGlhbG9nOiB0cnVlLFxuICAgIC8vIEVsZWN0cm9uIHNoaXBzIGEgY3VzdG9tIDx3ZWJ2aWV3PiB0YWcgdG8gZGlzcGxheSBleHRlcm5hbCB3ZWIgY29udGVudCBpblxuICAgIC8vIGFuIGlzb2xhdGVkIGZyYW1lIGFuZCBwcm9jZXNzLlxuICAgIC8vIFRoaXMgdGFnIGlzIG5vdCBwcmVzZW50IGluIG5vbiBFbGVjdHJvbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBKU0RvbSB3aGljaFxuICAgIC8vIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAgLy8gQHNlZSBodHRwczovL2VsZWN0cm9uanMub3JnL2RvY3MvYXBpL3dlYnZpZXctdGFnXG4gICAgd2VidmlldzogdHJ1ZVxuICB9O1xuXG4gIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMpIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICB9KTtcbiAgfTsgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcblxuXG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTsgLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4gIC8vIEl0IGFsc28gY2FuIHR1cm4gXFx1MDAwMCBpbnRvIFxcdUZGRkQgaW5zaWRlIGF0dHJpYnV0ZXMuXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zaW5nbGUtcGFnZS5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbVxuICAvLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuICAvLyBXZSB3aWxsIHN0aWxsIHBhdGNoIHVwIGluIHRoaXMgY2FzZSBidXQgbm90IGZpcmUgdGhlIHdhcm5pbmcuXG5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVGV4dCA9PT0gbm9ybWFsaXplZENsaWVudFRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuXG4gICAgZXJyb3IoJ0V4dHJhIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2VydmVyOiAlcycsIG5hbWVzKTtcbiAgfTtcblxuICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAobGlzdGVuZXIgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcik7XG4gICAgfVxuICB9OyAvLyBQYXJzZSB0aGUgSFRNTCBhbmQgcmVhZCBpdCBiYWNrIHRvIG5vcm1hbGl6ZSB0aGUgSFRNTCBzdHJpbmcgc28gdGhhdCBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbi5cblxuXG4gIG5vcm1hbGl6ZUhUTUwgPSBmdW5jdGlvbiAocGFyZW50LCBodG1sKSB7XG4gICAgLy8gV2UgY291bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgZG9jdW1lbnQgaGVyZSB0byBhdm9pZFxuICAgIC8vIHJlLWluaXRpYWxpemluZyBjdXN0b20gZWxlbWVudHMgaWYgdGhleSBleGlzdC4gQnV0IHRoaXMgYnJlYWtzXG4gICAgLy8gaG93IDxub3NjcmlwdD4gaXMgYmVpbmcgaGFuZGxlZC4gU28gd2UgdXNlIHRoZSBzYW1lIGRvY3VtZW50LlxuICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMTE1Ny5cbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50Lm5hbWVzcGFjZVVSSSwgcGFyZW50LnRhZ05hbWUpO1xuICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlc3RFbGVtZW50LmlubmVySFRNTDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJFbGVtZW50IDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KG5vZGUpIHtcbiAgLy8gTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb25cbiAgLy8gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdFxuICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gIC8vIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgbm9kZS5cbiAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wO1xufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBuZXh0UHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG5cblxuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgIC8vIHRleHRDb250ZW50IG9uIGEgPHRleHRhcmVhPiB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIDx0ZXh0YXJlYT4gdW50aWwgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgYmx1cnJlZCBhZ2Fpbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcbiAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAndGV4dGFyZWEnIHx8IG5leHRQcm9wICE9PSAnJztcblxuICAgICAgICBpZiAoY2FuU2V0VGV4dENvbnRlbnQpIHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgLy8gVE9ETzogSGFuZGxlIHdhc0N1c3RvbUNvbXBvbmVudFRhZ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZVBheWxvYWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgcHJvcEtleSA9IHVwZGF0ZVBheWxvYWRbaV07XG4gICAgdmFyIHByb3BWYWx1ZSA9IHVwZGF0ZVBheWxvYWRbaSArIDFdO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcFZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50LCBwYXJlbnROYW1lc3BhY2UpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnOyAvLyBXZSBjcmVhdGUgdGFncyBpbiB0aGUgbmFtZXNwYWNlIG9mIHRoZWlyIHBhcmVudCBjb250YWluZXIsIGV4Y2VwdCBIVE1MXG4gIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHZhciBkb21FbGVtZW50O1xuICB2YXIgbmFtZXNwYWNlVVJJID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICBuYW1lc3BhY2VVUkkgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiB0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZXJyb3IoJzwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiAnICsgJ1VzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCAnICsgJ29yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRlZFwiIGZsYWcgaXNcbiAgICAgIC8vIHNldCB0byB0cnVlIGFuZCBpdCBkb2VzIG5vdCBleGVjdXRlXG4gICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG5cbiAgICAgIHZhciBmaXJzdENoaWxkID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBkb21FbGVtZW50ID0gZGl2LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gJEZsb3dJc3N1ZSBgY3JlYXRlRWxlbWVudGAgc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFdlYiBDb21wb25lbnRzXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOyAvLyBOb3JtYWxseSBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBpbiBgc2V0SW5pdGlhbERPTVByb3BlcnRpZXNgLCBob3dldmVyIHRoZSBgbXVsdGlwbGVgIGFuZCBgc2l6ZWBcbiAgICAgIC8vIGF0dHJpYnV0ZXMgb24gYHNlbGVjdGBzIG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSBgb3B0aW9uYHMgYXJlIGluc2VydGVkLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50czpcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIGRvZXMgbm90IHNjcm9sbCB0byB0aGUgY29ycmVjdCBvcHRpb24gYmVjYXVzZSBzaW5ndWxhclxuICAgICAgLy8gIGBzZWxlY3RgIGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgZmlyc3QgaXRlbSAjMTMyMjJcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIHNldCB0aGUgZmlyc3QgaXRlbSBhcyBzZWxlY3RlZCBkZXNwaXRlIHRoZSBgc2l6ZWAgYXR0cmlidXRlICMxNDIzOVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMyMjJcbiAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MjM5XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YXIgbm9kZSA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvbUVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFVua25vd25UYWdzLCB0eXBlKSkge1xuICAgICAgICB3YXJuZWRVbmtub3duVGFnc1t0eXBlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiAnICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggJyArICdhbiB1cHBlcmNhc2UgbGV0dGVyLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgdmFyIHByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpO1xuICBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgZmFsc2UpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cbn0gLy8gQ2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuXG5mdW5jdGlvbiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG4gIHZhciBsYXN0UHJvcHM7XG4gIHZhciBuZXh0UHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsYXN0UHJvcHMgPSBsYXN0UmF3UHJvcHM7XG4gICAgICBuZXh0UHJvcHMgPSBuZXh0UmF3UHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdFByb3BzLm9uQ2xpY2sgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG5leHRQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBuZXh0UHJvcHMpO1xuICB2YXIgcHJvcEtleTtcbiAgdmFyIHN0eWxlTmFtZTtcbiAgdmFyIHN0eWxlVXBkYXRlcyA9IG51bGw7XG5cbiAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBsYXN0UHJvcHNbcHJvcEtleV0gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MIHx8IHByb3BLZXkgPT09IENISUxEUkVOKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIGZpYmVyIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYWxsIG90aGVyIGRlbGV0ZWQgcHJvcGVydGllcyB3ZSBhZGQgaXQgdG8gdGhlIHF1ZXVlLiBXZSB1c2VcbiAgICAgIC8vIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgaW4gdGhlIGNvbW1pdCBwaGFzZSBpbnN0ZWFkLlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBuZXh0UHJvcCA9PT0gbGFzdFByb3AgfHwgbmV4dFByb3AgPT0gbnVsbCAmJiBsYXN0UHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAvLyBVbnNldCBzdHlsZXMgb24gYGxhc3RQcm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgKCFuZXh0UHJvcCB8fCAhbmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkpIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLlxuXG5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5wdXNoKHByb3BLZXksIHN0eWxlVXBkYXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFzdEh0bWwgPSBsYXN0UHJvcCA/IGxhc3RQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dEh0bWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2UgZWFnZXJseSBsaXN0ZW4gdG8gdGhpcyBldmVuIHRob3VnaCB3ZSBoYXZlbid0IGNvbW1pdHRlZCB5ZXQuXG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkICYmIGxhc3RQcm9wICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBwcm9wcyBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ29iamVjdCcgJiYgbmV4dFByb3AgIT09IG51bGwgJiYgbmV4dFByb3AuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFKSB7XG4gICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgdXNlT3BhcXVlUmVmZXJlbmNlJ3Mgb3BhcXVlIG9iamVjdCwgdGhpcyBtZWFucyB3ZSBhcmUgaHlkcmF0aW5nLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBjYWxsIHRoZSBvcGFxdWUgb2JqZWN0J3MgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIGEgbmV3IGNsaWVudFxuICAgICAgLy8gSUQgc28gY2xpZW50IGFuZCBzZXJ2ZXIgSURzIG1hdGNoIGFuZCB0aHJvd3MgdG8gcmVyZW5kZXIuXG4gICAgICBuZXh0UHJvcC50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYW55IG90aGVyIHByb3BlcnR5IHdlIGFsd2F5cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFuZCB0aGVuIHdlXG4gICAgICAvLyBmaWx0ZXIgaXQgb3V0IHVzaW5nIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgZHVyaW5nIHRoZSBjb21taXQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dFByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEVdKTtcbiAgICB9XG5cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSByYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gPT09IHRydWU7XG4gICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXR0cmlidXRlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlc1tfaV0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgLy8gQnVpbHQtaW4gU1NSIGF0dHJpYnV0ZSBpcyBhbGxvd2VkXG4gICAgICAgIGNhc2UgJ2RhdGEtcmVhY3Ryb290JzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMDY3Ni5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmFkZChhdHRyaWJ1dGVzW19pXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG5cbiAgZm9yICh2YXIgcHJvcEtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghcmF3UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAgICAgLy8gbWlnaHQgbWF0Y2ggYWRkaXRpb25hbCBIVE1MIHRoYXQgaXMgaGlkZGVuIHdoZW4gd2UgcmVhZCBpdCB1c2luZ1xuICAgICAgLy8gdGV4dENvbnRlbnQuIEUuZy4gXCJmb29cIiB3aWxsIG1hdGNoIFwiZjxzcGFuPm9vPC9zcGFuPlwiIGJ1dCB0aGF0IHN0aWxsXG4gICAgICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAgICAgLy8gSFRNTCBhbmQgYXR0cmlidXRlcy4gSWRlYWxseSB3ZSBzaG91bGQgcHJlc2VydmUgc3RydWN0dXJlIGJ1dCBpdCdzXG4gICAgICAvLyBvayBub3QgdG8gaWYgdGhlIHZpc2libGUgY29udGVudCBpcyBzdGlsbCBlbm91Z2ggdG8gaW5kaWNhdGUgd2hhdFxuICAgICAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gICAgICAvLyBUT0RPOiBXYXJuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSB0ZXh0Tm9kZSBhcyBhIGNoaWxkLlxuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHVzZSBkb21FbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlIHRvIGNvbXBhcmU/XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09ICcnICsgbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgJycgKyBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCAvLyBDb252aW5jZSBGbG93IHdlJ3ZlIGNhbGN1bGF0ZWQgaXQgKGl0J3MgREVWLW9ubHkgaW4gdGhpcyBtZXRob2QuKVxuICAgIHR5cGVvZiBpc0N1c3RvbUNvbXBvbmVudFRhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmQgdG8gdGhlaXIgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgdmFyIHNlcnZlclZhbHVlID0gdm9pZCAwO1xuICAgICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhwcm9wS2V5KTtcblxuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgfHwgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cbiAgICAgIHByb3BLZXkgPT09ICd2YWx1ZScgfHwgcHJvcEtleSA9PT0gJ2NoZWNrZWQnIHx8IHByb3BLZXkgPT09ICdzZWxlY3RlZCcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgICAgdmFyIHNlcnZlckhUTUwgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkSFRNTCA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlckhUTUwsIGV4cGVjdGVkSFRNTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG5cbiAgICAgICAgaWYgKGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRTdHlsZSA9IGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhuZXh0UHJvcCk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZFN0eWxlICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBleHBlY3RlZFN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZUF0dHJpYnV0ZShwcm9wS2V5LCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSAmJiAhc2hvdWxkUmVtb3ZlQXR0cmlidXRlKHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgICAgICB2YXIgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3RhbmRhcmROYW1lID0gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcEtleSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTsgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHN0YW5kYXJkTmFtZSk7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUgJiYgIWlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZykge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICBpZiAoZXh0cmFBdHRyaWJ1dGVOYW1lcy5zaXplID4gMCAmJiAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGV4dHJhQXR0cmlidXRlTmFtZXMpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgdHJ1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgLy8gRm9yIGlucHV0IGFuZCB0ZXh0YXJlYSB3ZSBjdXJyZW50IGFsd2F5cyBzZXQgdGhlIHZhbHVlIHByb3BlcnR5IGF0XG4gICAgICAvLyBwb3N0IG1vdW50IHRvIGZvcmNlIGl0IHRvIGRpdmVyZ2UgZnJvbSBhdHRyaWJ1dGVzLiBIb3dldmVyLCBmb3JcbiAgICAgIC8vIG9wdGlvbiBhbmQgc2VsZWN0IHdlIGRvbid0IHF1aXRlIGRvIHRoZSBzYW1lIHRoaW5nIGFuZCBzZWxlY3RcbiAgICAgIC8vIGlzIG5vdCByZXNpbGllbnQgdG8gdGhlIERPTSBzdGF0ZSBjaGFuZ2luZyBzbyB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBub3QgZG9pbmcgdGhpcyBmb3IgaW5wdXQgYW5kIHRleHRhcmVhLlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiByYXdQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB2YXIgaXNEaWZmZXJlbnQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUgIT09IHRleHQ7XG4gIHJldHVybiBpc0RpZmZlcmVudDtcbn1cbmZ1bmN0aW9uIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UodGV4dE5vZGUubm9kZVZhbHVlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgICBjYXNlICdvcHRncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAgIC8vIGJ1dFxuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludHJcblxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuXG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcblxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZVxuXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG5cbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdmcmFtZSc7XG5cbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9IC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuJDEgPSB7fTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZFRhZyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcgc2hvdWxkIGJlIG51bGwnKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRUYWcgPSAnI3RleHQnO1xuICAgIH1cblxuICAgIHZhciBpbnZhbGlkUGFyZW50ID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoY2hpbGRUYWcsIHBhcmVudFRhZykgPyBudWxsIDogcGFyZW50SW5mbztcbiAgICB2YXIgaW52YWxpZEFuY2VzdG9yID0gaW52YWxpZFBhcmVudCA/IG51bGwgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgIHZhciBpbnZhbGlkUGFyZW50T3JBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgfHwgaW52YWxpZEFuY2VzdG9yO1xuXG4gICAgaWYgKCFpbnZhbGlkUGFyZW50T3JBbmNlc3Rvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmNlc3RvclRhZyA9IGludmFsaWRQYXJlbnRPckFuY2VzdG9yLnRhZztcbiAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcbiAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSBjaGlsZFRhZztcbiAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcblxuICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKC9cXFMvLnRlc3QoY2hpbGRUZXh0KSkge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdUZXh0IG5vZGVzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1doaXRlc3BhY2UgdGV4dCBub2Rlcyc7XG4gICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIgTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsgJz4nO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRUYWcgPT09ICd0cicpIHtcbiAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2VyLic7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMlcycsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgd2hpdGVzcGFjZUluZm8sIGluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4nLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDE7XG5cbntcbiAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xufVxuXG52YXIgU1VTUEVOU0VfU1RBUlRfREFUQSA9ICckJztcbnZhciBTVVNQRU5TRV9FTkRfREFUQSA9ICcvJCc7XG52YXIgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBID0gJyQ/JztcbnZhciBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gJyQhJztcbnZhciBTVFlMRSQxID0gJ3N0eWxlJztcbnZhciBldmVudHNFbmFibGVkID0gbnVsbDtcbnZhciBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYnV0dG9uJzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXR1cm4gISFwcm9wcy5hdXRvRm9jdXM7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB0eXBlO1xuICB2YXIgbmFtZXNwYWNlO1xuICB2YXIgbm9kZVR5cGUgPSByb290Q29udGFpbmVySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgRE9DVU1FTlRfTk9ERTpcbiAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICB7XG4gICAgICAgIHR5cGUgPSBub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/ICcjZG9jdW1lbnQnIDogJyNmcmFnbWVudCc7XG4gICAgICAgIHZhciByb290ID0gcm9vdENvbnRhaW5lckluc3RhbmNlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgbmFtZXNwYWNlID0gcm9vdCA/IHJvb3QubmFtZXNwYWNlVVJJIDogZ2V0Q2hpbGROYW1lc3BhY2UobnVsbCwgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckluc3RhbmNlLnBhcmVudE5vZGUgOiByb290Q29udGFpbmVySW5zdGFuY2U7XG4gICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBjb250YWluZXIubmFtZXNwYWNlVVJJIHx8IG51bGw7XG4gICAgICAgIHR5cGUgPSBjb250YWluZXIudGFnTmFtZTtcbiAgICAgICAgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2Uob3duTmFtZXNwYWNlLCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIHZhbGlkYXRlZFRhZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhudWxsLCB2YWxpZGF0ZWRUYWcpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHtcbiAgICB2YXIgcGFyZW50SG9zdENvbnRleHREZXYgPSBwYXJlbnRIb3N0Q29udGV4dDtcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50SG9zdENvbnRleHREZXYubmFtZXNwYWNlLCB0eXBlKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhwYXJlbnRIb3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUZvckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIGV2ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQoKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpO1xuICB2YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xuXG4gIHNldEVuYWJsZWQoZmFsc2UpO1xuICByZXR1cm4gYWN0aXZlSW5zdGFuY2U7XG59XG5mdW5jdGlvbiByZXNldEFmdGVyQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb25JbmZvcm1hdGlvbik7XG4gIHNldEVuYWJsZWQoZXZlbnRzRW5hYmxlZCk7XG4gIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiB0YWtlIG5hbWVzcGFjZSBpbnRvIGFjY291bnQgd2hlbiB2YWxpZGF0aW5nLlxuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBudWxsLCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgcHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG5cbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICB2YXIgZG9tRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgcGFyZW50TmFtZXNwYWNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgZG9tRWxlbWVudCk7XG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHJldHVybiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcblxuICAgIGlmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gIT09IHR5cGVvZiBvbGRQcm9wcy5jaGlsZHJlbiAmJiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgbmV3UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gIHJldHVybiB0eXBlID09PSAndGV4dGFyZWEnIHx8IHR5cGUgPT09ICdvcHRpb24nIHx8IHR5cGUgPT09ICdub3NjcmlwdCcgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sICE9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHRleHQsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbi8vIGlmIGEgY29tcG9uZW50IGp1c3QgaW1wb3J0cyBSZWFjdERPTSAoZS5nLiBmb3IgZmluZERPTU5vZGUpLlxuLy8gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgc2V0VGltZW91dCBvciBjbGVhclRpbWVvdXQuXG5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIERlc3BpdGUgdGhlIG5hbWluZyB0aGF0IG1pZ2h0IGltcGx5IG90aGVyd2lzZSwgdGhpcyBtZXRob2Qgb25seVxuICAvLyBmaXJlcyBpZiB0aGVyZSBpcyBhbiBgVXBkYXRlYCBlZmZlY3Qgc2NoZWR1bGVkIGR1cmluZyBtb3VudGluZy5cbiAgLy8gVGhpcyBoYXBwZW5zIGlmIGBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbmAgcmV0dXJucyBgdHJ1ZWAgKHdoaWNoIGl0XG4gIC8vIGRvZXMgdG8gaW1wbGVtZW50IHRoZSBgYXV0b0ZvY3VzYCBhdHRyaWJ1dGUgb24gdGhlIGNsaWVudCkuIEJ1dFxuICAvLyB0aGVyZSBhcmUgYWxzbyBvdGhlciBjYXNlcyB3aGVuIHRoaXMgbWlnaHQgaGFwcGVuIChzdWNoIGFzIHBhdGNoaW5nXG4gIC8vIHVwIHRleHQgY29udGVudCBkdXJpbmcgaHlkcmF0aW9uIG1pc21hdGNoKS4gU28gd2UnbGwgY2hlY2sgdGhpcyBhZ2Fpbi5cbiAgaWYgKHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgbmV3UHJvcHMpKSB7XG4gICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG5cbiAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGNvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lcjtcbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSAvLyBUaGlzIGNvbnRhaW5lciBtaWdodCBiZSB1c2VkIGZvciBhIHBvcnRhbC5cbiAgLy8gSWYgc29tZXRoaW5nIGluc2lkZSBhIHBvcnRhbCBpcyBjbGlja2VkLCB0aGF0IGNsaWNrIHNob3VsZCBidWJibGVcbiAgLy8gdGhyb3VnaCB0aGUgUmVhY3QgdHJlZS4gSG93ZXZlciwgb24gTW9iaWxlIFNhZmFyaSB0aGUgY2xpY2sgd291bGRcbiAgLy8gbmV2ZXIgYnViYmxlIHRocm91Z2ggdGhlICpET00qIHRyZWUgdW5sZXNzIGFuIGFuY2VzdG9yIHdpdGggb25jbGlja1xuICAvLyBldmVudCBleGlzdHMuIFNvIHdlIHdvdWxkbid0IHNlZSBpdCBhbmQgZGlzcGF0Y2ggaXQuXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGVuc3VyZSB0aGF0IG5vbiBSZWFjdCByb290IGNvbnRhaW5lcnMgaGF2ZSBpbmxpbmUgb25jbGlja1xuICAvLyBkZWZpbmVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExOTE4XG5cblxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgaWYgKChyZWFjdFJvb3RDb250YWluZXIgPT09IG51bGwgfHwgcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQpICYmIHBhcmVudE5vZGUub25jbGljayA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0SW5Db250YWluZXJCZWZvcmUoY29udGFpbmVyLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIC8vIFRPRE86IERvZXMgdGhpcyB3b3JrIGZvciBhbGwgZWxlbWVudCB0eXBlcz8gV2hhdCBhYm91dCBNYXRoTUw/IFNob3VsZCB3ZVxuICAvLyBwYXNzIGhvc3QgY29udGV4dCB0byB0aGlzIG1ldGhvZD9cbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlID0gaW5zdGFuY2Uuc3R5bGU7XG5cbiAgaWYgKHR5cGVvZiBzdHlsZS5zZXRQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9ICcnO1xufVxuZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZVByb3AgPSBwcm9wc1tTVFlMRSQxXTtcbiAgdmFyIGRpc3BsYXkgPSBzdHlsZVByb3AgIT09IHVuZGVmaW5lZCAmJiBzdHlsZVByb3AgIT09IG51bGwgJiYgc3R5bGVQcm9wLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykgPyBzdHlsZVByb3AuZGlzcGxheSA6IG51bGw7XG4gIGluc3RhbmNlLnN0eWxlLmRpc3BsYXkgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKCdkaXNwbGF5JywgZGlzcGxheSk7XG59XG5mdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xufVxuZnVuY3Rpb24gY2xlYXJDb250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9ICcnO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHZhciBib2R5ID0gY29udGFpbmVyLmJvZHk7XG5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBib2R5LnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuICB9XG59IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgfHwgdHlwZS50b0xvd2VyQ2FzZSgpICE9PSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhbiBlbGVtZW50IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0ID09PSAnJyB8fCBpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICAvLyBTa2lwIG5vbi1oeWRyYXRhYmxlIG5vZGVzLlxuICBmb3IgKDsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cbiAgICBpZiAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUocGFyZW50SW5zdGFuY2UuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTsgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cblxuICB1cGRhdGVGaWJlclByb3BzKGluc3RhbmNlLCBwcm9wcyk7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHRJbnN0YW5jZSk7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICB9IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cblxuXG4gIHJldHVybiBudWxsO1xufSAvLyBSZXR1cm5zIHRoZSBTdXNwZW5zZUluc3RhbmNlIGlmIHRoaXMgbm9kZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhXG4vLyBTdXNwZW5zZUluc3RhbmNlLiBJLmUuIGlmIGl0cyBwcmV2aW91cyBzaWJsaW5nIGlzIGEgQ29tbWVudCB3aXRoXG4vLyBTVVNQRU5TRV94X1NUQVJUX0RBVEEuIE90aGVyd2lzZSwgbnVsbC5cblxuZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudEluc3RhbmNlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIDtcbn1cbnZhciBjbGllbnRJZCA9IDA7XG5mdW5jdGlvbiBtYWtlQ2xpZW50SWRJbkRFVih3YXJuT25BY2Nlc3NJbkRFVikge1xuICB2YXIgaWQgPSAncjonICsgKGNsaWVudElkKyspLnRvU3RyaW5nKDM2KTtcbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFO1xufVxuZnVuY3Rpb24gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChhdHRlbXB0VG9SZWFkVmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfT1BBUVVFX0lEX1RZUEUsXG4gICAgdG9TdHJpbmc6IGF0dGVtcHRUb1JlYWRWYWx1ZSxcbiAgICB2YWx1ZU9mOiBhdHRlbXB0VG9SZWFkVmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVQb3J0YWxNb3VudChwb3J0YWxJbnN0YW5jZSkge1xuICB7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocG9ydGFsSW5zdGFuY2UpO1xuICB9XG59XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGhvc3RSb290O1xufVxuZnVuY3Rpb24gdW5tYXJrQ29udGFpbmVyQXNSb290KG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChub2RlKSB7XG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcblxuICBpZiAoaW5zdCkge1xuICAgIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQgfHwgaW5zdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCkge1xuICAgIC8vIEluIEZpYmVyIHRoaXMsIGlzIGp1c3QgdGhlIHN0YXRlIG5vZGUgcmlnaHQgbm93LiBXZSBhc3N1bWUgaXQgd2lsbCBiZVxuICAgIC8vIGEgaG9zdCBjb21wb25lbnQgb3IgaG9zdCB0ZXh0LlxuICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgfSAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVGaWJlclByb3BzKG5vZGUsIHByb3BzKSB7XG4gIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbn1cbmZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJTZXQobm9kZSkge1xuICB2YXIgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuXG4gIGlmIChlbGVtZW50TGlzdGVuZXJTZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50TGlzdGVuZXJTZXQ7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWx1ZVN0YWNrID0gW107XG52YXIgZmliZXJTdGFjaztcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBwb3AuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICB7XG4gICAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAvLyBJZiB0aGUgZmliZXIgaXMgYSBjb250ZXh0IHByb3ZpZGVyIGl0c2VsZiwgd2hlbiB3ZSByZWFkIGl0cyBjb250ZXh0XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgICAgLy8gcHJldmlvdXMgKHBhcmVudCkgY29udGV4dCBpbnN0ZWFkIGZvciBhIGNvbnRleHQgcHJvdmlkZXIuXG4gICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBtYXNrZWRDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0eXBlLmNvbnRleHRUeXBlcztcblxuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIH0gLy8gQXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgdW5tYXNrZWQgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIGluZmluaXRlIGxvb3BzIGlmIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgY2FsbHMgc2V0U3RhdGUuXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNvbnRleHRUeXBlcywgY29udGV4dCwgJ2NvbnRleHQnLCBuYW1lKTtcbiAgICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHtcbiAgICByZXR1cm4gZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAge1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIGlmICghKGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50ID09PSBlbXB0eUNvbnRleHRPYmplY3QpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgIGlmICghd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCclcy5jaGlsZENvbnRleHRUeXBlcyBpcyBzcGVjaWZpZWQgYnV0IHRoZXJlIGlzIG5vIGdldENoaWxkQ29udGV4dCgpIG1ldGhvZCAnICsgJ29uIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBlaXRoZXIgZGVmaW5lIGdldENoaWxkQ29udGV4dCgpIG9uICVzIG9yIHJlbW92ZSAnICsgJ2NoaWxkQ29udGV4dFR5cGVzIGZyb20gaXQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgZm9yICh2YXIgY29udGV4dEtleSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgIGlmICghKGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0VHlwZXMpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nKSArIFwiLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXFxcIlwiICsgY29udGV4dEtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0JywgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHBhcmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gICAgLy8gYW5kIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGxhdGVyIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjb250ZXh0LlxuXG4gICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgLy8gU2tpcCB0aGlzIGlmIHdlJ3JlIG5vdCB1cGRhdGluZyBkdWUgdG8gc0NVLlxuICAgICAgLy8gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcmlseSByZWNvbXB1dGluZyBtZW1vaXplZCB2YWx1ZXMuXG4gICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IG1lcmdlZENvbnRleHQ7IC8vIFJlcGxhY2UgdGhlIG9sZCAob3IgZW1wdHkpIGNvbnRleHQgd2l0aCB0aGUgbmV3IG9uZS5cbiAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIE5vdyBwdXNoIHRoZSBuZXcgY29udGV4dCBhbmQgbWFyayB0aGF0IGl0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVyZ2VkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgd2l0aCByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgbm90IHN1cmUgaWYgaXRcbiAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICBpZiAoIShpc0ZpYmVyTW91bnRlZChmaWJlcikgJiYgZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBMZWdhY3lSb290ID0gMDtcbnZhciBCbG9ja2luZ1Jvb3QgPSAxO1xudmFyIENvbmN1cnJlbnRSb290ID0gMjtcblxudmFyIHJlbmRlcmVySUQgPSBudWxsO1xudmFyIGluamVjdGVkSG9vayA9IG51bGw7XG52YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbnZhciBpc0RldlRvb2xzUHJlc2VudCA9IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzg3N1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICBlcnJvcignVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuJywgZXJyKTtcbiAgICB9XG4gIH0gLy8gRGV2VG9vbHMgZXhpc3RzXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICggIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3Qocm9vdCwgcHJpb3JpdHlMZXZlbCkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgcHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHVuZGVmaW5lZCwgZGlkRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFVubW91bnQoZmliZXIpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9zaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICBTY2hlZHVsZXJfcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICBTY2hlZHVsZXJfbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgIFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0lkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VDYWxsYmFja05vZGUgPSB7fTsgLy8gRXhjZXB0IGZvciBOb1ByaW9yaXR5LCB0aGVzZSBjb3JyZXNwb25kIHRvIFNjaGVkdWxlciBwcmlvcml0aWVzLiBXZSB1c2Vcbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSQxID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5JDEgPSA5NztcbnZhciBMb3dQcmlvcml0eSQxID0gOTY7XG52YXIgSWRsZVByaW9yaXR5JDEgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSQxID0gOTA7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXJfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gLy8gRmFsbCBiYWNrIGdyYWNlZnVsbHkgaWYgd2UncmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIG9mIFNjaGVkdWxlci5cblNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgIT09IHVuZGVmaW5lZCA/IFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgOiBmdW5jdGlvbiAoKSB7fTtcbnZhciBzeW5jUXVldWUgPSBudWxsO1xudmFyIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbnZhciBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG52YXIgaW5pdGlhbFRpbWVNcyQxID0gU2NoZWR1bGVyX25vdyQxKCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG4vLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIG1vZGVybiBicm93c2VycyB0aGF0IHN1cHBvcnQgYHBlcmZvcm1hbmNlLm5vd2AuIEluXG4vLyBvbGRlciBicm93c2VycywgU2NoZWR1bGVyIGZhbGxzIGJhY2sgdG8gYERhdGUubm93YCwgd2hpY2ggcmV0dXJucyBhIFVuaXhcbi8vIHRpbWVzdGFtcC4gSW4gdGhhdCBjYXNlLCBzdWJ0cmFjdCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdG8gc2ltdWxhdGVcbi8vIHRoZSBiZWhhdmlvciBvZiBwZXJmb3JtYW5jZS5ub3cgYW5kIGtlZXAgb3VyIHRpbWVzIHNtYWxsIGVub3VnaCB0byBmaXRcbi8vIHdpdGhpbiAzMiBiaXRzLlxuLy8gVE9ETzogQ29uc2lkZXIgbGlmdGluZyB0aGlzIGludG8gU2NoZWR1bGVyLlxuXG52YXIgbm93ID0gaW5pdGlhbFRpbWVNcyQxIDwgMTAwMDAgPyBTY2hlZHVsZXJfbm93JDEgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBTY2hlZHVsZXJfbm93JDEoKSAtIGluaXRpYWxUaW1lTXMkMTtcbn07XG5mdW5jdGlvbiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgc3dpdGNoIChTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgIGNhc2UgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eSQyO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0xvd1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIExvd1ByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5JDE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0xvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSWRsZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDEocmVhY3RQcmlvcml0eUxldmVsLCBmbikge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGZuKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socmVhY3RQcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVN5bmNDYWxsYmFjayhjYWxsYmFjaykge1xuICAvLyBQdXNoIHRoaXMgY2FsbGJhY2sgaW50byBhbiBpbnRlcm5hbCBxdWV1ZS4gV2UnbGwgZmx1c2ggdGhlc2UgZWl0aGVyIGluXG4gIC8vIHRoZSBuZXh0IHRpY2ssIG9yIGVhcmxpZXIgaWYgc29tZXRoaW5nIGNhbGxzIGBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlYC5cbiAgaWYgKHN5bmNRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHN5bmNRdWV1ZSA9IFtjYWxsYmFja107IC8vIEZsdXNoIHRoZSBxdWV1ZSBpbiB0aGUgbmV4dCB0aWNrLCBhdCB0aGUgZWFybGllc3QuXG5cbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIFB1c2ggb250byBleGlzdGluZyBxdWV1ZS4gRG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGJlY2F1c2VcbiAgICAvLyB3ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUgd2hlbiB3ZSBjcmVhdGVkIHRoZSBxdWV1ZS5cbiAgICBzeW5jUXVldWUucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZmFrZUNhbGxiYWNrTm9kZTtcbn1cbmZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICBpZiAoY2FsbGJhY2tOb2RlICE9PSBmYWtlQ2FsbGJhY2tOb2RlKSB7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKSB7XG4gIGlmIChpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBub2RlID0gaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGU7XG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCkge1xuICBpZiAoIWlzRmx1c2hpbmdTeW5jUXVldWUgJiYgc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gUHJldmVudCByZS1lbnRyYW5jeS5cbiAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX2lzU3luYzIgPSB0cnVlO1xuICAgICAgICB2YXIgX3F1ZXVlID0gc3luY1F1ZXVlO1xuICAgICAgICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9xdWV1ZVtpXTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKF9pc1N5bmMyKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzeW5jUXVldWUgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3luY1F1ZXVlID0gc3luY1F1ZXVlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgfSAvLyBSZXN1bWUgZmx1c2hpbmcgaW4gdGhlIG5leHQgdGlja1xuXG5cbiAgICAgICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG52YXIgTm9Nb2RlID0gMDtcbnZhciBTdHJpY3RNb2RlID0gMTsgLy8gVE9ETzogUmVtb3ZlIEJsb2NraW5nTW9kZSBhbmQgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290XG4vLyB0YWcgaW5zdGVhZFxuXG52YXIgQmxvY2tpbmdNb2RlID0gMjtcbnZhciBDb25jdXJyZW50TW9kZSA9IDQ7XG52YXIgUHJvZmlsZU1vZGUgPSA4O1xudmFyIERlYnVnVHJhY2luZ01vZGUgPSAxNjtcblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgTm9UcmFuc2l0aW9uID0gMDtcbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpIHtcbiAgcmV0dXJuIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG59XG5cbnZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG57XG4gIHZhciBmaW5kU3RyaWN0Um9vdCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgbWF5YmVTdHJpY3RSb290ID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVN0cmljdFJvb3Q7XG4gIH07XG5cbiAgdmFyIHNldFRvU29ydGVkU3RyaW5nID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKCcsICcpO1xuICB9O1xuXG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICBpZiAoZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdlIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgY29tcG9uZW50IG5hbWVzXG4gICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMyID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczMpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM0ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIFwiICsgJ2NvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM0KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNSA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuXG5cbiAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgIGlmIChmaWJlci50eXBlLmNvbnRleHRUeXBlcyAhPSBudWxsIHx8IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAod2FybmluZ3NGb3JSb290ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgd2FybmluZ3NGb3JSb290KTtcbiAgICAgIH1cblxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICBpZiAoZmliZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF07XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpcnN0RmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS4nICsgJ1xcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zICcgKyAndXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLicgKyAnXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbGVnYWN5LWNvbnRleHQnLCBzb3J0ZWROYW1lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgYmFzZVByb3BzKTtcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gYmFzZVByb3BzO1xufVxuXG4vLyBNYXggMzEgYml0IGludGVnZXIuIFRoZSBtYXggaW50ZWdlciBzaXplIGluIFY4IGZvciAzMi1iaXQgc3lzdGVtcy5cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG52YXIgTUFYX1NJR05FRF8zMV9CSVRfSU5UID0gMTA3Mzc0MTgyMztcblxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIHJlbmRlcmVyU2lnaWw7XG5cbntcbiAgLy8gVXNlIHRoaXMgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBjb250ZXh0XG4gIHJlbmRlcmVyU2lnaWwgPSB7fTtcbn1cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG52YXIgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCkge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgUmVhY3QgeWllbGRzIGV4ZWN1dGlvbiwgdG8gZW5zdXJlIGByZWFkQ29udGV4dGBcbiAgLy8gY2Fubm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcblxuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIG5leHRWYWx1ZSkge1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICBpZiAoY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSB1bmRlZmluZWQgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSBudWxsICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvcFByb3ZpZGVyKHByb3ZpZGVyRmliZXIpIHtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgIC8vIE5vIGNoYW5nZVxuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKG9sZFZhbHVlLCBuZXdWYWx1ZSkgOiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG5cbiAgICB7XG4gICAgICBpZiAoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSAhPT0gY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgZXJyb3IoJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRCaXRzIHwgMDtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBsYW5lcyBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgYWx0ZXJuYXRlIHdhcyB1cGRhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzdCBvZiB0aGVcbiAgICAgIC8vIGFuY2VzdG9yIHBhdGggYWxyZWFkeSBoYXMgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgIHZhciBsaXN0ID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGxpc3QgIT09IG51bGwpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0Q29udGV4dDtcblxuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTsgLy8gVE9ETzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgd29yay1pbi1wcm9ncmVzcywgdGhpcyB3aWxsIGFkZCB0aGVcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhpcyByZW5kZXIgaXMgdGhyb3duIGF3YXkuIFNpbmNlIGl0J3MgYSByYWNlIGNvbmRpdGlvbiwgbm90IHN1cmUgaXQnc1xuICAgICAgICAgICAgLy8gd29ydGggZml4aW5nLlxuXG4gICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTsgLy8gTWFyayB0aGUgdXBkYXRlZCBsYW5lcyBvbiB0aGUgbGlzdCwgdG9vLlxuXG4gICAgICAgICAgbGlzdC5sYW5lcyA9IG1lcmdlTGFuZXMobGlzdC5sYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSBhbHJlYWR5IGZvdW5kIGEgbWF0Y2gsIHdlIGNhbiBzdG9wIHRyYXZlcnNpbmcgdGhlXG4gICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDb250ZXh0UHJvdmlkZXIpIHtcbiAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgbmV4dEZpYmVyID0gZmliZXIudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MudHlwZSA/IG51bGwgOiBmaWJlci5jaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICBpZiAoZmlyc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShkZXBlbmRlbmNpZXMubGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAvLyBDb250ZXh0IGxpc3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuIE1hcmsgdGhhdCB0aGlzIGZpYmVyIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgfSAvLyBSZXNldCB0aGUgd29yay1pbi1wcm9ncmVzcyBsaXN0XG5cblxuICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAge1xuICAgIC8vIFRoaXMgd2FybmluZyB3b3VsZCBmaXJlIGlmIHlvdSByZWFkIGNvbnRleHQgaW5zaWRlIGEgSG9vayBsaWtlIHVzZU1lbW8uXG4gICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICBpZiAoaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVikge1xuICAgICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPT09IGNvbnRleHQpIDsgZWxzZSBpZiAob2JzZXJ2ZWRCaXRzID09PSBmYWxzZSB8fCBvYnNlcnZlZEJpdHMgPT09IDApIDsgZWxzZSB7XG4gICAgdmFyIHJlc29sdmVkT2JzZXJ2ZWRCaXRzOyAvLyBBdm9pZCBkZW9wdGluZyBvbiBvYnNlcnZhYmxlIGFyZ3VtZW50cyBvciBoZXRlcm9nZW5lb3VzIHR5cGVzLlxuXG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlZEJpdHMgIT09ICdudW1iZXInIHx8IG9ic2VydmVkQml0cyA9PT0gTUFYX1NJR05FRF8zMV9CSVRfSU5UKSB7XG4gICAgICAvLyBPYnNlcnZlIGFsbCB1cGRhdGVzLlxuICAgICAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gY29udGV4dDtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cztcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgb2JzZXJ2ZWRCaXRzOiByZXNvbHZlZE9ic2VydmVkQml0cyxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgaWYgKCEoY3VycmVudGx5UmVuZGVyaW5nRmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgZm9yIHRoaXMgY29tcG9uZW50LiBDcmVhdGUgYSBuZXcgbGlzdC5cblxuXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW0sXG4gICAgICAgIHJlc3BvbmRlcnM6IG51bGxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAgY29udGV4dC5fY3VycmVudFZhbHVlIDtcbn1cblxudmFyIFVwZGF0ZVN0YXRlID0gMDtcbnZhciBSZXBsYWNlU3RhdGUgPSAxO1xudmFyIEZvcmNlVXBkYXRlID0gMjtcbnZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuLy8gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZCByaWdodCBhZnRlciBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLCB2aWFcbi8vIGBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nYC5cblxudmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZTtcbnZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWU7XG5cbntcbiAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IGZhbHNlO1xuICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7XG4gICAgICBwZW5kaW5nOiBudWxsXG4gICAgfSxcbiAgICBlZmZlY3RzOiBudWxsXG4gIH07XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIENsb25lIHRoZSB1cGRhdGUgcXVldWUgZnJvbSBjdXJyZW50LiBVbmxlc3MgaXQncyBhbHJlYWR5IGEgY2xvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgIHZhciBjbG9uZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjbG9uZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSkge1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGV2ZW50VGltZTogZXZlbnRUaW1lLFxuICAgIGxhbmU6IGxhbmUsXG4gICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICBwYXlsb2FkOiBudWxsLFxuICAgIGNhbGxiYWNrOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSkge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBPbmx5IG9jY3VycyBpZiB0aGUgZmliZXIgaGFzIGJlZW4gdW5tb3VudGVkLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG5cbiAge1xuICAgIGlmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHNoYXJlZFF1ZXVlICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCAnICsgJ2Zyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgJyArICd3aXRoIHplcm8gc2lkZS1lZmZlY3RzLiBDb25zaWRlciB1c2luZyBjb21wb25lbnREaWRVcGRhdGUgb3IgYSAnICsgJ2NhbGxiYWNrLicpO1xuXG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBhcmUgdXBkYXRlcyB0aGF0IGFyZSB0aHJvd24gYnkgYSBjaGlsZCBkdXJpbmcgdGhlIHJlbmRlclxuICAvLyBwaGFzZS4gVGhleSBzaG91bGQgYmUgZGlzY2FyZGVkIGlmIHRoZSByZW5kZXIgaXMgYWJvcnRlZC4gVGhlcmVmb3JlLFxuICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIENoZWNrIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGEgY2xvbmUuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgLy8gd2UgYmFpbCBvdXQgb24gYSBwYXJlbnQgZmliZXIgdGhhdCB0aGVuIGNhcHR1cmVzIGFuIGVycm9yIHRocm93biBieVxuICAgICAgLy8gYSBjaGlsZC4gU2luY2Ugd2Ugd2FudCB0byBhcHBlbmQgdGhlIHVwZGF0ZSBvbmx5IHRvIHRoZSB3b3JrLWluXG4gICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAvLyBwcm9jZXNzVXBkYXRlUXVldWUsIGJ1dCB0aGF0IGRpZG4ndCBoYXBwZW4gaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2VcbiAgICAgIC8vIHNraXBwZWQgb3ZlciB0aGUgcGFyZW50IHdoZW4gd2UgYmFpbGVkIG91dC5cbiAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICB2YXIgbmV3TGFzdCA9IG51bGw7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgdXBkYXRlcyBhbmQgY2xvbmUgdGhlbS5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGUuZXZlbnRUaW1lLFxuICAgICAgICAgICAgbGFuZTogdXBkYXRlLmxhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCk7IC8vIEFwcGVuZCB0aGUgY2FwdHVyZWQgdXBkYXRlIHRoZSBlbmQgb2YgdGhlIGNsb25lZCBsaXN0LlxuXG5cbiAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyBiYXNlIHVwZGF0ZXMuXG4gICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSA9IHtcbiAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbmV3TGFzdCxcbiAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cblxuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gIH1cblxuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIHByZXZTdGF0ZSwgbmV4dFByb3BzLCBpbnN0YW5jZSkge1xuICBzd2l0Y2ggKHVwZGF0ZS50YWcpIHtcbiAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH0gLy8gU3RhdGUgb2JqZWN0XG5cblxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgIHZhciBwYXJ0aWFsU3RhdGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE51bGwgYW5kIHVuZGVmaW5lZCBhcmUgdHJlYXRlZCBhcyBuby1vcHMuXG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgICAgICAgcmV0dXJuIF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yY2VVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQ7XG4gIH1cblxuICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTsgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgdXBkYXRlcy4gSWYgc28sIHRyYW5zZmVyIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7IC8vIFRoZSBwZW5kaW5nIHF1ZXVlIGlzIGNpcmN1bGFyLiBEaXNjb25uZWN0IHRoZSBwb2ludGVyIGJldHdlZW4gZmlyc3RcbiAgICAvLyBhbmQgbGFzdCBzbyB0aGF0IGl0J3Mgbm9uLWNpcmN1bGFyLlxuXG4gICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHZhciBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsOyAvLyBBcHBlbmQgcGVuZGluZyB1cGRhdGVzIHRvIGJhc2UgcXVldWVcblxuICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH1cblxuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7IC8vIElmIHRoZXJlJ3MgYSBjdXJyZW50IHF1ZXVlLCBhbmQgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBxdWV1ZSwgdGhlblxuICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgLy8gcXVldWUgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgd2l0aCBubyBjeWNsZXMsIHdlIGNhbiBhcHBlbmQgdG8gYm90aFxuICAgIC8vIGxpc3RzIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBzdHJ1Y3R1cmFsIHNoYXJpbmcuXG4gICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudExhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cblxuICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmUgcmVuZGVyTGFuZXNcbiAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcbiAgICAgIHZhciB1cGRhdGVFdmVudFRpbWUgPSB1cGRhdGUuZXZlbnRUaW1lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cblxuICAgICAgICBuZXdMYW5lcyA9IG1lcmdlTGFuZXMobmV3TGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIG5ld1N0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBuZXdTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENhbGxiYWNrO1xuICAgICAgICAgIHZhciBlZmZlY3RzID0gcXVldWUuZWZmZWN0cztcblxuICAgICAgICAgIGlmIChlZmZlY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICBxdWV1ZS5lZmZlY3RzID0gW3VwZGF0ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcblxuICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICAgICAgICBpZiAocGVuZGluZ1F1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgZnJvbSBpbnNpZGUgYSByZWR1Y2VyLiBBZGQgdGhlIG5ld1xuICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgdmFyIF9sYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTsgLy8gSW50ZW50aW9uYWxseSB1bnNvdW5kLiBQZW5kaW5nIHVwZGF0ZXMgZm9ybSBhIGNpcmN1bGFyIGxpc3QsIGJ1dCB3ZVxuICAgICAgICAgIC8vIHVucmF2ZWwgdGhlbSB3aGVuIHRyYW5zZmVycmluZyB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgdXBkYXRlID0gX2ZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUuYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlOyAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSBmaW5lIGJlY2F1c2UgdGhlIG9ubHkgdHdvIG90aGVyIHRoaW5ncyB0aGF0IGNvbnRyaWJ1dGUgdG9cbiAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkZWFsdCB3aXRoIHRoZSBwcm9wcy4gQ29udGV4dCBpbiBjb21wb25lbnRzIHRoYXQgc3BlY2lmeVxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG4gICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhuZXdMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKCEodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArIGNhbGxiYWNrICk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICByZXR1cm4gaGFzRm9yY2VVcGRhdGU7XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIGZpbmlzaGVkUXVldWUsIGluc3RhbmNlKSB7XG4gIC8vIENvbW1pdCB0aGUgZWZmZWN0c1xuICB2YXIgZWZmZWN0cyA9IGZpbmlzaGVkUXVldWUuZWZmZWN0cztcbiAgZmluaXNoZWRRdWV1ZS5lZmZlY3RzID0gbnVsbDtcblxuICBpZiAoZWZmZWN0cyAhPT0gbnVsbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVmZmVjdCA9IGVmZmVjdHNbaV07XG4gICAgICB2YXIgY2FsbGJhY2sgPSBlZmZlY3QuY2FsbGJhY2s7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBlZmZlY3QuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7IC8vIFJlYWN0LkNvbXBvbmVudCB1c2VzIGEgc2hhcmVkIGZyb3plbiBvYmplY3QgYnkgZGVmYXVsdC5cbi8vIFdlJ2xsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgbGVnYWN5IHJlZnMuXG5cbnZhciBlbXB0eVJlZnNPYmplY3QgPSBuZXcgUmVhY3QuQ29tcG9uZW50KCkucmVmcztcbnZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uSW52YWxpZENhbGxiYWNrO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZTtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuXG4gIHdhcm5PbkludmFsaWRDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gY2FsbGVyTmFtZSArICdfJyArIGNhbGxiYWNrO1xuXG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcblxuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9O1xuXG4gIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IGZ1bmN0aW9uICh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gJyArICdZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhdmFpbGFibGUgaW4gUmVhY3QgMTYrLiBUaGlzIGxpa2VseSBtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIHRvIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcblxuICB7XG4gICAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlKGN0b3IsIHBhcnRpYWxTdGF0ZSk7XG4gIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gIC8vIGJhc2Ugc3RhdGUuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxudmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgaXNNb3VudGVkOiBpc01vdW50ZWQsXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgICAgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFVwZGF0ZSA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICAgIHtcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcignJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgdmFyIHJlbmRlclByZXNlbnQgPSBpbnN0YW5jZS5yZW5kZXI7XG5cbiAgICBpZiAoIXJlbmRlclByZXNlbnQpIHtcbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgJiYgIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiAhaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICAgIGVycm9yKCdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJiAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BUeXBlcykge1xuICAgICAgZXJyb3IoJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZSkge1xuICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0b3IuY29udGV4dFR5cGUgJiYgY3Rvci5jb250ZXh0VHlwZXMgJiYgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiAnICsgJ3Nob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gJyArICdQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdBIHB1cmUgY29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgJyArICd1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciAnICsgJ3J1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSB1bmRlZmluZWQgJiYgaGFzTXV0YXRlZFByb3BzKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGVycm9yKCdTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyArICcgSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy4nLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgIWRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoY3RvcikpIHtcbiAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5hZGQoY3Rvcik7XG5cbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBzaG91bGQgYmUgdXNlZCB3aXRoIGNvbXBvbmVudERpZFVwZGF0ZSgpLiAnICsgJ1RoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LicsIGdldENvbXBvbmVudE5hbWUoY3RvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoX3N0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnLCBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IGN0b3IuY29udGV4dFR5cGVzO1xuICAgIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY29udGV4dFR5cGVzICE9PSBudWxsICYmIGNvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnRleHQgPSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH0gLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCdgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICcgKyAnJXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLiBJbnN0ZWFkLCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgYnkgJyArICdhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gJyArICdUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuJywgY29tcG9uZW50TmFtZSwgaW5zdGFuY2Uuc3RhdGUgPT09IG51bGwgPyAnbnVsbCcgOiAndW5kZWZpbmVkJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBJZiBuZXcgY29tcG9uZW50IEFQSXMgYXJlIGRlZmluZWQsIFwidW5zYWZlXCIgbGlmZWN5Y2xlcyB3b24ndCBiZSBjYWxsZWQuXG4gICAgLy8gV2FybiBhYm91dCB0aGVzZSBsaWZlY3ljbGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuXG4gICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdjb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBlcnJvcignVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArICclcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuJyArICdUaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzICcgKyBcImRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB7XG4gICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlICcgKyBcImJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIFwiICsgJ0luIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9IC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG5cbiAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgLy8gcHJvY2VzcyB0aGVtIG5vdy5cblxuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBwcm9wcy9zdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzO1xudmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmc7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG52YXIgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7fTtcblxue1xuICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xuICAvKipcbiAgICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICAgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAgICogdXBkYXRlcy5cbiAgICovXG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZC5fc3RvcmUgfHwgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCB8fCBjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBjaGlsZC5fc3RvcmUgPT09ICdvYmplY3QnKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAnICsgJ1wia2V5XCIgcHJvcC4gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yICcgKyAnbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkkMSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIG9uY2Ugd2UgdHVybiBvbiB0aGUgc3RyaW5nIHJlZiB3YXJuaW5nIGZvclxuICAgICAgLy8gZXZlcnlvbmUsIGJlY2F1c2UgdGhlIHN0cmljdCBtb2RlIGNhc2Ugd2lsbCBubyBsb25nZXIgYmUgcmVsZXZhbnRcbiAgICAgIGlmICgocmV0dXJuRmliZXIubW9kZSAmIFN0cmljdE1vZGUgfHwgd2FybkFib3V0U3RyaW5nUmVmcykgJiYgLy8gV2Ugd2FybiBpbiBSZWFjdEVsZW1lbnQuanMgaWYgb3duZXIgYW5kIHNlbGYgYXJlIGVxdWFsIGZvciBzdHJpbmcgcmVmc1xuICAgICAgLy8gYmVjYXVzZSB0aGVzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb25cbiAgICAgIC8vIHVzaW5nIGEgY29kZW1vZC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdhcm4gYWJvdXQgc3RyaW5nIHJlZnMgYWdhaW4uXG4gICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX3NlbGYgJiYgZWxlbWVudC5fb3duZXIuc3RhdGVOb2RlICE9PSBlbGVtZW50Ll9zZWxmKSkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoJ0Egc3RyaW5nIHJlZiwgXCIlc1wiLCBoYXMgYmVlbiBmb3VuZCB3aXRoaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1N0cmluZyByZWZzIGFyZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuICcgKyAnV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgbWl4ZWRSZWYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQuX293bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBpbnN0O1xuXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcblxuICAgICAgICBpZiAoIShvd25lckZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIExlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWZcIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICsgbWl4ZWRSZWYgKyBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSBpbnN0LnJlZnM7XG5cbiAgICAgICAgaWYgKHJlZnMgPT09IGVtcHR5UmVmc09iamVjdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IHBvb2xlZCBmcm96ZW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgcmVmcyA9IGluc3QucmVmcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVmLl9zdHJpbmdSZWYgPSBzdHJpbmdSZWY7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGEgc3RyaW5nLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIG51bGwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChyZXR1cm5GaWJlci50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IG5ld0NoaWxkKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG4gIH1cbn0gLy8gV2UgYXZvaWQgaW5saW5pbmcgdGhpcyB0byBhdm9pZCBwb3RlbnRpYWwgZGVvcHRzIGZyb20gdXNpbmcgdHJ5L2NhdGNoLlxuLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuLy8gYSBjb21waWxlciBvciB3ZSBjYW4gZG8gaXQgbWFudWFsbHkuIEhlbHBlcnMgdGhhdCBkb24ndCBuZWVkIHRoaXMgYnJhbmNoaW5nXG4vLyBsaXZlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG5mdW5jdGlvbiBDaGlsZFJlY29uY2lsZXIoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlbGV0aW9ucyBhcmUgYWRkZWQgaW4gcmV2ZXJzZWQgb3JkZXIgc28gd2UgYWRkIGl0IHRvIHRoZSBmcm9udC5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmV0dXJuIGZpYmVyJ3MgZWZmZWN0IGxpc3QgaXMgZW1wdHkgZXhjZXB0IGZvclxuICAgIC8vIGRlbGV0aW9ucywgc28gd2UgY2FuIGp1c3QgYXBwZW5kIHRoZSBkZWxldGlvbiB0byB0aGUgbGlzdC4gVGhlIHJlbWFpbmluZ1xuICAgIC8vIGVmZmVjdHMgYXJlbid0IGFkZGVkIHVudGlsIHRoZSBjb21wbGV0ZSBwaGFzZS4gT25jZSB3ZSBpbXBsZW1lbnRcbiAgICAvLyByZXN1bWluZywgdGhpcyBtYXkgbm90IGJlIHRydWUuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfVxuXG4gICAgY2hpbGRUb0RlbGV0ZS5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFRPRE86IEZvciB0aGUgc2hvdWxkQ2xvbmUgY2FzZSwgdGhpcyBjb3VsZCBiZSBtaWNyby1vcHRpbWl6ZWQgYSBiaXQgYnlcbiAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cblxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgY2hpbGRUb0RlbGV0ZSA9IGNoaWxkVG9EZWxldGUuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHRvIGEgdGVtcG9yYXJ5IG1hcCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZW0gYnlcbiAgICAvLyBrZXlzIHF1aWNrbHkuIEltcGxpY2l0IChudWxsKSBrZXlzIGdldCBhZGRlZCB0byB0aGlzIHNldCB3aXRoIHRoZWlyIGluZGV4XG4gICAgLy8gaW5zdGVhZC5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICB2YXIgZXhpc3RpbmdDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgY2xvbmUuaW5kZXggPSAwO1xuICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuXG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgb2xkSW5kZXggPSBjdXJyZW50LmluZGV4O1xuXG4gICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1vdmUuXG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICByZXR1cm4gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uLlxuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgKSkge1xuICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpO1xuICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9XG4gICAgfSAvLyBJbnNlcnRcblxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZyYWdtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgbnVsbCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMiA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgbnVsbCk7XG5cbiAgICAgICAgX2NyZWF0ZWQzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZWQzO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgIHZhciBrZXkgPSBvbGRGaWJlciAhPT0gbnVsbCA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBrZXkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLCBzbyB3ZSBuZWl0aGVyIGhhdmUgdG8gY2hlY2sgdGhlIG9sZCBub3JcbiAgICAgIC8vIG5ldyBub2RlIGZvciB0aGUga2V5LiBJZiBib3RoIGFyZSB0ZXh0IG5vZGVzLCB0aGV5IG1hdGNoLlxuICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgbWF0Y2hlZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBuZXdDaGlsZC5rZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjMgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMywgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KGNoaWxkLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcblxuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtub3duS2V5cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yKCdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25LZXlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuLCBsYW5lcykge1xuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNhbid0IG9wdGltaXplIGJ5IHNlYXJjaGluZyBmcm9tIGJvdGggZW5kcyBzaW5jZSB3ZVxuICAgIC8vIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIG9uIGZpYmVycy4gSSdtIHRyeWluZyB0byBzZWUgaG93IGZhciB3ZSBjYW4gZ2V0XG4gICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAvLyBhZGQgaXQgbGF0ZXIuXG4gICAgLy8gRXZlbiB3aXRoIGEgdHdvIGVuZGVkIG9wdGltaXphdGlvbiwgd2UnZCB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgY2FzZVxuICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgIC8vIGdvaW5nIGZvciB0aGUgTWFwLiBJdCdkIGxpa2UgdG8gZXhwbG9yZSBoaXR0aW5nIHRoYXQgcGF0aCBmaXJzdCBpblxuICAgIC8vIGZvcndhcmQtb25seSBtb2RlIGFuZCBvbmx5IGdvIGZvciB0aGUgTWFwIG9uY2Ugd2Ugbm90aWNlIHRoYXQgd2UgbmVlZFxuICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgIC8vIHNlYXJjaCBidXQgdGhhdCdzIHVudXN1YWwuIEJlc2lkZXMsIGZvciB0aGUgdHdvIGVuZGVkIG9wdGltaXphdGlvbiB0b1xuICAgIC8vIHdvcmsgb24gSXRlcmFibGVzLCB3ZSdkIG5lZWQgdG8gY29weSB0aGUgd2hvbGUgc2V0LlxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIHVwZGF0ZSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKCkgd2hpY2hcbiAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICB7XG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICB2YXIgX25ld0ZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgdmFyIF9uZXdGaWJlcjIgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMi5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXIyLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjIua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuSXRlcmFibGUsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgLy8gYnV0IHVzaW5nIHRoZSBpdGVyYXRvciBpbnN0ZWFkLlxuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IHRvU3RyaW5nVGFnXG4gICAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdHZW5lcmF0b3InKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0R2VuZXJhdG9ycykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBHZW5lcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCAnICsgJ3VuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuICcgKyAnWW91IG1heSBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IHdpdGggYEFycmF5LmZyb20oKWAgb3IgdGhlICcgKyAnYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBLZWVwIGluIG1pbmQgJyArICd5b3UgbWlnaHQgbmVlZCB0byBwb2x5ZmlsbCB0aGVzZSBmZWF0dXJlcyBmb3Igb2xkZXIgYnJvd3NlcnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgIH0gLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICAvLyBXZSdsbCBnZXQgYSBkaWZmZXJlbnQgaXRlcmF0b3IgbGF0ZXIgZm9yIHRoZSBtYWluIHBhc3MuXG5cblxuICAgICAgdmFyIF9uZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgaWYgKF9uZXdDaGlsZHJlbikge1xuICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICB2YXIgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoOyAhX3N0ZXAuZG9uZTsgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoIShuZXdDaGlsZHJlbiAhPSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIHZhciBfbmV3RmliZXI0ID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjQuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGZvciBrZXlzIG9uIHRleHQgbm9kZXMgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gd2F5IHRvIGRlZmluZSB0aGVtLlxuICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXhpc3Rpbmcgbm9kZSBzbyBsZXQncyBqdXN0IHVwZGF0ZSBpdCBhbmQgZGVsZXRlXG4gICAgICAvLyB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IC8vIFRoZSBleGlzdGluZyBmaXJzdCBjaGlsZCBpcyBub3QgYSB0ZXh0IG5vZGUgc28gd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgLy8gYW5kIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lcy5cblxuXG4gICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWcpIHtcbiAgICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEJsb2NrOlxuXG4gICAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBmYWxsdGhyb3VnaCBoZXJlIGlmIGVuYWJsZUJsb2Nrc0FQSSBpcyBub3Qgb24uXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZXhpc3RpbmczID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9leGlzdGluZzM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEaWRuJ3QgbWF0Y2guXG5cblxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAvLyBpdHNlbGYuIFRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2lkZS1lZmZlY3QgbGlzdCBhcyB3ZSBwYXNzIHRocm91Z2ggdGhlXG4gIC8vIGNoaWxkcmVuIGFuZCB0aGUgcGFyZW50LlxuXG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgIC8vIEhhbmRsZSB0b3AgbGV2ZWwgdW5rZXllZCBmcmFnbWVudHMgYXMgaWYgdGhleSB3ZXJlIGFycmF5cy5cbiAgICAvLyBUaGlzIGxlYWRzIHRvIGFuIGFtYmlndWl0eSBiZXR3ZWVuIDw+e1suLi5dfTwvPiBhbmQgPD4uLi48Lz4uXG4gICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICB2YXIgaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwgJiYgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJiBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuXG4gICAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbDtcblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgJycgKyBuZXdDaGlsZCwgbGFuZXMpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICd1bmRlZmluZWQnICYmICFpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIGlzIHVuZGVmaW5lZCwgYW5kIHRoZSByZXR1cm4gZmliZXIgaXMgYSBjb21wb3NpdGVcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhyb3cgYW4gZXJyb3IuIElmIEZpYmVyIHJldHVybiB0eXBlcyBhcmUgZGlzYWJsZWQsXG4gICAgICAvLyB3ZSBhbHJlYWR5IHRocmV3IGFib3ZlLlxuICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLCB3aGljaCBoYW5kbGVzIGJvdGhcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCBjbGFzc2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICBjYXNlIEJsb2NrOlxuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpICsgXCIoLi4uKTogTm90aGluZyB3YXMgcmV0dXJuZWQgZnJvbSByZW5kZXIuIFRoaXMgdXN1YWxseSBtZWFucyBhIHJldHVybiBzdGF0ZW1lbnQgaXMgbWlzc2luZy4gT3IsIHRvIHJlbmRlciBub3RoaW5nLCByZXR1cm4gbnVsbC5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cblxuXG4gICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG59XG5cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcih0cnVlKTtcbnZhciBtb3VudENoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbmZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKCEoY3VycmVudCA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gY3VycmVudC5jaGlsZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgbGFuZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgTk9fQ09OVEVYVCA9IHt9O1xudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICBpZiAoIShjICE9PSBOT19DT05URVhUKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBOT19DT05URVhULCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gSW4gb3JkZXIgdG8gY2FwdHVyZSwgdGhlIFN1c3BlbnNlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBmYWxsYmFjayBwcm9wLlxuXG4gIGlmIChwcm9wcy5mYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFJlZ3VsYXIgYm91bmRhcmllcyBhbHdheXMgY2FwdHVyZS5cblxuXG4gIGlmIChwcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGl0J3MgYSBib3VuZGFyeSB3ZSBzaG91bGQgYXZvaWQsIHRoZW4gd2UgcHJlZmVyIHRvIGJ1YmJsZSB1cCB0byB0aGVcbiAgLy8gcGFyZW50IGJvdW5kYXJ5IGlmIGl0IGlzIGN1cnJlbnRseSBpbnZpc2libGUuXG5cblxuICBpZiAoaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGFibGUgdG8gaGFuZGxlIGl0LCB3ZSBtdXN0IGhhbmRsZSBpdC5cblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICB2YXIgbm9kZSA9IHJvdztcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoZGVoeWRyYXRlZCA9PT0gbnVsbCB8fCBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGRlaHlkcmF0ZWQpIHx8IGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGRlaHlkcmF0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IChub2RlLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgIGlmIChkaWRTdXNwZW5kKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBOb0ZsYWdzJDEgPVxuLyogICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIExheW91dCA9XG4vKiAgICAqL1xuMjtcbnZhciBQYXNzaXZlJDEgPVxuLyogICAqL1xuNDtcblxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cblxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbnZhciBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlKHJldHVybkZpYmVyLnR5cGUsIHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHMsIHJldHVybkZpYmVyLnN0YXRlTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCk7XG4gIGNoaWxkVG9EZWxldGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gIGNoaWxkVG9EZWxldGUucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjsgLy8gVGhpcyBtaWdodCBzZWVtIGxpa2UgaXQgYmVsb25ncyBvbiBwcm9ncmVzc2VkRmlyc3REZWxldGlvbi4gSG93ZXZlcixcbiAgLy8gdGhlc2UgY2hpbGRyZW4gYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWNvbmNpbGlhdGlvbiBsaXN0IG9mIGNoaWxkcmVuLlxuICAvLyBFdmVuIGlmIHdlIGFib3J0IGFuZCByZXJlY29uY2lsZSB0aGUgY2hpbGRyZW4sIHRoYXQgd2lsbCB0cnkgdG8gaHlkcmF0ZVxuICAvLyBhZ2FpbiBhbmQgdGhlIG5vZGVzIGFyZSBzdGlsbCBpbiB0aGUgaG9zdCB0cmVlIHNvIHRoZXNlIHdpbGwgYmVcbiAgLy8gcmVjcmVhdGVkLlxuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmZsYWdzID0gZmliZXIuZmxhZ3MgJiB+SHlkcmF0aW5nIHwgUGxhY2VtZW50O1xuXG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciBfdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHR5cGUpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG5cbiAgICBpZiAoIW5leHRJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRVcGRhdGUgPSBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIGZpYmVyKTtcblxuICB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UgaXMgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGVcbiAgICAgIC8vIGh5ZHJhdGlvbiBwYXJlbnQgaXMgdGhlIHBhcmVudCBob3N0IGNvbXBvbmVudCBvZiB0aGlzIGhvc3QgdGV4dC5cbiAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50LnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Um9vdCAmJiBwYXJlbnQudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHBhcmVudDtcbn1cblxuZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICBpZiAoZmliZXIgIT09IGh5ZHJhdGlvblBhcmVudEZpYmVyKSB7XG4gICAgLy8gV2UncmUgZGVlcGVyIHRoYW4gdGhlIGN1cnJlbnQgaHlkcmF0aW9uIGNvbnRleHQsIGluc2lkZSBhbiBpbnNlcnRlZFxuICAgIC8vIHRyZWUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIC8vIElmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaHlkcmF0aW5nIGJ1dCB3ZSdyZSBpbiBhIGh5ZHJhdGlvbiBjb250ZXh0LCB0aGVuXG4gICAgLy8gd2Ugd2VyZSBhbiBpbnNlcnRpb24gYW5kIG5vdyBuZWVkIHRvIHBvcCB1cCByZWVudGVyIGh5ZHJhdGlvbiBvZiBvdXJcbiAgICAvLyBzaWJsaW5ncy5cbiAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBmaWJlci50eXBlOyAvLyBJZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgaHlkcmF0YWJsZSBub2Rlcywgd2UgbmVlZCB0byBkZWxldGUgdGhlbSBub3cuXG4gIC8vIFdlIG9ubHkgZG8gdGhpcyBkZWVwZXIgdGhhbiBoZWFkIGFuZCBib2R5IHNpbmNlIHRoZXkgdGVuZCB0byBoYXZlIHJhbmRvbVxuICAvLyBvdGhlciBub2RlcyBpbiB0aGVtLiBXZSBhbHNvIGlnbm9yZSBjb21wb25lbnRzIHdpdGggcHVyZSB0ZXh0IGNvbnRlbnQgaW5cbiAgLy8gc2lkZSBvZiB0aGVtLlxuICAvLyBUT0RPOiBCZXR0ZXIgaGV1cmlzdGljLlxuXG4gIGlmIChmaWJlci50YWcgIT09IEhvc3RDb21wb25lbnQgfHwgdHlwZSAhPT0gJ2hlYWQnICYmIHR5cGUgIT09ICdib2R5JyAmJiAhc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpIHtcbiAgICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICAgIHdoaWxlIChuZXh0SW5zdGFuY2UpIHtcbiAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldElzSHlkcmF0aW5nKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmc7XG59XG5cbi8vIGFuZCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHJlbmRlci5cbi8vIFRoaXMgdHJhY2tzIHdoaWNoIG11dGFibGUgc291cmNlcyBuZWVkIHRvIGJlIHJlc2V0IGFmdGVyIGEgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NTb3VyY2VzID0gW107XG52YXIgcmVuZGVyZXJTaWdpbCQxO1xuXG57XG4gIC8vIFVzZWQgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBtdXRhYmxlIHNvdXJjZS5cbiAgcmVuZGVyZXJTaWdpbCQxID0ge307XG59XG5cbmZ1bmN0aW9uIG1hcmtTb3VyY2VBc0RpcnR5KG11dGFibGVTb3VyY2UpIHtcbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG11dGFibGVTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzc1NvdXJjZXNbaV07XG5cbiAgICB7XG4gICAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoID0gMDtcbn1cbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICByZXR1cm4gbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pIHtcbiAge1xuICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSB2ZXJzaW9uO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICB7XG4gICAgICBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsJDE7XG4gICAgICB9IGVsc2UgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwkMSkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBtdXRhYmxlIHNvdXJjZS4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIEVhZ2VyIHJlYWRzIHRoZSB2ZXJzaW9uIG9mIGEgbXV0YWJsZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBvbiB0aGUgcm9vdC5cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyO1xuXG57XG4gIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbi8vIGRvZXMgbm90IGdldCByZXNldCBpZiB3ZSBkbyBhbm90aGVyIHJlbmRlciBwYXNzOyBvbmx5IHdoZW4gd2UncmUgY29tcGxldGVseVxuLy8gZmluaXNoZWQgZXZhbHVhdGluZyB0aGlzIGNvbXBvbmVudC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gd2Uga25vd1xuLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFdoZXJlIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9ubHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLiBUaGlzXG4vLyBnZXRzIHJlc2V0IGFmdGVyIGVhY2ggYXR0ZW1wdC5cbi8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4vLyBgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZWAuIE9yIHdpdGggYG51bWJlck9mUmVSZW5kZXJzYC5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudHlwZSk7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhYmxlID0gJyc7XG4gICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV07XG4gICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID0gaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBjdXJyZW50SG9va05hbWUgOiBvbGRIb29rTmFtZTtcbiAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgIC8vIGxvbCBAIElFIG5vdCBzdXBwb3J0aW5nIFN0cmluZyNyZXBlYXRcblxuICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgc2Vjb25kQ29sdW1uU3RhcnQpIHtcbiAgICAgICAgICAgIHJvdyArPSAnICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm93ICs9IG5ld0hvb2tOYW1lICsgJ1xcbic7XG4gICAgICAgICAgdGFibGUgKz0gcm93O1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJ1JlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiAnICsgJ1RoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4nICsgJyAgIFByZXZpb3VzIHJlbmRlciAgICAgICAgICAgIE5leHQgcmVuZGVyXFxuJyArICcgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nICsgJyVzJyArICcgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cXG4nLCBjb21wb25lbnROYW1lLCB0YWJsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAge1xuICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykge1xuICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2RGVwcyA9PT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nIGxlbmd0aHMgaW4gcHJvZCBiZWNhdXNlIHRoZXNlIGFycmF5cyBzaG91bGQgYmVcbiAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgIGlmIChuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCkge1xuICAgICAgZXJyb3IoJ1RoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlICcgKyAnb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG4nICsgJ1ByZXZpb3VzOiAlc1xcbicgKyAnSW5jb21pbmc6ICVzJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIFwiW1wiICsgcHJldkRlcHMuam9pbignLCAnKSArIFwiXVwiLCBcIltcIiArIG5leHREZXBzLmpvaW4oJywgJykgKyBcIl1cIik7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZywgbmV4dFJlbmRlckxhbmVzKSB7XG4gIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gVXNlZCBmb3IgaG90IHJlbG9hZGluZzpcblxuICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gIC8vIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgLy8gd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBtZW1vaXplZFN0YXRlID09PSBudWxsLlxuICAvLyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGl0J3MgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgY29tcG9uZW50cyAoZS5nLiBSZWFjdC5sYXp5KVxuICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAvLyBOb24tc3RhdGVmdWwgaG9va3MgKGUuZy4gY29udGV4dCkgZG9uJ3QgZ2V0IGFkZGVkIHRvIG1lbW9pemVkU3RhdGUsXG4gIC8vIHNvIG1lbW9pemVkU3RhdGUgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG4gIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcblxuICAgIGRvIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIShudW1iZXJPZlJlUmVuZGVycyA8IFJFX1JFTkRFUl9MSU1JVCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAge1xuICAgICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcbiAgICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgICBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG5cbiAgaWYgKCEhZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSB8IFVwZGF0ZSk7XG4gIGN1cnJlbnQubGFuZXMgPSByZW1vdmVMYW5lcyhjdXJyZW50LmxhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiByZXNldEhvb2tzQWZ0ZXJUaHJvdygpIHtcbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgLy8gcGhhc2UsIHdoaWNoIHdlIGFyZSBub3cgYWJvcnRpbmcuIFJlbW92ZSB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZXMgc29cbiAgICAvLyB0aGV5IGRvIG5vdCBwZXJzaXN0IHRvIHRoZSBuZXh0IHJlbmRlci4gRG8gbm90IHJlbW92ZSB1cGRhdGVzIGZyb20gaG9va3NcbiAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgIC8vXG4gICAgLy8gT25seSByZXNldCB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZSBpZiBpdCBoYXMgYSBjbG9uZS4gSWYgaXQgZG9lc1xuICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAvLyBzY2hlZHVsZWQgYmVmb3JlIHdlIGVudGVyZWQgdGhlIHJlbmRlciBwaGFzZS5cbiAgICB2YXIgaG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgfVxuXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgIHF1ZXVlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICB2YXIgbmV4dEN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB9XG5cbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICB9XG5cbiAgaWYgKG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSB3b3JrLWluLXByb2dyZXNzLiBSZXVzZSBpdC5cbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBDbG9uZSBmcm9tIHRoZSBjdXJyZW50IGhvb2suXG4gICAgaWYgKCEobmV4dEN1cnJlbnRIb29rICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICB2YXIgbmV3SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gbmV3SG9vaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsYXN0RWZmZWN0OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBpbml0aWFsU3RhdGU7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudCA9IGN1cnJlbnRIb29rOyAvLyBUaGUgbGFzdCByZWJhc2UgdXBkYXRlIHRoYXQgaXMgTk9UIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cbiAgdmFyIGJhc2VRdWV1ZSA9IGN1cnJlbnQuYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAvLyBXZSdsbCBhZGQgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cbiAgICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICB2YXIgcGVuZGluZ0ZpcnN0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgIC8vIEludGVybmFsIGludmFyaWFudCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBmZWFzaWJseSBjb3VsZCBpblxuICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgIGVycm9yKCdJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gY3VycmVudC5iYXNlU3RhdGU7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAvLyByZW5kZXJMYW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIGlmICh1cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdDtcbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyOyAvLyBUaGlzIGlzIGEgcmUtcmVuZGVyLiBBcHBseSB0aGUgbmV3IHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvIHRoZSBwcmV2aW91c1xuICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHZhciBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nO1xuICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSBxdWV1ZSBkb2Vzbid0IHBlcnNpc3QgcGFzdCB0aGlzIHJlbmRlciBwYXNzLlxuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQ7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUpOyAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7IC8vIERvbid0IHBlcnNpc3QgdGhlIHN0YXRlIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvXG4gICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgIC8vIGRvIGZvciBnRFNGUC4gSSBjYW4ndCByZW1lbWJlciB3aHkuXG5cbiAgICBpZiAoaG9vay5iYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCkge1xuICB7XG4gICAgd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYoc291cmNlKTtcbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpOyAvLyBJcyBpdCBzYWZlIGZvciB0aGlzIGNvbXBvbmVudCB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcj9cblxuICB2YXIgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGZhbHNlOyAvLyBDaGVjayB0aGUgdmVyc2lvbiBmaXJzdC5cbiAgLy8gSWYgdGhpcyByZW5kZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uLFxuICAvLyB3ZSBjYW4gdXNlIGl0IGFsb25lIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgZnJvbSB0aGUgc291cmNlLlxuXG4gIHZhciBjdXJyZW50UmVuZGVyVmVyc2lvbiA9IGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UpO1xuXG4gIGlmIChjdXJyZW50UmVuZGVyVmVyc2lvbiAhPT0gbnVsbCkge1xuICAgIC8vIEl0J3Mgc2FmZSB0byByZWFkIGlmIHRoZSBzdG9yZSBoYXNuJ3QgYmVlbiBtdXRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWVcbiAgICAvLyB3ZSByZWFkIHNvbWV0aGluZy5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gY3VycmVudFJlbmRlclZlcnNpb24gPT09IHZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyB2ZXJzaW9uLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgcmVhZCBmcm9tIHRoZVxuICAgIC8vIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MsIHNvIHdlIG5lZWQgdG8gZG8gYSBiaXQgbW9yZSB3b3JrLlxuICAgIC8vIFdoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaXMgaWYgdGhlcmUgYXJlIGFueSBob29rcyB0aGF0IGFscmVhZHlcbiAgICAvLyBzdWJzY3JpYmVkIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgd2hldGhlciB0aGVyZSBhcmUgYW55IHBlbmRpbmdcbiAgICAvLyBtdXRhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc3luY2hyb25pemVkIHlldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIG11dGF0aW9ucywgdGhlbiBgcm9vdC5tdXRhYmxlUmVhZExhbmVzYCB3aWxsIGJlXG4gICAgLy8gZW1wdHksIGFuZCB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgcmVhZC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlICphcmUqIHBlbmRpbmcgbXV0YXRpb25zLCB3ZSBtYXkgc3RpbGwgYmUgYWJsZSB0byBzYWZlbHkgcmVhZFxuICAgIC8vIGlmIHRoZSBjdXJyZW50bHkgcmVuZGVyaW5nIGxhbmVzIGFyZSBpbmNsdXNpdmUgb2YgdGhlIHBlbmRpbmcgbXV0YXRpb25cbiAgICAvLyBsYW5lcywgc2luY2UgdGhhdCBndWFyYW50ZWVzIHRoYXQgdGhlIHZhbHVlIHdlJ3JlIGFib3V0IHRvIHJlYWQgZnJvbVxuICAgIC8vIHRoZSBzb3VyY2UgaXMgY29uc2lzdGVudCB3aXRoIHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGR1cmluZyB0aGUgbW9zdFxuICAgIC8vIHJlY2VudCBtdXRhdGlvbi5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuXG4gICAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICAgIC8vIElmIGl0J3Mgc2FmZSB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcixcbiAgICAgIC8vIHN0b3JlIHRoZSB2ZXJzaW9uIGluIGNhc2Ugb3RoZXIgY29tcG9uZW50cyByZWFkIGZyb20gaXQuXG4gICAgICAvLyBBIGNoYW5nZWQgdmVyc2lvbiBudW1iZXIgd2lsbCBsZXQgdGhvc2UgY29tcG9uZW50cyBrbm93IHRvIHRocm93IGFuZCByZXN0YXJ0IHRoZSByZW5kZXIuXG4gICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlLCB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgIHZhciBzbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2Ygc25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBtdXRhYmxlIHNvdXJjZSBiZWluZyBzaGFyZWQgYmV0d2VlbiByZW5kZXJlcnMuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCBpZiB0aGUgc291cmNlIGlzIG11dGF0ZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCByZW5kZXJlcixcbiAgICAvLyBUaGUgc2Vjb25kIHJlbmRlcmVyIGRvbid0IGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0aGUgV0lQIHZlcnNpb24gZHVyaW5nIHVud2luZCxcbiAgICAvLyAoYmVjYXVzZSB0aGUgaG9vayBvbmx5IG1hcmtzIHNvdXJjZXMgYXMgZGlydHkgaWYgaXQncyB3cml0dGVuIHRvIHRoZWlyIFdJUCB2ZXJzaW9uKS5cbiAgICAvLyBUaGF0IHdvdWxkIGNhdXNlIHRoaXMgdGVhciBjaGVjayB0byB0aHJvdyBhZ2FpbiBhbmQgZXZlbnR1YWxseSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdlIGNhbiBhdm9pZCB0aGlzIGluZmluaXRlIGxvb3AgYnkgZXhwbGljaXRseSBtYXJraW5nIHRoZSBzb3VyY2UgYXMgZGlydHkuXG4gICAgLy9cbiAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIHRlYXJpbmcgaW4gdGhlIGZpcnN0IHJlbmRlcmVyIHdoZW4gaXQgcmVzdW1lcyxcbiAgICAvLyBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGF0IChzaG9ydCBvZiB0aHJvd2luZyBoZXJlIGFuZCByZWZ1c2luZyB0byBjb250aW51ZSB0aGUgcmVuZGVyKS5cbiAgICBtYXJrU291cmNlQXNEaXJ0eShzb3VyY2UpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgcmVhZCBmcm9tIG11dGFibGUgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCB0ZWFyaW5nLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gIGlmICghKHJvb3QgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcblxuICB2YXIgX2Rpc3BhdGNoZXIkdXNlU3RhdGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gIH0pLFxuICAgICAgY3VycmVudFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzFdO1xuXG4gIHZhciBzbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDsgLy8gR3JhYiBhIGhhbmRsZSB0byB0aGUgc3RhdGUgaG9vayBhcyB3ZWxsLlxuICAvLyBXZSB1c2UgaXQgdG8gY2xlYXIgdGhlIHBlbmRpbmcgdXBkYXRlIHF1ZXVlIGlmIHdlIGhhdmUgYSBuZXcgc291cmNlLlxuXG4gIHZhciBzdGF0ZUhvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gIHZhciBtZW1vaXplZFN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgcmVmcyA9IG1lbW9pemVkU3RhdGUucmVmcztcbiAgdmFyIHByZXZHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gIHZhciBwcmV2U291cmNlID0gbWVtb2l6ZWRTdGF0ZS5zb3VyY2U7XG4gIHZhciBwcmV2U3Vic2NyaWJlID0gbWVtb2l6ZWRTdGF0ZS5zdWJzY3JpYmU7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiByZWZzLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07IC8vIFN5bmMgdGhlIHZhbHVlcyBuZWVkZWQgYnkgb3VyIHN1YnNjcmlwdGlvbiBoYW5kbGVyIGFmdGVyIGVhY2ggY29tbWl0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZzLmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIE5vcm1hbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgYSBzdGF0ZSBob29rIG5ldmVyIGNoYW5nZXMsXG4gICAgLy8gYnV0IHRoaXMgaG9vayByZWNyZWF0ZXMgdGhlIHF1ZXVlIGluIGNlcnRhaW4gY2FzZXMgIHRvIGF2b2lkIHVwZGF0ZXMgZnJvbSBzdGFsZSBzb3VyY2VzLlxuICAgIC8vIGhhbmRsZUNoYW5nZSgpIGJlbG93IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gd2l0aG91dCByZS1zdWJzY3JpYmluZyxcbiAgICAvLyBzbyB3ZSB1c2UgYSByZWYgdG8gZW5zdXJlIHRoYXQgaXQgYWx3YXlzIGhhcyB0aGUgbGF0ZXN0IHZlcnNpb24uXG5cbiAgICByZWZzLnNldFNuYXBzaG90ID0gc2V0U25hcHNob3Q7IC8vIENoZWNrIGZvciBhIHBvc3NpYmxlIGNoYW5nZSBiZXR3ZWVuIHdoZW4gd2UgbGFzdCByZW5kZXJlZCBub3cuXG5cbiAgICB2YXIgbWF5YmVOZXdWZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICBpZiAoIW9iamVjdElzKHZlcnNpb24sIG1heWJlTmV3VmVyc2lvbikpIHtcbiAgICAgIHZhciBtYXliZU5ld1NuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgbWF5YmVOZXdTbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RJcyhzbmFwc2hvdCwgbWF5YmVOZXdTbmFwc2hvdCkpIHtcbiAgICAgICAgc2V0U25hcHNob3QobWF5YmVOZXdTbmFwc2hvdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSAvLyBJZiB0aGUgc291cmNlIG11dGF0ZWQgYmV0d2VlbiByZW5kZXIgYW5kIG5vdyxcbiAgICAgIC8vIHRoZXJlIG1heSBiZSBzdGF0ZSB1cGRhdGVzIGFscmVhZHkgc2NoZWR1bGVkIGZyb20gdGhlIG9sZCBzb3VyY2UuXG4gICAgICAvLyBFbnRhbmdsZSB0aGUgdXBkYXRlcyBzbyB0aGF0IHRoZXkgcmVuZGVyIGluIHRoZSBzYW1lIGJhdGNoLlxuXG5cbiAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG4gICAgfVxuICB9LCBbZ2V0U25hcHNob3QsIHNvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIHdlIGdvdCBhIG5ldyBzb3VyY2Ugb3Igc3Vic2NyaWJlIGZ1bmN0aW9uLCByZS1zdWJzY3JpYmUgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gICAgICB2YXIgbGF0ZXN0U2V0U25hcHNob3QgPSByZWZzLnNldFNuYXBzaG90O1xuXG4gICAgICB0cnkge1xuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChsYXRlc3RHZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSkpOyAvLyBSZWNvcmQgYSBwZW5kaW5nIG11dGFibGUgc291cmNlIHVwZGF0ZSB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS5cblxuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgc2VsZWN0b3IgbWlnaHQgdGhyb3cgYWZ0ZXIgYSBzb3VyY2UgbXV0YXRpb24uXG4gICAgICAgIC8vIGUuZy4gaXQgbWlnaHQgdHJ5IHRvIHJlYWQgZnJvbSBhIHBhcnQgb2YgdGhlIHN0b3JlIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzdGlsbCBzY2hlZHVsZSBhbiB1cGRhdGUgd2l0aCBSZWFjdC5cbiAgICAgICAgLy8gV29yc3QgY2FzZSB0aGUgc2VsZWN0b3Igd2lsbCB0aHJvdyBhZ2FpbiBhbmQgdGhlbiBhbiBlcnJvciBib3VuZGFyeSB3aWxsIGhhbmRsZSBpdC5cbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlKHNvdXJjZS5fc291cmNlLCBoYW5kbGVDaGFuZ2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiB1bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc3Vic2NyaWJlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfSwgW3NvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIGFueSBvZiB0aGUgaW5wdXRzIHRvIHVzZU11dGFibGVTb3VyY2UgY2hhbmdlLCByZWFkaW5nIGlzIHBvdGVudGlhbGx5IHVuc2FmZS5cbiAgLy9cbiAgLy8gSWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgdGhlIHN1YnNjcmlwdGlvbiBoYXZlIGNoYW5nZWQgd2UgY2FuJ3QgY2FuJ3QgdHJ1c3QgdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gTWF5YmUgdGhlIHNvdXJjZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgdGhlIG9sZCBzdWJzY3JpcHRpb24gaWdub3JlZCBidXQgdGhlIG5ldyBvbmUgZGVwZW5kcyBvbi5cbiAgLy9cbiAgLy8gSWYgdGhlIGdldFNuYXBzaG90IGZ1bmN0aW9uIGNoYW5nZWQsIHdlIGFsc28gc2hvdWxkbid0IHJlbHkgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvdXJjZSB3YXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSB3aGVuIHRoZSBsYXN0IFwiY2hhbmdlXCIgZXZlbnQgZmlyZWQsXG4gIC8vIGFuZCB3aGVuIHRoZSBjdXJyZW50IHJlbmRlciAod2l0aCB0aGUgbmV3IGdldFNuYXBzaG90IGZ1bmN0aW9uKSBpcyBwcm9jZXNzZWQuXG4gIC8vXG4gIC8vIEluIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gdGhyb3cgYXdheSBwZW5kaW5nIHVwZGF0ZXMgKHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciByZWxldmFudClcbiAgLy8gYW5kIHRyZWF0IHJlYWRpbmcgZnJvbSB0aGUgc291cmNlIGFzIHdlIGRvIGluIHRoZSBtb3VudCBjYXNlLlxuXG4gIGlmICghb2JqZWN0SXMocHJldkdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCkgfHwgIW9iamVjdElzKHByZXZTb3VyY2UsIHNvdXJjZSkgfHwgIW9iamVjdElzKHByZXZTdWJzY3JpYmUsIHN1YnNjcmliZSkpIHtcbiAgICAvLyBDcmVhdGUgYSBuZXcgcXVldWUgYW5kIHNldFN0YXRlIG1ldGhvZCxcbiAgICAvLyBTbyBpZiB0aGVyZSBhcmUgaW50ZXJsZWF2ZWQgdXBkYXRlcywgdGhleSBnZXQgcHVzaGVkIHRvIHRoZSBvbGRlciBxdWV1ZS5cbiAgICAvLyBXaGVuIHRoaXMgYmVjb21lcyBjdXJyZW50LCB0aGUgcHJldmlvdXMgcXVldWUgYW5kIGRpc3BhdGNoIG1ldGhvZCB3aWxsIGJlIGRpc2NhcmRlZCxcbiAgICAvLyBpbmNsdWRpbmcgYW55IGludGVybGVhdmluZyB1cGRhdGVzIHRoYXQgb2NjdXIuXG4gICAgdmFyIG5ld1F1ZXVlID0ge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogc25hcHNob3RcbiAgICB9O1xuICAgIG5ld1F1ZXVlLmRpc3BhdGNoID0gc2V0U25hcHNob3QgPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIG5ld1F1ZXVlKTtcbiAgICBzdGF0ZUhvb2sucXVldWUgPSBuZXdRdWV1ZTtcbiAgICBzdGF0ZUhvb2suYmFzZVF1ZXVlID0gbnVsbDtcbiAgICBzbmFwc2hvdCA9IHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICAgIHN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rLmJhc2VTdGF0ZSA9IHNuYXBzaG90O1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHtcbiAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgIHNldFNuYXBzaG90OiBudWxsXG4gICAgfSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9O1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBkZXN0cm95LCBkZXBzKSB7XG4gIHZhciBlZmZlY3QgPSB7XG4gICAgdGFnOiB0YWcsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkZXBzOiBkZXBzLFxuICAgIC8vIENpcmN1bGFyXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RFZmZlY3QgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJlZiA9IHtcbiAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHJlZjtcbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gaG9vay5tZW1vaXplZFN0YXRlO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCB1bmRlZmluZWQsIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIGRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZFZmZlY3QgPSBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICAgIGRlc3Ryb3kgPSBwcmV2RWZmZWN0LmRlc3Ryb3k7XG5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZFZmZlY3QuZGVwcztcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7Ly8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gIC8vIFRoZSByZWFjdC1kZWJ1Zy1ob29rcyBwYWNrYWdlIGluamVjdHMgaXRzIG93biBpbXBsZW1lbnRhdGlvblxuICAvLyBzbyB0aGF0IGUuZy4gRGV2VG9vbHMgY2FuIGRpc3BsYXkgY3VzdG9tIGhvb2sgdmFsdWVzLlxufVxuXG52YXIgdXBkYXRlRGVidWdWYWx1ZSA9IG1vdW50RGVidWdWYWx1ZTtcblxuZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX21vdW50U3RhdGUgPSBtb3VudFN0YXRlKHZhbHVlKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9tb3VudFN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfbW91bnRTdGF0ZVsxXTtcblxuICBtb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3VwZGF0ZVN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfdXBkYXRlU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzZXRQZW5kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPCBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID8gVXNlckJsb2NraW5nUHJpb3JpdHkkMiA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFBlbmRpbmcodHJ1ZSk7XG4gICAgfSk7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UGVuZGluZyhmYWxzZSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gIHZhciBfbW91bnRTdGF0ZTIgPSBtb3VudFN0YXRlKGZhbHNlKSxcbiAgICAgIGlzUGVuZGluZyA9IF9tb3VudFN0YXRlMlswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMV07IC8vIFRoZSBgc3RhcnRgIG1ldGhvZCBjYW4gYmUgc3RvcmVkIG9uIGEgcmVmLCBzaW5jZSBgc2V0UGVuZGluZ2BcbiAgLy8gbmV2ZXIgY2hhbmdlcy5cblxuXG4gIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKG51bGwsIHNldFBlbmRpbmcpO1xuICBtb3VudFJlZihzdGFydCk7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUyID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF91cGRhdGVTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyVHJhbnNpdGlvbigpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlMiA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF9yZXJlbmRlclN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxudmFyIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpIHtcbiAge1xuICAgIHJldHVybiBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdhcm4gaW4gZWZmZWN0cyBhbmQgY2FsbGJhY2tzLCB0b29cbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgaWYgKGdldElzUmVuZGVyaW5nKCkgJiYgIWRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0pIHtcbiAgICAgIGVycm9yKCdUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSAnICsgJ3Bhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlICcgKyAndmFsdWUgZGlyZWN0bHkuJyk7XG5cbiAgICAgIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBtYWtlSWQgPSAgbWFrZUNsaWVudElkSW5ERVYuYmluZChudWxsLCB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSkgO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIGRpZFVwZ3JhZGUgPSBmYWxzZTtcbiAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuXG4gICAgdmFyIHJlYWRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghZGlkVXBncmFkZSkge1xuICAgICAgICAvLyBPbmx5IHVwZ3JhZGUgb25jZS4gVGhpcyB3b3JrcyBldmVuIGluc2lkZSB0aGUgcmVuZGVyIHBoYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHVwZGF0ZSBpcyBhZGRlZCB0byBhIHNoYXJlZCBxdWV1ZSwgd2hpY2ggb3V0bGFzdHMgdGhlXG4gICAgICAgIC8vIGluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgZGlkVXBncmFkZSA9IHRydWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSB0cnVlO1xuICAgICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gICAgICAgICAgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSB2YWx1ZSBkaXJlY3RseS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpZCA9IG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QocmVhZFZhbHVlKTtcbiAgICB2YXIgc2V0SWQgPSBtb3VudFN0YXRlKGlkKVsxXTtcblxuICAgIGlmICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IFVwZGF0ZSB8IFBhc3NpdmU7XG4gICAgICBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IFBhc3NpdmUkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2lkID0gbWFrZUlkKCk7XG5cbiAgICBtb3VudFN0YXRlKF9pZCk7XG4gICAgcmV0dXJuIF9pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSB1cGRhdGVTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gcmVyZW5kZXJTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIGVhZ2VyUmVkdWNlcjogbnVsbCxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTsgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgIC8vIHF1ZXVlIC0+IGxpbmtlZCBsaXN0IG9mIHVwZGF0ZXMuIEFmdGVyIHRoaXMgcmVuZGVyIHBhc3MsIHdlJ2xsIHJlc3RhcnRcbiAgICAvLyBhbmQgYXBwbHkgdGhlIHN0YXNoZWQgdXBkYXRlcyBvbiB0b3Agb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZmliZXIubGFuZXMgPT09IE5vTGFuZXMgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIGxhc3RSZW5kZXJlZFJlZHVjZXIgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuXG4gICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgIHZhciBlYWdlclN0YXRlID0gbGFzdFJlbmRlcmVkUmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7IC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuXG4gICAgICAgICAgdXBkYXRlLmVhZ2VyUmVkdWNlciA9IGxhc3RSZW5kZXJlZFJlZHVjZXI7XG4gICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcik7XG4gICAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59XG5cbnZhciBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNdXRhYmxlU291cmNlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU9wYXF1ZUlkZW50aWZpZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xufVxuXG52YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGNvbW1pdFRpbWUgPSAwO1xudmFyIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuXG4gIGNvbW1pdFRpbWUgPSBub3ckMSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdyQxKCk7XG5cbiAgaWYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA8IDApIHtcbiAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3ckMSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuXG4gIGlmIChwcm9maWxlclN0YXJ0VGltZSA+PSAwKSB7XG4gICAgdmFyIGVsYXBzZWRUaW1lID0gbm93JDEoKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuXG4gICAgaWYgKG92ZXJyaWRlQmFzZVRpbWUpIHtcbiAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICB9XG5cbiAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgLy8gVHJhbnNmZXIgdGltZSBzcGVudCByZW5kZXJpbmcgdGhlc2UgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbG9zZSBpdFxuICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgLy8gd2hlcmUgd2Ugc2hvdWxkIGNvdW50IHRoZSB3b3JrIG9mIG11bHRpcGxlIHBhc3Nlcy5cbiAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG5cbntcbiAgZGlkV2FybkFib3V0QmFkQ2xhc3MgPSB7fTtcbiAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMgPSB7fTtcbiAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBmcmVzaCBuZXcgY29tcG9uZW50IHRoYXQgaGFzbid0IGJlZW4gcmVuZGVyZWQgeWV0LCB3ZVxuICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgIC8vIHdlIHdpbGwgYWRkIHRoZW0gYWxsIHRvIHRoZSBjaGlsZCBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZC4gVGhhdCBtZWFuc1xuICAgIC8vIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIHJlY29uY2lsaWF0aW9uIHBhc3MgYnkgbm90IHRyYWNraW5nIHNpZGUtZWZmZWN0cy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgLy8gd2UgaGF2ZW4ndCB5ZXQgc3RhcnRlZCBhbnkgd29yayBvbiB0aGVzZSBjaGlsZHJlbi4gVGhlcmVmb3JlLCB3ZSB1c2VcbiAgICAvLyB0aGUgY2xvbmUgYWxnb3JpdGhtIHRvIGNyZWF0ZSBhIGNvcHkgb2YgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuLlxuICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgLy8gbGV0J3MgdGhyb3cgaXQgb3V0LlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgLy8gd2FudCB0byByZWNvbmNpbGUgd2l0aG91dCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBleGlzdGluZyBzZXQuIFRoaXMgaGFzIHRoZVxuICAvLyBlZmZlY3Qgb2YgYWxsIGN1cnJlbnQgY2hpbGRyZW4gYmVpbmcgdW5tb3VudGVkOyBldmVuIGlmIHRoZSB0eXBlIGFuZCBrZXlcbiAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgLy9cbiAgLy8gVG8gZG8gdGhpcywgd2UncmUgZ29pbmcgdG8gZ28gdGhyb3VnaCB0aGUgcmVjb25jaWxlIGFsZ29yaXRobSB0d2ljZS4gSW5cbiAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAvLyBwYXNzaW5nIG51bGwuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gSW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBtb3VudCB0aGUgbmV3IGNoaWxkcmVuLiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHdlXG4gIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAvLyB0aGUgZWZmZWN0IG9mIHJlbW91bnRpbmcgYWxsIGNoaWxkcmVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVpclxuICAvLyBpZGVudGl0aWVzIG1hdGNoLlxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVuZGVyID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhDb21wb25lbnQudHlwZSwgbnVsbCwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MubW9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHtcbiAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICB2YXIgX2lubmVyUHJvcFR5cGVzID0gX3R5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKF9pbm5lclByb3BUeXBlcykge1xuICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICBjaGVja1Byb3BUeXBlcyhfaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAvLyB1bmxpa2UgY3VycmVudC5tZW1vaXplZFByb3BzIHdoaWNoIHdpbGwgYmUgdGhlIHVucmVzb2x2ZWQgb25lcy5cbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudENoaWxkLm1lbW9pemVkUHJvcHM7IC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG5cbiAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgIGNvbXBhcmUgPSBjb21wYXJlICE9PSBudWxsID8gY29tcGFyZSA6IHNoYWxsb3dFcXVhbDtcblxuICAgIGlmIChjb21wYXJlKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBpbm5lciByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBvdXRlck1lbW9UeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG5cbiAgICAgIGlmIChvdXRlck1lbW9UeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHNraXAgb3ZlciBpdCB0byBmaW5kIG1lbW8oKSBvdXRlciB3cmFwcGVyLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBmb3IgbWVtbyBhcmUgdmFsaWRhdGVkIGxhdGVyLlxuICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IGluaXQocGF5bG9hZCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgfSAvLyBJbm5lciBwcm9wVHlwZXMgd2lsbCBiZSB2YWxpZGF0ZWQgaW4gdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCBwYXRoLlxuXG5cbiAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCAoU2ltcGxlTWVtb0NvbXBvbmVudCBoYXMgbm8gZGVmYXVsdFByb3BzKVxuICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShvdXRlck1lbW9UeXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgIC8vIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbGFuZXMgdGhhdCB3ZXJlbid0XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IHJlbmRlci4gVXN1YWxseSwgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZVxuICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBuZXh0UHJvcHMubW9kZSA9PT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBsZWdhY3kgc3luYyBtb2RlLCBkb24ndCBkZWZlciB0aGUgc3VidHJlZS4gUmVuZGVyIGl0IG5vdy5cbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB3ZSBzaG91bGQgZG8gaW4gQmxvY2tpbmcgbW9kZS5cbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgdmFyIG5leHRCYXNlTGFuZXM7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZCYXNlTGFuZXMgPSBwcmV2U3RhdGUuYmFzZUxhbmVzO1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2QmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBsYW5lVG9MYW5lcyhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTsgLy8gV2UncmUgYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggdGhpcyB0byB0aGUgc3RhY2sgYW55d2F5XG4gICAgICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW5kZXJpbmcgYXQgb2Zmc2NyZWVuLCBzbyB3ZSBjYW4gY2xlYXIgdGhlIGJhc2UgbGFuZXMuXG4gICAgICB2YXIgX25leHRTdGF0ZTIgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlMjsgLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG4gICAgICB2YXIgc3VidHJlZVJlbmRlckxhbmVzID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmJhc2VMYW5lcyA6IHJlbmRlckxhbmVzO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3N1YnRyZWVSZW5kZXJMYW5lcztcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZTdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHdlcmVuJ3QgcHJldmlvdXNseSBoaWRkZW4sIGFuZCB3ZSBzdGlsbCBhcmVuJ3QsIHNvIHRoZXJlJ3Mgbm90aGluZ1xuICAgICAgLy8gc3BlY2lhbCB0byBkby4gTmVlZCB0byBwdXNoIHRvIHRoZSBzdGFjayByZWdhcmRsZXNzLCB0aG91Z2gsIHRvIGF2b2lkXG4gICAgICAvLyBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB9XG5cbiAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIF9zdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59IC8vIE5vdGU6IFRoZXNlIGhhcHBlbiB0byBoYXZlIGlkZW50aWNhbCBiZWdpbiBwaGFzZXMsIGZvciBub3cuIFdlIHNob3VsZG4ndCBob2xkXG4vLyBvdXJzZWx2ZXMgdG8gdGhpcyBjb25zdHJhaW50LCB0aG91Z2guIElmIHRoZSBiZWhhdmlvciBkaXZlcmdlcywgd2Ugc2hvdWxkXG4vLyBmb3JrIHRoZSBmdW5jdGlvbi5cblxuXG52YXIgdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTsgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cbiAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZTtcblxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBjbGFzcyBjb21wb25lbnQgd2l0aG91dCBhbiBpbnN0YW5jZSBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWRcbiAgICAgIC8vIGluc2lkZSBhIG5vbi1jb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0b1xuICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5XG4gICAgICAvLyBjb21taXR0ZWQuIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH0gLy8gSW4gdGhlIGluaXRpYWwgcGFzcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuXG5cblxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlICYmIGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgIGVycm9yKCdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ2EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gUmVyZW5kZXJcblxuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbjtcblxuICBpZiAoZGlkQ2FwdHVyZUVycm9yICYmIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgd2UgY2FwdHVyZWQgYW4gZXJyb3IsIGJ1dCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgIG5leHRDaGlsZHJlbiA9IGluc3RhbmNlLnJlbmRlcigpO1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gSWYgd2UncmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZWNvbmNpbGUgd2l0aG91dCByZXVzaW5nIGFueSBvZlxuICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAvLyB0aGF0IGFyZSBzaG93biBvbiBlcnJvciBhcmUgdHdvIGRpZmZlcmVudCBzZXRzLCBzbyB3ZSBzaG91bGRuJ3QgcmV1c2VcbiAgICAvLyBub3JtYWwgY2hpbGRyZW4gZXZlbiBpZiB0aGVpciBpZGVudGl0aWVzIG1hdGNoLlxuICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBNZW1vaXplIHN0YXRlIHVzaW5nIHRoZSB2YWx1ZXMgd2UganVzdCB1c2VkIHRvIHJlbmRlci5cbiAgLy8gVE9ETzogUmVzdHJ1Y3R1cmUgc28gd2UgbmV2ZXIgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgaW5zdGFuY2UuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7IC8vIFRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0LlxuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QucGVuZGluZ0NvbnRleHQsIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dCk7XG4gIH0gZWxzZSBpZiAocm9vdC5jb250ZXh0KSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzZXRcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCByb290LmNvbnRhaW5lckluZm8pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICghKGN1cnJlbnQgIT09IG51bGwgJiYgdXBkYXRlUXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgdGhlIHJvb3QgZG9lcyBub3QgaGF2ZSBhbiB1cGRhdGVRdWV1ZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiYWlsZWQgb3V0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuZWxlbWVudCA6IG51bGw7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QuaHlkcmF0ZSAmJiBlbnRlckh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1cnJlbnQgY2hpbGRyZW4gdGhpcyBtaWdodCBiZSB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBXZSBhbHdheXMgdHJ5IHRvIGh5ZHJhdGUuIElmIHRoaXMgaXNuJ3QgYSBoeWRyYXRpb24gcGFzcyB0aGVyZSB3b24ndFxuICAgIC8vIGJlIGFueSBjaGlsZHJlbiB0byBoeWRyYXRlIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nIGFzXG4gICAgLy8gbm90IGh5ZHJhdGluZy5cbiAgICB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtcblxuICAgICAgaWYgKG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaV07XG4gICAgICAgICAgdmFyIHZlcnNpb24gPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2kgKyAxXTtcbiAgICAgICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHZhciBub2RlID0gY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgLy8gdHJlZSBpcyBwYXJ0IG9mIGEgaHlkcmF0aW5nIHRyZWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZFxuICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgIC8vIGluc2VydGVkIGludG8gdGhlIFJlYWN0IHRyZWUgaGVyZS4gSXQganVzdCBoYXBwZW5zIHRvIG5vdCBuZWVkIERPTVxuICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgcmVzZXQgaHlkcmF0aW9uIHN0YXRlIGluIGNhc2Ugd2UgYWJvcnRlZCBhbmQgcmVzdW1lZCBhbm90aGVyXG4gICAgLy8gcm9vdC5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGw7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGlzIHByb3AuIFRoYXRcbiAgICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhbm90aGVyIEhvc3RUZXh0IGZpYmVyIGFuZCB0cmF2ZXJzaW5nIGl0LlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAocHJldlByb3BzICE9PSBudWxsICYmIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByZXZQcm9wcykpIHtcbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBhIGRpcmVjdCB0ZXh0IGNoaWxkIHRvIGEgbm9ybWFsIGNoaWxkLCBvciB0b1xuICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgaXMgdGVybWluYWwuIFdlJ2xsIGRvIHRoZSBjb21wbGV0aW9uIHN0ZXBcbiAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVNZW1vQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIGhpbnQgPSAnJztcblxuICB7XG4gICAgaWYgKENvbXBvbmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgaGludCA9ICcgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT8nO1xuICAgIH1cbiAgfSAvLyBUaGlzIG1lc3NhZ2UgaW50ZW50aW9uYWxseSBkb2Vzbid0IG1lbnRpb24gRm9yd2FyZFJlZiBvciBNZW1vQ29tcG9uZW50XG4gIC8vIGJlY2F1c2UgdGhlIGZhY3QgdGhhdCBpdCdzIGEgc2VwYXJhdGUgdHlwZSBvZiB3b3JrIGlzIGFuXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICsgaGludCApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmNvbXBsZXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH0gLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuXG4gIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5kZXRlcm1pbmF0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gXCIgKyAnVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBudWxsKTtcbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIHtcbiAgICAvLyBTdXBwb3J0IGZvciBtb2R1bGUgY29tcG9uZW50cyBpcyBkZXByZWNhdGVkIGFuZCBpcyByZW1vdmVkIGJlaGluZCBhIGZsYWcuXG4gICAgLy8gV2hldGhlciBvciBub3QgaXQgd291bGQgY3Jhc2ggbGF0ZXIsIHdlIHdhbnQgdG8gc2hvdyBhIGdvb2QgbWVzc2FnZSBpbiBERVYgZmlyc3QuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIC8vIFJ1biB0aGVzZSBjaGVja3MgaW4gcHJvZHVjdGlvbiBvbmx5IGlmIHRoZSBmbGFnIGlzIG9mZi5cbiAgLy8gRXZlbnR1YWxseSB3ZSdsbCBkZWxldGUgdGhpcyBicmFuY2ggYWx0b2dldGhlci5cbiAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgcHJvcHMpO1xuICAgIH1cblxuICAgIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgdmFsdWUpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAge1xuICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgaWYgKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FybmluZ0tleSA9IG93bmVyTmFtZSB8fCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCB8fCAnJztcbiAgICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgICAgaWYgKGRlYnVnU291cmNlKSB7XG4gICAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMyA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgX2NvbXBvbmVudE5hbWUzKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTQgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS4nLCBfY29tcG9uZW50TmFtZTQpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gIGRlaHlkcmF0ZWQ6IG51bGwsXG4gIHJldHJ5TGFuZTogTm9MYW5lXG59O1xuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IHJlbmRlckxhbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogbWVyZ2VMYW5lcyhwcmV2T2Zmc2NyZWVuU3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgfTtcbn0gLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIGlubGluZSB0aGlzIGJhY2tcblxuXG5mdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBDdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBEb24ndCBoaWRlIGl0LCBldmVuIGlmIEZvcmNlU3VzcGVuc2VGYWxsYWNrXG4gICAgICAvLyBpcyB0cnVlLiBNb3JlIHByZWNpc2UgbmFtZSBtaWdodCBiZSBcIkZvcmNlUmVtYWluU3VzcGVuc2VGYWxsYmFja1wiLlxuICAgICAgLy8gTm90ZTogVGhpcyBpcyBhIGZhY3RvcmluZyBzbWVsbC4gQ2FuJ3QgcmVtYWluIG9uIGEgZmFsbGJhY2sgaWYgdGhlcmUnc1xuICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuXG4gIHJldHVybiBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBTaG91bGQgbm90IHJlbW92ZSByZW5kZXIgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBkdXJpbmcgdGhpcyByZW5kZXJcbiAgcmV0dXJuIHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICB7XG4gICAgaWYgKHNob3VsZFN1c3BlbmQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoZGlkU3VzcGVuZCB8fCBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCkpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgc2hvd0ZhbGxiYWNrID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBdHRlbXB0aW5nIHRoZSBtYWluIGNvbnRlbnRcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQgb3IgdGhpcyBib3VuZGFyeSBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE1hcmsgdGhpcyBzdWJ0cmVlIGNvbnRleHQgYXMgaGF2aW5nIGF0IGxlYXN0IG9uZSBpbnZpc2libGUgcGFyZW50IHRoYXQgY291bGRcbiAgICAgIC8vIGhhbmRsZSB0aGUgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBCb3VuZGFyaWVzIHdpdGhvdXQgZmFsbGJhY2tzIG9yIHNob3VsZCBiZSBhdm9pZGVkIGFyZSBub3QgY29uc2lkZXJlZCBzaW5jZVxuICAgICAgLy8gdGhleSBjYW5ub3QgaGFuZGxlIHByZWZlcnJlZCBmYWxsYmFjayBzdGF0ZXMuXG4gICAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIE9LLCB0aGUgbmV4dCBwYXJ0IGlzIGNvbmZ1c2luZy4gV2UncmUgYWJvdXQgdG8gcmVjb25jaWxlIHRoZSBTdXNwZW5zZVxuICAvLyBib3VuZGFyeSdzIGNoaWxkcmVuLiBUaGlzIGludm9sdmVzIHNvbWUgY3VzdG9tIHJlY29uY2lsYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaHlkcmF0aW5nLCB0cnkgdG8gaHlkcmF0ZSB0aGlzIGJvdW5kYXJ5LlxuICAgIC8vIEJ1dCBvbmx5IGlmIHRoaXMgaGFzIGEgZmFsbGJhY2suXG4gICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgY291bGQndmUgYmVlbiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50LlxuICAgIH1cblxuICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHZhciBmYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICByZXR1cm4gZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcHMudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBDUFUtYm91bmQgdHJlZS4gU2tpcCB0aGlzIHRyZWUgYW5kIHNob3cgYSBwbGFjZWhvbGRlciB0b1xuICAgICAgLy8gdW5ibG9jayB0aGUgc3Vycm91bmRpbmcgY29udGVudC4gVGhlbiBpbW1lZGlhdGVseSByZXRyeSBhZnRlciB0aGVcbiAgICAgIC8vIGluaXRpYWwgY29tbWl0LlxuICAgICAgdmFyIF9mYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpcyB0b1xuICAgICAgLy8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zIG9mXG4gICAgICAvLyBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsIGl0J3NcbiAgICAgIC8vIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXMgY29tbWl0dGVkLiBJZlxuICAgICAgLy8gaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIHBhaW50ZWQuXG4gICAgICAvLyBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuIFdlIGNhbiB1c2UgYW55XG4gICAgICAvLyBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZyBzaW5jZSB3ZSdyZSBsZWF2aW5nXG4gICAgICAvLyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2ZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGZpYmVyIGhhcyBhIFN1c3BlbnNlU3RhdGUsIHRoYXQgbWVhbnMgaXQncyBhbHJlYWR5IHNob3dpbmdcbiAgICAvLyBhIGZhbGxiYWNrLlxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjIgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgX25leHRGYWxsYmFja0NoaWxkcmVuMiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMubWVtb2l6ZWRTdGF0ZSA9IHByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjMgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmVlIGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjay5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgLy8gVGltZWQgb3V0LlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMyA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDIgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCwgX25leHRGYWxsYmFja0NoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBfcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1Lm1lbW9pemVkU3RhdGUgPSBfcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUoX3ByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7IC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RpbGwgaGF2ZW4ndCB0aW1lZCBvdXQuIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2VcbiAgICAgICAgLy8gbm9ybWFsbHkgZG8uXG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjUgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDYgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW41LCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKSB7XG4gIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlV29ya0luUHJvZ3Jlc3NgIGlzIGBhbnlgIHR5cGVkLCBzbyB3ZSB1c2UgdGhpc1xuICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgcmV0dXJuIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfSk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiAvLyBNYWtlIHN1cmUgd2UncmUgb24gdGhlIHNlY29uZCBwYXNzLCBpLmUuIHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IHdhc1xuICAvLyBhbHJlYWR5IGNsb25lZC4gSW4gbGVnYWN5IG1vZGUsIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBpc24ndCB0cnVlIGlzXG4gIC8vIHdoZW4gRGV2VG9vbHMgZm9yY2VzIHVzIHRvIGRpc3BsYXkgYSBmYWxsYmFjazsgd2Ugc2tpcCB0aGUgZmlyc3QgcmVuZGVyXG4gIC8vIHBhc3MgZW50aXJlbHkgYW5kIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyB0aGUgZmFsbGJhY2suIChJbiBDb25jdXJyZW50XG4gIC8vIE1vZGUsIFN1c3BlbnNlTGlzdCBjYW4gYWxzbyB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGlzIGlzIGEgbGVnYWN5LVxuICAvLyBvbmx5IGNvZGVwYXRoLilcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCkge1xuICAgIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH0gLy8gVGhlIGZhbGxiYWNrIGZpYmVyIHdhcyBhZGRlZCBhcyBhIGRlbGV0aW9uIGVmZmVjdCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gSG93ZXZlciwgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVtYWluIG9uIHRoZSBmYWxsYmFjaywgd2Ugbm8gbG9uZ2VyIHdhbnRcbiAgICAvLyB0byBkZWxldGUgaXQuIFNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuIERlbGV0aW9ucyBhcmUgc3RvcmVkXG4gICAgLy8gb24gdGhlIHNhbWUgbGlzdCBhcyBlZmZlY3RzLiBXZSB3YW50IHRvIGtlZXAgdGhlIGVmZmVjdHMgZnJvbSB0aGUgcHJpbWFyeVxuICAgIC8vIHRyZWUuIFNvIHdlIGNvcHkgdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQncyBlZmZlY3QgbGlzdCwgd2hpY2ggZG9lcyBub3RcbiAgICAvLyBpbmNsdWRlIHRoZSBmYWxsYmFjayBkZWxldGlvbiBlZmZlY3QuXG5cblxuICAgIHZhciBwcm9ncmVzc2VkTGFzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50Lmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAocHJvZ3Jlc3NlZExhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmlyc3RFZmZlY3Q7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcHJvZ3Jlc3NlZExhc3RFZmZlY3Q7XG4gICAgICBwcm9ncmVzc2VkTGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogUmVzZXQgdGhpcyBzb21ld2hlcmUgZWxzZT8gTG9sIGxlZ2FjeSBtb2RlIGlzIHNvIHdlaXJkLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgcHJpbWFyeUNoaWxkUHJvcHMpO1xuICB9XG5cbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIGZhbGxiYWNrQ2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcykge1xuICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBmaXJzdENoaWxkLCByZW5kZXJMYW5lcykge1xuICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAvLyBJZiB0aGV5IHdlcmUgcHJldmlvdXNseSBmb3JjZWQgaW50byBmYWxsYmFja3MsIHRoZXkgbWF5IG5vdyBiZSBhYmxlXG4gIC8vIHRvIHVuYmxvY2suXG4gIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCkge1xuICAgICAgLy8gSWYgdGhlIHRhaWwgaXMgaGlkZGVuIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBTdXNwZW5zZSBib3VuZGFyaWVzXG4gICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgIC8vIGxpc3QgaXRzZWxmLlxuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIGxpc3Qgc2luY2VcbiAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGFzdENvbnRlbnRSb3coZmlyc3RDaGlsZCkge1xuICAvLyBUaGlzIGlzIGdvaW5nIHRvIGZpbmQgdGhlIGxhc3Qgcm93IGFtb25nIHRoZXNlIGNoaWxkcmVuIHRoYXQgaXMgYWxyZWFkeVxuICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAvLyBuZXcuIElmIGEgcm93IGhhcyBtdWx0aXBsZSBTdXNwZW5zZSBib3VuZGFyaWVzLCBhbnkgb2YgdGhlbSBiZWluZyBpbiB0aGVcbiAgLy8gZmFsbGJhY2sgc3RhdGUsIGNvdW50cyBhcyB0aGUgd2hvbGUgcm93IGJlaW5nIGluIGEgZmFsbGJhY2sgc3RhdGUuXG4gIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgLy8gd2lsbCBzdGlsbCBiZSBjdXJyZW50IHNpbmNlIHdlIGhhdmVuJ3QgcmVuZGVyZWQgdGhlbSB5ZXQuIFRoZSBtb3VudGVkXG4gIC8vIG9yZGVyIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBvcmRlci4gV2UgdXNlIHRoZSBuZXcgb3JkZXIuXG4gIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICB2YXIgbGFzdENvbnRlbnRSb3cgPSBudWxsO1xuXG4gIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgbGFzdENvbnRlbnRSb3cgPSByb3c7XG4gICAgfVxuXG4gICAgcm93ID0gcm93LnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmIChyZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkICYmIHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ3RvZ2V0aGVyJyAmJiAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdKSB7XG4gICAgICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0gPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdmb3J3YXJkJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICh0YWlsTW9kZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0pIHtcbiAgICAgIGlmICh0YWlsTW9kZSAhPT0gJ2NvbGxhcHNlZCcgJiYgdGFpbE1vZGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsIHRhaWxNb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAocmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyAnICsgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBzcGVjaWZ5IHJldmVhbE9yZGVyPVwiZm9yd2FyZHNcIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICB7XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGlzQXJyYXkgfHwgaXNJdGVyYWJsZSkge1xuICAgICAgdmFyIHR5cGUgPSBpc0FycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmcpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlLFxuICAgICAgbGFzdEVmZmVjdDogbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZnJvbSBwcmV2aW91cyByZW5kZXJzLlxuICAgIHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHM7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwO1xuICAgIHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdztcbiAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICByZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlO1xuICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nO1xuICB9XG59IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuLy8gVGhlIGZpcnN0IHBhc3Mgc3BsaXRzIHRoZSBjaGlsZHJlbiBmaWJlcnMgaW50byB0d28gc2V0cy4gQSBoZWFkIGFuZCB0YWlsLlxuLy8gV2UgZmlyc3QgcmVuZGVyIHRoZSBoZWFkLiBJZiBhbnl0aGluZyBpcyBpbiBmYWxsYmFjayBzdGF0ZSwgd2UgZG8gYW5vdGhlclxuLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuLy8gdGhlIGZvcmNlIHN1c3BlbmQgY29udGV4dC4gSWYgdGhlIGZpcnN0IHJlbmRlciBkaWRuJ3QgaGF2ZSBhbnl0aGluZyBpblxuLy8gaW4gZmFsbGJhY2sgc3RhdGUuIFRoZW4gd2UgcmVuZGVyIGVhY2ggcm93IGluIHRoZSB0YWlsIG9uZS1ieS1vbmUuXG4vLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyO1xuICB2YXIgdGFpbE1vZGUgPSBuZXh0UHJvcHMudGFpbDtcbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG5cbiAgaWYgKHNob3VsZEZvcmNlRmFsbGJhY2spIHtcbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZm9yY2VkIGEgZmFsbGJhY2ssIHdlIG5lZWQgdG8gc2NoZWR1bGUgd29ya1xuICAgICAgLy8gb24gYW55IG5lc3RlZCBib3VuZGFyaWVzIHRvIGxldCB0aGVtIGtub3cgdG8gdHJ5IHRvIHJlbmRlclxuICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MuY2hpbGQsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICB9XG5cbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgLy8gdXNlIG1ha2UgaXQgYSBub29wIGJ5IHRyZWF0aW5nIGl0IGFzIHRoZSBkZWZhdWx0IHJldmVhbE9yZGVyLlxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgdmFyIHRhaWw7XG5cbiAgICAgICAgICBpZiAobGFzdENvbnRlbnRSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBmYXN0IHBhdGggYnkganVzdCByZW5kZXJpbmcgdGhlIHRhaWwgbm93LlxuICAgICAgICAgICAgdGFpbCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSB0YWlsIHJvd3MgYWZ0ZXIgdGhlIGNvbnRlbnQgcm93LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgIHRhaWwgPSBsYXN0Q29udGVudFJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgbGFzdENvbnRlbnRSb3cuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlJ3JlIGdvaW5nIHRvIHJldmVyc2UgdGhlIGxpc3Qgb2YgZXZlcnl0aGluZ1xuICAgICAgICAgIC8vIHdlIHBhc3MgaW4gdGhlIG1lYW50aW1lLiBUaGF0J3MgZ29pbmcgdG8gYmUgb3VyIHRhaWwgaW4gcmV2ZXJzZVxuICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgIHZhciBfdGFpbCA9IG51bGw7XG4gICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIGNvbnRlbnQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcm93O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRSb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICBfdGFpbCA9IHJvdztcbiAgICAgICAgICAgIHJvdyA9IG5leHRSb3c7XG4gICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBfdGFpbCwgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIG51bGwsIC8vIHRhaWxcbiAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdW5kZWZpbmVkLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAvLyBhIGJvdW5kYXJ5LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAvLyBidXQgYXQgY29tbWl0LiBUaGVyZWZvcmUgd2UgbmVlZCB0byB0cmFjayBpbnNlcnRpb25zIHdoaWNoIHRoZSBub3JtYWxcbiAgICAvLyBmbG93IGRvZXNuJ3QgZG8gZHVyaW5nIG1vdW50LiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF0IHRoZSByb290IGJlY2F1c2VcbiAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHByb3ZpZGVyVHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gIHtcbiAgICBpZiAoISgndmFsdWUnIGluIG5ld1Byb3BzKSkge1xuICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlcikge1xuICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChwcm92aWRlclByb3BUeXBlcykge1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvdmlkZXJQcm9wVHlwZXMsIG5ld1Byb3BzLCAncHJvcCcsICdDb250ZXh0LlByb3ZpZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG5cbiAgaWYgKG9sZFByb3BzICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gb2xkUHJvcHMudmFsdWU7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmIChjaGFuZ2VkQml0cyA9PT0gMCkge1xuICAgICAgLy8gTm8gY2hhbmdlLiBCYWlsb3V0IGVhcmx5IGlmIGNoaWxkcmVuIGFyZSB0aGUgc2FtZS5cbiAgICAgIGlmIChvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAvLyB0aGVtIHRvIHVwZGF0ZS5cbiAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCwgbmV3UHJvcHMudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXdDaGlsZHJlbiA9IHJlbmRlcihuZXdWYWx1ZSk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBSZXVzZSBwcmV2aW91cyBkZXBlbmRlbmNpZXNcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCB1cGRhdGUgXCJiYXNlXCIgcmVuZGVyIHRpbWVzIGZvciBiYWlsb3V0cy5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICB9XG5cbiAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcyk7IC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW91bnRGaWJlcihjdXJyZW50LCBvbGRXb3JrSW5Qcm9ncmVzcywgbmV3V29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICByZXR1cm4gbmV3V29ya0luUHJvZ3Jlc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgdXBkYXRlTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcblxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgcmVzdGFydCB0aGUgYmVnaW4gcGhhc2Ugd2l0aCBhIG5ldyBmaWJlci5cbiAgICAgIHJldHVybiByZW1vdW50RmliZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5rZXksIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHwgbnVsbCwgd29ya0luUHJvZ3Jlc3MubW9kZSwgd29ya0luUHJvZ3Jlc3MubGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IGhhc0NvbnRleHRDaGFuZ2VkKCkgfHwgKCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIC8vIElmIHByb3BzIG9yIGNvbnRleHQgY2hhbmdlZCwgbWFyayB0aGUgZmliZXIgYXMgaGF2aW5nIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGZpYmVyIGRvZXMgbm90IGhhdmUgYW55IHBlbmRpbmcgd29yay4gQmFpbG91dCB3aXRob3V0IGVudGVyaW5nXG4gICAgICAvLyB0aGUgYmVnaW4gcGhhc2UuIFRoZXJlJ3Mgc3RpbGwgc29tZSBib29ra2VlcGluZyB3ZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmVcbiAgICAgIC8vIGluIHRoaXMgb3B0aW1pemVkIHBhdGgsIG1vc3RseSBwdXNoaW5nIHN0dWZmIG9udG8gdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFByb2ZpbGVyIHNob3VsZCBvbmx5IGNhbGwgb25SZW5kZXIgd2hlbiBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgICAgICAgICAgdmFyIGhhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgIH0gLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuXG4gICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdG8gcmV0cnkgdGhlIHByaW1hcnkgY2hpbGRyZW4sIG9yIHRvIHNraXAgb3ZlciBpdCBhbmRcbiAgICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgICAgLy8gY2hpbGQgZnJhZ21lbnQuXG5cblxuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZExhbmVzID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcztcblxuICAgICAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgcHJpbWFyeUNoaWxkTGFuZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgICAvLyBvbiBpdFxuICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbiBhbmQgd29yayBvbiB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNhbWUgY2hpbGRyZW4gdGhlbiB3ZSdyZSBzdGlsbCBpbiBwcm9ncmVzc2l2ZSBsb2FkaW5nIHN0YXRlLlxuICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBtaWdodCBnZXQgdW5ibG9ja2VkIGJ5IHN0YXRlIHVwZGF0ZXMgb3IgcmV0cmllcyBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gcGF0aCB0byBjb21wdXRlIHRoZSBjb3JyZWN0IHRhaWwuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgfSAvLyBJZiBub3RoaW5nIHN1c3BlbmRlZCBiZWZvcmUgYW5kIHdlJ3JlIHJlbmRlcmluZyB0aGUgc2FtZSBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHRoZW4gdGhlIHRhaWwgZG9lc24ndCBtYXR0ZXIuIEFueXRoaW5nIG5ldyB0aGF0IHN1c3BlbmRzIHdpbGwgd29ya1xuICAgICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG5cbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgXCJ0b2dldGhlclwiIG1vZGUgaW4gY2FzZSB3ZSd2ZSBzdGFydGVkIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbiB0aGUgcGFzdCBidXQgZGlkbid0IGNvbXBsZXRlIGl0LlxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0cmVlIHN0aWxsIG5lZWRzIHRvIGJlIGRlZmVycmVkLiBUaGlzIGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBsb2dpYyB1c2VkIGluIHRoZSBub3JtYWwgdXBkYXRlIHBhdGgsXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAgIC8vIGF0IHRoZSBuZXh0IGxldmVsIGluc3RlYWQgb2YgdGhpcyBvbmUsIGJlY2F1c2UgdGhlIGNoaWxkIHByb3BzXG4gICAgICAgICAgICAvLyBoYXZlIG5vdCBjaGFuZ2VkLiBXaGljaCBpcyBmaW5lLlxuICAgICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgICAvLyBwYXRoIGZyb20gdGhlIG5vcm1hbCBwYXRoLiBJJ20gdGVtcHRlZCB0byBkbyBhIGxhYmVsZWQgYnJlYWsgaGVyZVxuICAgICAgICAgICAgLy8gYnV0IEkgd29uJ3QgOilcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbiB0aGlzIGZpYmVyLCBidXQgdGhlcmUgYXJlIG5vIG5ldyBwcm9wc1xuICAgICAgICAvLyBub3IgbGVnYWN5IGNvbnRleHQuIFNldCB0aGlzIHRvIGZhbHNlLiBJZiBhbiB1cGRhdGUgcXVldWUgb3IgY29udGV4dFxuICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IHdpbGwgYXNzdW1lIHRoZSBjaGlsZHJlbiBoYXZlIG5vdCBjaGFuZ2VkIGFuZCBiYWlsIG91dC5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gIH0gLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY2xlYXIgcGVuZGluZyB1cGRhdGUgcHJpb3JpdHkuXG4gIC8vIFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IHdlJ3JlIGFib3V0IHRvIGV2YWx1YXRlIHRoZSBjb21wb25lbnQgYW5kIHByb2Nlc3NcbiAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgLy8gc29tZXRpbWVzIGJhaWxzIG91dCBsYXRlciBpbiB0aGUgYmVnaW4gcGhhc2UuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkXG4gIC8vIG1vdmUgdGhpcyBhc3NpZ25tZW50IG91dCBvZiB0aGUgY29tbW9uIHBhdGggYW5kIGludG8gZWFjaCBicmFuY2guXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50ID8gdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQyLCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMi50eXBlLCBfcmVzb2x2ZWRQcm9wczMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBfcmVzb2x2ZWRQcm9wczMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDMgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDMsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gVGFnIHRoZSBmaWJlciB3aXRoIGFuIHVwZGF0ZSBlZmZlY3QuIFRoaXMgdHVybnMgYSBQbGFjZW1lbnQgaW50b1xuICAvLyBhIFBsYWNlbWVudEFuZFVwZGF0ZS5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW47XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lcjtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDE7XG52YXIgdXBkYXRlSG9zdFRleHQkMTtcblxue1xuICAvLyBNdXRhdGlvbiBtb2RlXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKHdvcmtJblByb2dyZXNzKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogRXhwZXJpZW5jaW5nIGFuIGVycm9yIHdoZXJlIG9sZFByb3BzIGlzIG51bGwuIFN1Z2dlc3RzIGEgaG9zdFxuICAgIC8vIGNvbXBvbmVudCBpcyBoaXR0aW5nIHRoZSByZXN1bWUgcGF0aC4gRmlndXJlIG91dCB3aHkuIFBvc3NpYmx5XG4gICAgLy8gcmVsYXRlZCB0byBgaGlkZGVuYC5cblxuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShpbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gY29tbWl0V29yay5cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkKSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgLy8gSWYgd2UncmUgaHlkcmF0aW5nLCB3ZSBzaG91bGQgY29uc3VtZSBhcyBtYW55IGl0ZW1zIGFzIHdlIGNhblxuICAgIC8vIHNvIHdlIGRvbid0IGxlYXZlIGFueSBiZWhpbmQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAodGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSB0YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAobGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbGxhcHNlZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChfdGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2xhc3RUYWlsTm9kZSA9IF90YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChfbGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayAmJiByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdXNwZW5kZWQgZHVyaW5nIHRoZSBoZWFkLiBXZSB3YW50IHRvIHNob3cgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICBjYXNlIE1vZGU6XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQuY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlbid0IGh5ZHJhdGVkLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmICh3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAvLyB0aGUgY29tbWl0IHNpZGUtZWZmZWN0cyBvbiB0aGUgcm9vdC5cbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpYmVyUm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gY2xlYXIgdGhpcyBjb250YWluZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdC5cbiAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciB3aXRoIHByZXZpb3VzIGNoaWxkcmVuLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIHNhZmUgdG8gZG8gZm9yIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsXG4gICAgICAgICAgICAvLyBpZiB0aGUgcHJldmlvdXMgcmVuZGVyIHdhcyBudWxsIChzbyB0aGUgdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5IGJlIGVtcHR5KS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogTW92ZSBjcmVhdGVJbnN0YW5jZSB0byBiZWdpbldvcmsgYW5kIGtlZXAgaXQgb24gYSBjb250ZXh0XG4gICAgICAgICAgLy8gXCJzdGFja1wiIGFzIHRoZSBwYXJlbnQuIFRoZW4gYXBwZW5kIGNoaWxkcmVuIGFzIHdlIGdvIGluIGJlZ2luV29ya1xuICAgICAgICAgIC8vIG9yIGNvbXBsZXRlV29yayBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGFkZCB0aGVtIHRvcC0+ZG93biBvclxuICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgLy8gdG8gY29uc29saWRhdGUuXG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNoYW5nZXMgdG8gdGhlIGh5ZHJhdGVkIG5vZGUgbmVlZCB0byBiZSBhcHBsaWVkIGF0IHRoZVxuICAgICAgICAgICAgICAvLyBjb21taXQtcGhhc2Ugd2UgbWFyayB0aGlzIGFzIHN1Y2guXG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cbiAgICAgICAgICAgIGlmIChmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihpbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICBpZiAoY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcblxuICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQyID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDIpIHtcbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShuZXdUZXh0LCBfcm9vdENvbnRhaW5lckluc3RhbmNlLCBfY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkLiBSZS1yZW5kZXIgd2l0aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lczsgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBwcmV2RGlkVGltZW91dCA9IHByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCAmJiAhcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHN1YnRyZWVlIGlzIHJ1bm5pbmcgaW4gYmxvY2tpbmcgbW9kZSB3ZSBjYW4gc3VzcGVuZCxcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugd29uJ3Qgc3VzcGVuZC5cbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIHdpbGwgc3RpbGwgc3VzcGVuZCBhIHN5bmNocm9ub3VzIHRyZWUgaWYgYW55dGhpbmdcbiAgICAgICAgICAvLyBpbiB0aGUgY29uY3VycmVudCB0cmVlIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlci5cbiAgICAgICAgICAvLyBUaGlzIGlzIGEga25vd24gYnVnLlxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGJhY2sgdG8gdGhyb3dFeGNlcHRpb24gYmVjYXVzZSB0aGlzIGlzIHRvbyBsYXRlXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbGFyZ2UgdHJlZSB3aGljaCBpcyBjb21tb24gZm9yIGluaXRpYWwgbG9hZHMuIFdlXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIHNob3VsZCByZXN0YXJ0IGEgcmVuZGVyIG9yIG5vdCB1bnRpbCB3ZSBnZXRcbiAgICAgICAgICAgIC8vIHRoaXMgbWFya2VyLCBhbmQgdGhpcyBpcyB0b28gbGF0ZS5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgcmVuZGVyIGFscmVhZHkgaGFkIGEgcGluZyBvciBsb3dlciBwcmkgdXBkYXRlcyxcbiAgICAgICAgICAgIC8vIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3ZVxuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgcmVzdGFydCBmcm9tIHdpdGhpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAgICAgICAgIHZhciBoYXNJbnZpc2libGVDaGlsZENvbnRleHQgPSBjdXJyZW50ID09PSBudWxsICYmIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChoYXNJbnZpc2libGVDaGlsZENvbnRleHQgfHwgaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBpbiBhbiBpbnZpc2libGUgdHJlZSBvciBhIG5ldyByZW5kZXIsIHRoZW4gc2hvd2luZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGJvdW5kYXJ5IGlzIG9rLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gaGlkZSBjb250ZW50IHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kIGZvciBsb25nZXIgaWYgcG9zc2libGUuXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIHRoZXNlIHZhbHVlcyBhcmUgbm9uIGVxdWFsLCBpLmUuIGl0IGNoYW5nZWQuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0IHx8IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIGFcbiAgICAgICAgICAgIC8vIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLiBUaGlzIGZsYWcgaXMgYWxzbyB1c2VkIHRvIGhpZGUgdGhlXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuLiBJbiBtdXRhdGlvbiBtb2RlLCB3ZSBhbHNvIG5lZWQgdGhlIGZsYWcgdG9cbiAgICAgICAgICAgIC8vICp1bmhpZGUqIGNoaWxkcmVuIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhpZGRlbiwgc28gY2hlY2sgaWYgdGhpc1xuICAgICAgICAgICAgLy8gaXMgY3VycmVudGx5IHRpbWVkIG91dCwgdG9vLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIC8vIFBvcCBwcm92aWRlciBmaWJlclxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gU2FtZSBhcyBjbGFzcyBjb21wb25lbnQgY2FzZS4gSSBwdXQgaXQgZG93biBoZXJlIHNvIHRoYXQgdGhlIHRhZ3MgYXJlXG4gICAgICAgIC8vIHNlcXVlbnRpYWwgdG8gZW5zdXJlIHRoaXMgc3dpdGNoIGlzIGNvbXBpbGVkIHRvIGEganVtcCB0YWJsZS5cbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcbiAgICAgICAgdmFyIHJlbmRlcmVkVGFpbCA9IHJlbmRlclN0YXRlLnJlbmRlcmluZztcblxuICAgICAgICBpZiAocmVuZGVyZWRUYWlsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UganVzdCByZW5kZXJlZCB0aGUgaGVhZC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55dGhpbmcgaXMgc3RpbGxcbiAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBpbiB0aGUgcmVuZGVyZWQgc2V0LlxuICAgICAgICAgICAgLy8gSWYgbmV3IGNvbnRlbnQgdW5zdXNwZW5kZWQsIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgY29udGVudCB0aGF0XG4gICAgICAgICAgICAvLyBkaWRuJ3QuIFRoZW4gd2UgbmVlZCB0byBkbyBhIHNlY29uZCBwYXNzIHRoYXQgZm9yY2VzIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgc2hvd2luZyB0aGVpciBmYWxsYmFja3MuXG4gICAgICAgICAgICAvLyBXZSBtaWdodCBiZSBzdXNwZW5kZWQgaWYgc29tZXRoaW5nIGluIHRoaXMgcmVuZGVyIHBhc3Mgc3VzcGVuZGVkLCBvclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGluIHRoZSBwcmV2aW91cyBjb21taXR0ZWQgcGFzcyBzdXNwZW5kZWQuIE90aGVyd2lzZSxcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gY2hhbmNlIHNvIHdlIGNhbiBza2lwIHRoZSBleHBlbnNpdmUgY2FsbCB0b1xuICAgICAgICAgICAgLy8gZmluZEZpcnN0U3VzcGVuZGVkLlxuICAgICAgICAgICAgdmFyIGNhbm5vdEJlU3VzcGVuZGVkID0gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkgJiYgKGN1cnJlbnQgPT09IG51bGwgfHwgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyk7XG5cbiAgICAgICAgICAgIGlmICghY2Fubm90QmVTdXNwZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIElmIHRoaXMgaXMgYSBuZXdseSBzdXNwZW5kZWQgdHJlZSwgaXQgbWlnaHQgbm90IGdldCBjb21taXR0ZWQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHNlY29uZCBwYXNzLiBJbiB0aGF0IGNhc2Ugbm90aGluZyB3aWxsIHN1YnNjcmliZSB0b1xuICAgICAgICAgICAgICAgICAgLy8gaXRzIHRoZW5uYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVubmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2VMaXN0IHNvIHRoYXQgaXQgY2FuIHJldHJ5IGlmIHRoZXkgcmVzb2x2ZS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG9uZXMgZ2V0cyB0byBwaW5nLiBJbiB0aGVvcnkgd2UgY291bGQgZ2V0IGNsZXZlciBhbmQga2VlcFxuICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJhaWwgb3V0IG9mIHRoZSBsb29wIGJlZm9yZSBmaW5kaW5nIGFueSBidXQgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgdmFyIG5ld1RoZW5uYWJsZXMgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IGJlZm9yZSBkb2luZyB0aGUgc2Vjb25kIHBhc3Mgc2luY2UgdGhhdCdzIG5vdyBpbnZhbGlkLlxuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwgJiYgbm93KCkgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGJ1dCB3ZSBzdGlsbCBoYXZlIHJvd3NcbiAgICAgICAgICAgICAgLy8gbGVmdCBpbiB0aGUgdGFpbC4gV2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gcmVuZGVyXG4gICAgICAgICAgICAgIC8vIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX25ld1RoZW5uYWJsZXMgPSBfc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgIGlmIChfbmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gX25ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmICFnZXRJc0h5ZHJhdGluZygpIC8vIFdlIGRvbid0IGN1dCBpdCBpZiB3ZSdyZSBoeWRyYXRpbmcuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgdGhlIHJvdyB3ZSBqdXN0IHJlbmRlcmVkLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSByZW5kZXJlZCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjaGlsZC4gVGhlIG5lc3RlZCBjaGlsZHJlbiBoYXZlIGFscmVhZHkgYXBwZW5kZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlbW92ZSBhbnkgZWZmZWN0cyB0aGF0IHdlcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludC5cblxuICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH0gLy8gV2UncmUgZG9uZS5cblxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCAvLyBUaGUgdGltZSBpdCB0b29rIHRvIHJlbmRlciBsYXN0IHJvdyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZ1xuICAgICAgICAgICAgLy8gdGltZSB3ZSBoYXZlIHRvIHJlbmRlci4gU28gcmVuZGVyaW5nIG9uZSBtb3JlIHJvdyB3b3VsZCBsaWtlbHlcbiAgICAgICAgICAgIC8vIGV4Y2VlZCBpdC5cbiAgICAgICAgICAgIG5vdygpICogMiAtIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSAmJiByZW5kZXJMYW5lcyAhPT0gT2Zmc2NyZWVuTGFuZSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vdyBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBhbmQgd2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXJcbiAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHVzdWFsbHkgZmFzdGVyLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgIC8vIHNldHRpbmcgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ28gZnJvbSBub3Qgc3VzcGVuZGVkIHRvIHN1c3BlbmRlZC5cblxuICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgX3ByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldklzSGlkZGVuID0gX3ByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChwcmV2SXNIaWRkZW4gIT09IG5leHRJc0hpZGRlbiAmJiBuZXdQcm9wcy5tb2RlICE9PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBmbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoISgoX2ZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKF9mbGFnczIgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZSkge1xuICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgLy8gc28gdGhlIHN0YWNrIGlzIGFjY3VyYXRlLlxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgdmFyIGxvZ0Vycm9yID0gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pOyAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICBpZiAodHJ1ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJyc7IC8vIEJyb3dzZXJzIHN1cHBvcnQgc2lsZW5jaW5nIHVuY2F1Z2h0IGVycm9ycyBieSBjYWxsaW5nXG4gICAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiBlcnJvci5fc3VwcHJlc3NMb2dnaW5nKSB7XG4gICAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgLy8gSWdub3JlIGl0IGFuZCBkb24ndCBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG4gICAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSBlcnJvciBpcyBmYXRhbC4gU2luY2UgdGhlIHNpbGVuY2luZyBtaWdodCBoYXZlXG4gICAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgIC8vIHNvIHdlJ2xsIHByaW50IGl0IGZpcnN0LCBhbmQgdGhlbiBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG5cblxuICAgICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWUoc291cmNlLnR5cGUpIDogbnVsbDtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQ6XCIgOiAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHM6JztcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TWVzc2FnZTtcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWUoYm91bmRhcnkudHlwZSk7XG5cbiAgICAgIGlmIChlcnJvckJvdW5kYXJ5TmFtZSkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgKyAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArIGVycm9yQm91bmRhcnlOYW1lICsgXCIuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuJyArICdWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuJztcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVNZXNzYWdlICsgXCJcXG5cIiArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlIGFuZCBKUyBzdGFjayBiZWNhdXNlIHRoZSBicm93c2VyXG4gICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgICAgY29uc29sZVsnZXJyb3InXShjb21iaW5lZE1lc3NhZ2UpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgd2UgcHJpbnQgdGhlIGVycm9yIGRpcmVjdGx5LlxuICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgdGhlIG1lc3NhZ2UsIHRoZSBKUyBzdGFjaywgYW5kIGFueXRoaW5nIHRoZSBicm93c2VyIHdhbnRzIHRvIHNob3cuXG4gICAgICAvLyBXZSBwYXNzIHRoZSBlcnJvciBvYmplY3QgaW5zdGVhZCBvZiBjdXN0b20gbWVzc2FnZSBzbyB0aGF0IHRoZSBicm93c2VyIGRpc3BsYXlzIHRoZSBlcnJvciBuYXRpdmVseS5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgcmV0dXJuIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvciQxKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpOyAvLyBPbmx5IGxvZyBoZXJlIGlmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkXG5cbiAgICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB0aGlzLmNvbXBvbmVudERpZENhdGNoKGVycm9yJDEsIHtcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZCxcbiAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAvLyBJZiBubyBzdGF0ZSB1cGRhdGUgaXMgc2NoZWR1bGVkIHRoZW4gdGhlIGJvdW5kYXJ5IHdpbGwgc3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKGZpYmVyLmxhbmVzLCBTeW5jTGFuZSkpIHtcbiAgICAgICAgICAgIGVycm9yKCclczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiAnICsgJ0luIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLicsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZSB0byBcInBpbmdcIiB0aGUgcm9vdCBhbmQgcmV0cnkuIEJ1dCBvbmx5IGlmXG4gIC8vIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGZvciB0aGUgbGFuZXMgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyAod2hpY2hcbiAgLy8gYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzO1xuXG4gIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2Uge1xuICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpO1xuXG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhyZWFkSURzLmhhcyhsYW5lcykpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSB0aHJlYWQgSUQgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgIHRocmVhZElEcy5hZGQobGFuZXMpO1xuICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpO1xuICAgIHdha2VhYmxlLnRoZW4ocGluZywgcGluZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS5cbiAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTsgLy8gSXRzIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLlxuICAgIHZhciB3YWtlYWJsZSA9IHZhbHVlO1xuXG4gICAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgbWVtb2l6ZWRTdGF0ZSB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgYXR0ZW1wdGVkXG4gICAgICAvLyB0byByZW5kZXIgaXQuXG4gICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRTb3VyY2UpIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBjdXJyZW50U291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IGN1cnJlbnRTb3VyY2UubGFuZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7IC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG5cbiAgICB2YXIgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKF93b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICAvLyBTdGFzaCB0aGUgcHJvbWlzZSBvbiB0aGUgYm91bmRhcnkgZmliZXIuIElmIHRoZSBib3VuZGFyeSB0aW1lcyBvdXQsIHdlJ2xsXG4gICAgICAgIC8vIGF0dGFjaCBhbm90aGVyIGxpc3RlbmVyIHRvIGZsaXAgdGhlIGJvdW5kYXJ5IGJhY2sgdG8gaXRzIG5vcm1hbCBzdGF0ZS5cbiAgICAgICAgdmFyIHdha2VhYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAod2FrZWFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbmV3IFNldCgpO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FrZWFibGVzLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIH0gLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gSW4gdGhlIGNvbW1pdCBwaGFzZSwgd2UnbGwgc2NoZWR1bGUgYVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHN5bmNocm9ub3VzIHVwZGF0ZSB0byByZS1yZW5kZXIgdGhlIFN1c3BlbnNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBOb3RlOiBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBjb21wb25lbnQgdGhhdCBzdXNwZW5kZWQgd2FzXG4gICAgICAgIC8vIGluc2lkZSBhIGJsb2NraW5nIG1vZGUgdHJlZS4gSWYgdGhlIFN1c3BlbnNlIGlzIG91dHNpZGUgb2YgaXQsIHdlXG4gICAgICAgIC8vIHNob3VsZCAqbm90KiBzdXNwZW5kIHRoZSBjb21taXQuXG5cblxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgICAgIC8vIEJ1dCB3ZSBzaG91bGRuJ3QgY2FsbCBhbnkgbGlmZWN5Y2xlIG1ldGhvZHMgb3IgY2FsbGJhY2tzLiBSZW1vdmVcbiAgICAgICAgICAvLyBhbGwgbGlmZWN5Y2xlIGVmZmVjdCB0YWdzLlxuXG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50LiBDaGFuZ2UgdGhlIHRhZyBzbyBpdCdzIG5vdCBtaXN0YWtlbiBmb3IgYVxuICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQgY2xhc3MgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgd2Ugc2hvdWxkIG5vdCBjYWxsXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyA9IEluY29tcGxldGVDbGFzc0NvbXBvbmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBrbm93biB0byBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFVzZSBhIGZvcmNlIHVwZGF0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLiBNYXJrIGl0IHdpdGggU3luYyBwcmlvcml0eSB0b1xuICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgaXQgc3RpbGwgaGFzIHBlbmRpbmcgd29yay5cblxuXG4gICAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBTeW5jTGFuZSk7IC8vIEV4aXQgd2l0aG91dCBzdXNwZW5kaW5nLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAgICAgICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBZnRlciB0aGlzIHdlJ2xsIHVzZSBhIHNldCBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXNcbiAgICAgICAgLy8gcmVuZGVyIHBhc3Mgd2lsbCBydW4gdG8gY29tcGxldGlvbiBvciByZXN0YXJ0IG9yIFwic3VzcGVuZFwiIHRoZSBjb21taXQuXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGZpcnN0IHByaW5jaXBsZSBpcyB0aGF0IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2hlbiB3ZSBjb21wbGV0ZVxuICAgICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgICAvLyBtaWdodCB1bnN1c3BlbmQgaXQsIGFuZCB2aWNlIHZlcnNhLiBUaGUgb25seSByZWFzb24gdG8gc3VzcGVuZCBpc1xuICAgICAgICAvLyBiZWNhdXNlIHlvdSB0aGluayB5b3UgbWlnaHQgd2FudCB0byByZXN0YXJ0IGJlZm9yZSBjb21taXR0aW5nLiBIb3dldmVyLFxuICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBSZXN0YXJ0aW5nIHRvbyBhZ2dyZXNzaXZlbHkgaXMgYWxzbyBub3QgZ29vZCBiZWNhdXNlIGl0IHN0YXJ2ZXMgb3V0IGFueVxuICAgICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAgIC8vIFN1c3BlbnNlIEhldXJpc3RpY3NcbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgICAvLyB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAgIC8vIHRob3NlIHRyaWdnZXIgYSBmYWxsYmFjaywgdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuIFdlIHdhbnQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgd2UgY2FuIHNob3cgdGhlIGluaXRpYWwgbG9hZGluZyBzdGF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSBoaXQgYSBcIkRlbGF5ZWRcIiBjYXNlLCBzdWNoIGFzIHdoZW4gd2UnZCBzd2l0Y2ggZnJvbSBjb250ZW50IGJhY2sgaW50b1xuICAgICAgICAvLyBhIGZhbGxiYWNrLCB0aGVuIHdlIHNob3VsZCBhbHdheXMgc3VzcGVuZC9yZXN0YXJ0LiBUcmFuc2l0aW9ucyBhcHBseVxuICAgICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgYW5kIGl0IGdldHMgXCJyZXRyaWVkXCIsIGFsbG93aW5nIHVzIHRvIHNob3dcbiAgICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAgIC8vIHRoZW4gd2Ugc3VzcGVuZC9yZXN0YXJ0IGZvciA1MDBtcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNob3dlZCBhIGZhbGxiYWNrXG4gICAgICAgIC8vIGFueXdoZXJlIGluIHRoZSB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IHRocm90dGxlcyBwcm9ncmVzc2l2ZSBsb2FkaW5nIGludG8gYVxuICAgICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAgIC8vIGdldCB0byB0aGUgY29tcGxldGVkIHN0YXRlIHNsaWdodGx5IGVhcmxpZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAgIC8vIDEpIFwiZGVsYXllZFwiLCAyKSBcImluaXRpYWwgcmVuZGVyXCIsIDMpIFwicmV0cnlcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBuZXcgaW5pdGlhbCBsb2FkaW5nIHN0YXRlcyBjYW4gY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cblxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByb290UmVuZGVyTGFuZXM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuXG5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTsgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBGYWxsdGhyb3VnaCB0byBlcnJvciBtb2RlLlxuICAgIC8vIFRPRE86IFVzZSBpbnZhcmlhbnQgc28gdGhlIG1lc3NhZ2UgaXMgc3RyaXBwZWQgaW4gcHJvZD9cblxuXG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyk7XG4gIH0gLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG5cblxuICByZW5kZXJEaWRFcnJvcigpO1xuICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIGxhbmUpO1xuXG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF9lcnJvckluZm8sIGxhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgcmV0cnlcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICB2YXIgY3RvciA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MgJiYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG5cbiAgICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIF91cGRhdGUyID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgZXJyb3JJbmZvLCBfbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xufVxuXG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuXG57XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xufVxuXG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufTsgLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQsIGluc3RhbmNlKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgdW5tb3VudEVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgdW5tb3VudEVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgcmVmLCBudWxsLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gcHJldlByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSwgcHJldlN0YXRlKTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgIGlmIChzbmFwc2hvdCA9PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuU2V0LmFkZChmaW5pc2hlZFdvcmsudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBlcnJvcignJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgJyArICdtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGVzZSBjb21wb25lbnQgdHlwZXNcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIFVubW91bnRcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBNb3VudFxuICAgICAgICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcblxuICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgdXNlRWZmZWN0KGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiAnICsgJ0luc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgJyArICdhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG4nICsgJ3VzZUVmZmVjdCgoKSA9PiB7XFxuJyArICcgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4nICsgJyAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4nICsgJyAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4nICsgJyAgICAvLyAuLi5cXG4nICsgJyAgfVxcbicgKyAnICBmZXRjaERhdGEoKTtcXG4nICsgXCJ9LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5cIiArICdMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIGRlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yKCdBbiBlZmZlY3QgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgJyArICd3aGljaCBpcyB1c2VkIGZvciBjbGVhbi11cC4lcycsIGFkZGVuZHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIF9lZmZlY3QgPSBlZmZlY3QsXG4gICAgICAgICAgbmV4dCA9IF9lZmZlY3QubmV4dCxcbiAgICAgICAgICB0YWcgPSBfZWZmZWN0LnRhZztcblxuICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEgJiYgKHRhZyAmIEhhc0VmZmVjdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IG5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgbGF5b3V0IGVmZmVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIChkdXJpbmcgbXV0YXRpb24gcGhhc2UpLlxuICAgICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50Lm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuXG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAvLyBUaGVzZSBlZmZlY3RzIHNob3VsZCBvbmx5IGJlIGNvbW1pdHRlZCB3aGVuIGNvbXBvbmVudHMgYXJlIGZpcnN0IG1vdW50ZWQsXG4gICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgY29tbWl0TW91bnQoX2luc3RhbmNlMiwgdHlwZSwgcHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggdGV4dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCBwb3J0YWxzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgICBvblJlbmRlciA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25SZW5kZXI7XG4gICAgICAgICAgdmFyIGVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25SZW5kZXIoZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsIGN1cnJlbnQgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZScsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUsIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKChub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50IHx8IG5vZGUudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQpICYmIG5vZGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiBub2RlICE9PSBmaW5pc2hlZFdvcmspIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIGN1cnJlbnRSZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAoY3VycmVudFJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VycmVudFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFJlZihudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn0gLy8gVXNlci1vcmlnaW5hdGluZyBlcnJvcnMgKGxpZmVjeWNsZXMgYW5kIHJlZnMpIHNob3VsZCBub3QgaW50ZXJydXB0XG4vLyBkZWxldGlvbiwgc28gZG9uJ3QgbGV0IHRoZW0gdGhyb3cuIEhvc3Qtb3JpZ2luYXRpbmcgZXJyb3JzIHNob3VsZFxuLy8gaW50ZXJydXB0IGRlbGV0aW9uLCBzbyBpdCdzIG9rYXlcblxuXG5mdW5jdGlvbiBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBvbkNvbW1pdFVubW91bnQoY3VycmVudCk7XG5cbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBfZWZmZWN0MiA9IGVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfZWZmZWN0Mi5kZXN0cm95LFxuICAgICAgICAgICAgICAgICAgdGFnID0gX2VmZmVjdDIudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoY3VycmVudCwgZWZmZWN0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIHJlY3Vyc2l2ZS5cbiAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHVzaW5nIHRoaXMgcGFyZW50IGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHBvcnRhbCB3aWxsIGdldCBwdXNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHtcbiAgICAgICAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdoaWxlIHdlJ3JlIGluc2lkZSBhIHJlbW92ZWQgaG9zdCBub2RlIHdlIGRvbid0IHdhbnQgdG8gY2FsbFxuICAvLyByZW1vdmVDaGlsZCBvbiB0aGUgaW5uZXIgbm9kZXMgYmVjYXVzZSB0aGV5J3JlIHJlbW92ZWQgYnkgdGhlIHRvcFxuICAvLyBjYWxsIGFueXdheS4gV2UgYWxzbyB3YW50IHRvIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQgb24gYWxsXG4gIC8vIGNvbXBvc2l0ZXMgYmVmb3JlIHRoaXMgaG9zdCBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4gVGhlcmVmb3JlXG4gIC8vIHdlIGRvIGFuIGlubmVyIGxvb3Agd2hpbGUgd2UncmUgc3RpbGwgaW5zaWRlIHRoZSBob3N0IG5vZGUuXG4gIHZhciBub2RlID0gcm9vdDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cblxuICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsICYmICggLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXJzIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS4gSWRlYWxseSwgd2VcbiAgLy8gc2hvdWxkIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gIC8vIGdldCBHQzplZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBmb3Igc3VyZSB3aGljaCBwYXJlbnQgaXMgdGhlIGN1cnJlbnRcbiAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuIFRoaXMgY2hpbGRcbiAgLy8gaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgLy8gTm90ZTogd2UgY2Fubm90IG51bGwgb3V0IHNpYmxpbmcgaGVyZSwgb3RoZXJ3aXNlIGl0IGNhbiBjYXVzZSBpc3N1ZXNcbiAgLy8gd2l0aCBmaW5kRE9NTm9kZSBhbmQgaG93IGl0IHJlcXVpcmVzIHRoZSBzaWJsaW5nIGZpZWxkIHRvIGNhcnJ5IG91dFxuICAvLyB0cmF2ZXJzYWwgaW4gYSBsYXRlciBlZmZlY3QuIFNlZSBQUiAjMTY4MjAuIFdlIG5vdyBjbGVhciB0aGUgc2libGluZ1xuICAvLyBmaWVsZCBhZnRlciBlZmZlY3RzLCBzZWU6IGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvL1xuICAvLyBEb24ndCBkaXNjb25uZWN0IHN0YXRlTm9kZSBub3c7IGl0IHdpbGwgYmUgZGV0YWNoZWQgaW4gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vIEl0IG1heSBiZSByZXF1aXJlZCBpZiB0aGUgY3VycmVudCBjb21wb25lbnQgaXMgYW4gZXJyb3IgYm91bmRhcnksXG4gIC8vIGFuZCBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIHRocm93cyB3aGlsZSB1bm1vdW50aW5nIGEgcGFzc2l2ZSBlZmZlY3QuXG4gIGZpYmVyLmFsdGVybmF0ZSA9IG51bGw7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgZmliZXIuZmlyc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICBmaWJlci5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgfHwgZmliZXIudGFnID09PSBIb3N0UG9ydGFsO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAvLyBXZSdyZSBnb2luZyB0byBzZWFyY2ggZm9yd2FyZCBpbnRvIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBzaWJsaW5nIGhvc3RcbiAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gIC8vIHNlYXJjaCBwYXN0IHRoZW0uIFRoaXMgbGVhZHMgdG8gZXhwb25lbnRpYWwgc2VhcmNoIGZvciB0aGUgbmV4dCBzaWJsaW5nLlxuICAvLyBUT0RPOiBGaW5kIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuXG4gIHZhciBub2RlID0gZmliZXI7XG5cbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuXG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5mbGFncyAmIFBsYWNlbWVudCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgLy8gV2UgYWxzbyBza2lwIHBvcnRhbHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGlzIGhvc3QgdHJlZS5cblxuXG4gICAgICBpZiAobm9kZS5jaGlsZCA9PT0gbnVsbCB8fCBub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICB9XG4gICAgfSAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuXG5cbiAgICBpZiAoIShub2RlLmZsYWdzICYgUGxhY2VtZW50KSkge1xuICAgICAgLy8gRm91bmQgaXQhXG4gICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcblxuXG4gIHZhciBwYXJlbnRGaWJlciA9IGdldEhvc3RQYXJlbnRGaWJlcihmaW5pc2hlZFdvcmspOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgcGFyZW50O1xuICB2YXIgaXNDb250YWluZXI7XG4gIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICBpc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lLW5vLWZhbGx0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICByZXNldFRleHRDb250ZW50KHBhcmVudCk7IC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG5cbiAgICBwYXJlbnRGaWJlci5mbGFncyAmPSB+Q29udGVudFJlc2V0O1xuICB9XG5cbiAgdmFyIGJlZm9yZSA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7IC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuXG4gIGlmIChpc0NvbnRhaW5lcikge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBkZWxldGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICB2YXIgbm9kZSA9IGN1cnJlbnQ7IC8vIEVhY2ggaXRlcmF0aW9uLCBjdXJyZW50UGFyZW50IGlzIHBvcHVsYXRlZCB3aXRoIG5vZGUncyBob3N0IHBhcmVudCBpZiBub3RcbiAgLy8gY3VycmVudFBhcmVudElzVmFsaWQuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBjdXJyZW50UGFyZW50O1xuICB2YXIgY3VycmVudFBhcmVudElzQ29udGFpbmVyO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKCFjdXJyZW50UGFyZW50SXNWYWxpZCkge1xuICAgICAgdmFyIHBhcmVudCA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBmaW5kUGFyZW50OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoIShwYXJlbnQgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IC8vIERvbid0IHZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgYWxyZWFkeSB2aXNpdGVkIHRoZW0uXG5cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgLy8gV2Ugd2lsbCByZWFzc2lnbiBpdCBiYWNrIHdoZW4gd2UgcG9wIHRoZSBwb3J0YWwgb24gdGhlIHdheSB1cC5cbiAgICAgICAgY3VycmVudFBhcmVudCA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgcG9ydGFscyBtaWdodCBjb250YWluIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIG1heSBmaW5kIG1vcmUgaG9zdCBjb21wb25lbnRzIGJlbG93LlxuXG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gb3V0IG9mIHRoZSBwb3J0YWwsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcGFyZW50LlxuICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBrZWVwIGEgc3RhY2sgb2YgdGhlbSwgd2Ugd2lsbCBzZWFyY2ggZm9yIGl0LlxuICAgICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICB7XG4gICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBob3N0IG5vZGVzIGZyb20gdGhlIHBhcmVudC5cbiAgICAvLyBEZXRhY2ggcmVmcyBhbmQgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCgpIG9uIHRoZSB3aG9sZSBzdWJ0cmVlLlxuICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICB9XG5cbiAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICBkZXRhY2hGaWJlck11dGF0aW9uKGN1cnJlbnQpO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBkZXRhY2hGaWJlck11dGF0aW9uKGFsdGVybmF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0V29yayhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIExheW91dCBlZmZlY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBwaGFzZSBzbyB0aGF0IGFsbFxuICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlOyAvLyBUT0RPOiBUeXBlIHRoZSB1cGRhdGVRdWV1ZSB0byBiZSBzcGVjaWZpYyB0byBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShpbnN0YW5jZSwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICBpZiAoIShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1RleHQ7XG4gICAgICAgIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoX3Jvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgX3Jvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIoX3Jvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgIT09IG51bGwpIHtcbiAgICBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKTtcblxuICAgIHtcbiAgICAgIC8vIEhpZGUgdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgcHJpbWFyeSBjaGlsZHJlbi4gVE9ETzpcbiAgICAgIC8vIElkZWFsbHksIHRoaXMgZWZmZWN0IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgb24gdGhlIE9mZnNjcmVlbiBmaWJlclxuICAgICAgLy8gaXRzZWxmLiBUaGF0J3MgaG93IHVuaGlkaW5nIHdvcmtzOiB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCBzY2hlZHVsZXMgYW5cbiAgICAgIC8vIGVmZmVjdCBvbiBpdHNlbGYuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBkaWRuJ3QgY29tcGxldGUsXG4gICAgICAvLyBzbyB0aGUgZmliZXIgd2FzIG5ldmVyIGFkZGVkIHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgbm9ybWFsIHBhdGguIFdlXG4gICAgICAvLyBjb3VsZCBoYXZlIGFwcGVuZGVkIGl0IHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgU3VzcGVuc2UgY29tcG9uZW50J3NcbiAgICAgIC8vIHNlY29uZCBwYXNzLCBidXQgZG9pbmcgaXQgdGhpcyB3YXkgaXMgbGVzcyBjb21wbGljYXRlZC4gVGhpcyB3b3VsZCBiZVxuICAgICAgLy8gc2ltcGxlciBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBlZmZlY3QgbGlzdCBhbmQgdHJhdmVyc2VkIHRoZSB0cmVlLCBsaWtlXG4gICAgICAvLyB3ZSdyZSBwbGFubmluZyB0byBkby5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG4gICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB3YWtlYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHdha2VhYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3YWtlYWJsZS5fX3JlYWN0RG9Ob3RUcmFjZUludGVyYWN0aW9ucyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0cnkgPSB0cmFjaW5nLnVuc3RhYmxlX3dyYXAocmV0cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuLy8gSXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgYm91bmRhcnkgaXMgYWxyZWFkeSBoaWRkZW4uXG4vLyBUT0RPOiBVc2UgYW4gZWZmZWN0IHRhZy5cblxuXG5mdW5jdGlvbiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAob2xkU3RhdGUgPT09IG51bGwgfHwgb2xkU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gbmV3U3RhdGUgIT09IG51bGwgJiYgbmV3U3RhdGUuZGVoeWRyYXRlZCA9PT0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQoY3VycmVudCkge1xuXG4gIHJlc2V0VGV4dENvbnRlbnQoY3VycmVudC5zdGF0ZU5vZGUpO1xufVxuXG52YXIgQ09NUE9ORU5UX1RZUEUgPSAwO1xudmFyIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IDE7XG52YXIgUk9MRV9UWVBFID0gMjtcbnZhciBURVNUX05BTUVfVFlQRSA9IDM7XG52YXIgVEVYVF9UWVBFID0gNDtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yJDEgPSBTeW1ib2wuZm9yO1xuICBDT01QT05FTlRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5jb21wb25lbnQnKTtcbiAgSEFTX1BTRVVET19DTEFTU19UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3MnKTtcbiAgUk9MRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnJvbGUnKTtcbiAgVEVTVF9OQU1FX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGVzdF9pZCcpO1xuICBURVhUX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGV4dCcpO1xufVxudmFyIGNvbW1pdEhvb2tzID0gW107XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3QkMSgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRPd25lciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSBSZWFjdFNoYXJlZEludGVybmFscy5Jc1NvbWVSZW5kZXJlckFjdGluZztcbnZhciBOb0NvbnRleHQgPVxuLyogICAgICAgICAgICAgKi9cbjA7XG52YXIgQmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAqL1xuMTtcbnZhciBFdmVudENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpc2NyZXRlRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgKi9cbjQ7XG52YXIgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAqL1xuODtcbnZhciBSZW5kZXJDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBSZXRyeUFmdGVyRXJyb3IgPVxuLyogICAgICAgKi9cbjY0O1xudmFyIFJvb3RJbmNvbXBsZXRlID0gMDtcbnZhciBSb290RmF0YWxFcnJvcmVkID0gMTtcbnZhciBSb290RXJyb3JlZCA9IDI7XG52YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG52YXIgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQ7XG52YXIgUm9vdENvbXBsZXRlZCA9IDU7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBTdGFjayB0aGF0IGFsbG93cyBjb21wb25lbnRzIHRvIGNoYW5nZSB0aGUgcmVuZGVyIGxhbmVzIGZvciBpdHMgc3VidHJlZVxuLy8gVGhpcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHdvcmtpbmcgb24gYXQgdGhlIHJvb3QuIFRoZSBvbmx5XG4vLyBjYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gYHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzYCBpcyB3aGVuIHdlXG4vLyBlbnRlciBhIHN1YnRyZWUgdGhhdCBpcyBoaWRkZW4gYW5kIG5lZWRzIHRvIGJlIHVuaGlkZGVuOiBTdXNwZW5zZSBhbmRcbi8vIE9mZnNjcmVlbiBjb21wb25lbnQuXG4vL1xuLy8gTW9zdCB0aGluZ3MgaW4gdGhlIHdvcmsgbG9vcCBzaG91bGQgZGVhbCB3aXRoIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLlxuLy8gTW9zdCB0aGluZ3MgaW4gYmVnaW4vY29tcGxldGUgcGhhc2VzIHNob3VsZCBkZWFsIHdpdGggc3VidHJlZVJlbmRlckxhbmVzLlxuXG52YXIgc3VidHJlZVJlbmRlckxhbmVzID0gTm9MYW5lcztcbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7IC8vIFdoZXRoZXIgdG8gcm9vdCBjb21wbGV0ZWQsIGVycm9yZWQsIHN1c3BlbmRlZCwgZXRjLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlOyAvLyBBIGZhdGFsIGVycm9yLCBpZiBvbmUgaXMgdGhyb3duXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDsgLy8gXCJJbmNsdWRlZFwiIGxhbmVzIHJlZmVyIHRvIGxhbmVzIHRoYXQgd2VyZSB3b3JrZWQgb24gZHVyaW5nIHRoaXMgcmVuZGVyLiBJdCdzXG4vLyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBgcmVuZGVyTGFuZXNgIGJlY2F1c2UgYHJlbmRlckxhbmVzYCBjYW4gY2hhbmdlIGFzIHlvdVxuLy8gZW50ZXIgYW5kIGV4aXQgYW4gT2Zmc2NyZWVuIHRyZWUuIFRoaXMgdmFsdWUgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZW5kZXJcbi8vIGxhbmVzIGZvciB0aGUgZW50aXJlIHJlbmRlciBwaGFzZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbi8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSBwaW5nZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG52YXIgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBjb21taXR0ZWQgYSBmYWxsYmFjay4gVGhpcyBsZXRzIHVzIGVuc3VyZSBhIHRyYWluXG4vLyBtb2RlbCB3aGVyZSB3ZSBkb24ndCBjb21taXQgbmV3IGxvYWRpbmcgc3RhdGVzIGluIHRvbyBxdWljayBzdWNjZXNzaW9uLlxuXG52YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG52YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSA1MDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4vLyBtb3JlIGFuZCBwcmVmZXIgQ1BVIHN1c3BlbnNlIGhldXJpc3RpY3MgaW5zdGVhZC5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG52YXIgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDA7XG5cbmZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIFJFTkRFUl9USU1FT1VUX01TO1xufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbn1cbnZhciBuZXh0RWZmZWN0ID0gbnVsbDtcbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG52YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG52YXIgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7IC8vIFVzZSB0aGVzZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgbmVzdGVkIHVwZGF0ZXNcblxudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwOyAvLyBNYXJrcyB0aGUgbmVlZCB0byByZXNjaGVkdWxlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIGF0IHRoZXNlIGxhbmVzXG4vLyBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZS4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgdHJhY2VkIGFjcm9zcyBjb21wb25lbnRzXG4vLyB0aGF0IHNwYXduIG5ldyB3b3JrIGR1cmluZyByZW5kZXIuIEUuZy4gaGlkZGVuIGJvdW5kYXJpZXMsIHN1c3BlbmRlZCBTU1Jcbi8vIGh5ZHJhdGlvbiBvciBTdXNwZW5zZUxpc3QuXG4vLyBUT0RPOiBDYW4gdXNlIGEgYml0bWFzayBpbnN0ZWFkIG9mIGFuIGFycmF5XG5cbnZhciBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7IC8vIElmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZSBzaG91bGQgdHJlYXQgdGhlaXJcbi8vIGV2ZW50IHRpbWVzIGFzIHNpbXVsdGFuZW91cywgZXZlbiBpZiB0aGUgYWN0dWFsIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkXG4vLyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG52YXIgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xudmFyIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7IC8vIERldiBvbmx5IGZsYWcgdGhhdCB0cmFja3MgaWYgcGFzc2l2ZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgYmVpbmcgZmx1c2hlZC5cbi8vIFdlIHdhcm4gYWJvdXQgc3RhdGUgdXBkYXRlcyBmb3IgdW5tb3VudGVkIGNvbXBvbmVudHMgZGlmZmVyZW50bHkgaW4gdGhpcyBjYXNlLlxuXG52YXIgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcbnZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RFdmVudFRpbWUoKSB7XG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgUmVhY3QsIHNvIGl0J3MgZmluZSB0byByZWFkIHRoZSBhY3R1YWwgdGltZS5cbiAgICByZXR1cm4gbm93KCk7XG4gIH0gLy8gV2UncmUgbm90IGluc2lkZSBSZWFjdCwgc28gd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBicm93c2VyIGV2ZW50LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFRpbWUgIT09IE5vVGltZXN0YW1wKSB7XG4gICAgLy8gVXNlIHRoZSBzYW1lIHN0YXJ0IHRpbWUgZm9yIGFsbCB1cGRhdGVzIHVudGlsIHdlIGVudGVyIFJlYWN0IGFnYWluLlxuICAgIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xuICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZSBzaW5jZSBSZWFjdCB5aWVsZGVkLiBDb21wdXRlIGEgbmV3IHN0YXJ0IHRpbWUuXG5cblxuICBjdXJyZW50RXZlbnRUaW1lID0gbm93KCk7XG4gIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAvLyB1cGRhdGVzIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGhpbiB0aGUgc2FtZSBldmVudC4gVG8gZG8gdGhpcywgdGhlIGlucHV0c1xuICAvLyB0byB0aGUgYWxnb3JpdGhtIG11c3QgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCB3ZSB1c2UgdGhlIGByZW5kZXJMYW5lc2BcbiAgLy8gdG8gYXZvaWQgY2hvb3NpbmcgYSBsYW5lIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy5cbiAgLy9cbiAgLy8gSG93ZXZlciwgdGhlIFwiaW5jbHVkZWRcIiBsYW5lcyBjb3VsZCBiZSBtdXRhdGVkIGluIGJldHdlZW4gdXBkYXRlcyBpbiB0aGVcbiAgLy8gc2FtZSBldmVudCwgbGlrZSBpZiB5b3UgcGVyZm9ybSBhbiB1cGRhdGUgaW5zaWRlIGBmbHVzaFN5bmNgLiBPciBhbnkgb3RoZXJcbiAgLy8gY29kZSBwYXRoIHRoYXQgbWlnaHQgY2FsbCBgcHJlcGFyZUZyZXNoU3RhY2tgLlxuICAvL1xuICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgLy8gZXZlbnQuIFRoZW4gcmVzZXQgdGhlIGNhY2hlZCB2YWx1ZXMgb25jZSB3ZSBjYW4gYmUgc3VyZSB0aGUgZXZlbnQgaXMgb3Zlci5cbiAgLy8gT3VyIGhldXJpc3RpYyBmb3IgdGhhdCBpcyB3aGVuZXZlciB3ZSBlbnRlciBhIGNvbmN1cnJlbnQgd29yayBsb29wLlxuICAvL1xuICAvLyBXZSdsbCBkbyB0aGUgc2FtZSBmb3IgYGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lc2AgYmVsb3cuXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICB2YXIgaXNUcmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkgIT09IE5vVHJhbnNpdGlvbjtcblxuICBpZiAoaXNUcmFuc2l0aW9uKSB7XG4gICAgaWYgKGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgIT09IG51bGwgPyBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdC5wZW5kaW5nTGFuZXMgOiBOb0xhbmVzO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kVHJhbnNpdGlvbkxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMsIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyk7XG4gIH0gLy8gVE9ETzogUmVtb3ZlIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgU2NoZWR1bGVyIHByaW9yaXR5LlxuICAvLyBUbyBkbyB0aGF0LCB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhbiB1cGRhdGUgbGFuZSBwcmlvcml0eS5cblxuXG4gIHZhciBzY2hlZHVsZXJQcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7IC8vIFRoZSBvbGQgYmVoYXZpb3Igd2FzIHVzaW5nIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGUgU2NoZWR1bGVyLlxuICAvLyBUaGlzIGNvdXBsZXMgUmVhY3QgdG8gdGhlIFNjaGVkdWxlciBpbnRlcm5hbHMsIHNvIHdlJ3JlIHJlcGxhY2luZyBpdFxuICAvLyB3aXRoIHRoZSBjdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5IGFib3ZlLiBBcyBhbiBleGFtcGxlIG9mIGhvdyB0aGlzXG4gIC8vIGNvdWxkIGJlIHByb2JsZW1hdGljLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCxcbiAgLy8gdGhlbiB3ZSdsbCBnZXQgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgU2NoZWR1bGVyIHRhc2ssXG4gIC8vIHdoaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHdlIHdhbnQuXG5cbiAgdmFyIGxhbmU7XG5cbiAgaWYgKCAvLyBUT0RPOiBUZW1wb3JhcnkuIFdlJ3JlIHJlbW92aW5nIHRoZSBjb25jZXB0IG9mIGRpc2NyZXRlIHVwZGF0ZXMuXG4gIChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgc2NoZWR1bGVyUHJpb3JpdHkgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIpIHtcbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJMYW5lUHJpb3JpdHkgPSBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5KTtcblxuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShzY2hlZHVsZXJMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UmV0cnlMYW5lKGZpYmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGByZXF1ZXN0VXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiDigJQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFNlZSBgcmVxdWVzdFVwZGF0ZUxhbmVgIGZvciBleHBsYW5hdGlvbiBvZiBgY3VycmVudEV2ZW50V2lwTGFuZXNgXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICByZXR1cm4gZmluZFJldHJ5TGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKSB7XG4gIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpO1xuICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIGxhbmUpO1xuXG4gIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cblxuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAvLyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCB1cGRhdGUgd29yayBvbiB0aGlzIHJvb3QuIFVubGVzcyB0aGVcbiAgICAvLyBgZGVmZXJSZW5kZXJQaGFzZVVwZGF0ZVRvTmV4dEJhdGNoYCBmbGFnIGlzIG9mZiBhbmQgdGhpcyBpcyBhIHJlbmRlclxuICAgIC8vIHBoYXNlIHVwZGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB0cmVhdCByZW5kZXIgcGhhc2UgdXBkYXRlcyBhcyBpZlxuICAgIC8vIHRoZXkgd2VyZSBpbnRlcmxlYXZlZCwgZm9yIGJhY2t3YXJkcyBjb21wYXQgcmVhc29ucy5cbiAgICB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcywgbGFuZSk7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgIC8vIFRoZSByb290IGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgd2hpY2ggbWVhbnMgdGhpcyByZW5kZXJcbiAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHJlbmRlciBhbmQgc3dpdGNoaW5nIHRvIHRoZSB1cGRhdGUuXG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHJlcXVlc3RVcGRhdGVMYW5lUHJpb3JpdHkgYWxzbyByZWFkcyB0aGUgcHJpb3JpdHkuIFBhc3MgdGhlXG4gIC8vIHByaW9yaXR5IGFzIGFuIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24gYW5kIHRoaXMgb25lLlxuXG5cbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIGlmIChsYW5lID09PSBTeW5jTGFuZSkge1xuICAgIGlmICggLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIHVuYmF0Y2hlZFVwZGF0ZXNcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBSZWdpc3RlciBwZW5kaW5nIGludGVyYWN0aW9ucyBvbiB0aGUgcm9vdCB0byBhdm9pZCBsb3NpbmcgdHJhY2VkIGludGVyYWN0aW9uIGRhdGEuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7IC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBUaGUgaW5pdGlhbCBtb3VudCBvZiBhIFJlYWN0RE9NLnJlbmRlci1lZFxuICAgICAgLy8gcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMgc2hvdWxkIGJlIHN5bmNocm9ub3VzLCBidXQgbGF5b3V0IHVwZGF0ZXNcbiAgICAgIC8vIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cblxuICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgc3luY2hyb25vdXMgd29yayBub3csIHVubGVzcyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb3IgaW5zaWRlXG4gICAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gc2NoZWR1bGVDYWxsYmFja0ZvckZpYmVyIHRvIHByZXNlcnZlIHRoZSBhYmlsaXR5IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgLy8gd2l0aG91dCBpbW1lZGlhdGVseSBmbHVzaGluZyBpdC4gV2Ugb25seSBkbyB0aGlzIGZvciB1c2VyLWluaXRpYXRlZFxuICAgICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2NoZWR1bGUgYSBkaXNjcmV0ZSB1cGRhdGUgYnV0IG9ubHkgaWYgaXQncyBub3QgU3luYy5cbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAoIC8vIE9ubHkgdXBkYXRlcyBhdCB1c2VyLWJsb2NraW5nIHByaW9yaXR5IG9yIGdyZWF0ZXIgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBkaXNjcmV0ZSwgZXZlbiBpbnNpZGUgYSBkaXNjcmV0ZSBldmVudC5cbiAgICBwcmlvcml0eUxldmVsID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIHx8IHByaW9yaXR5TGV2ZWwgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSBldmVudC4gVHJhY2sgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgLy8gZGlzY3JldGUgdXBkYXRlIHBlciByb290IHNvIHdlIGNhbiBmbHVzaCB0aGVtIGVhcmx5LCBpZiBuZWVkZWQuXG4gICAgICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbmV3IFNldChbcm9vdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5hZGQocm9vdCk7XG4gICAgICB9XG4gICAgfSAvLyBTY2hlZHVsZSBvdGhlciB1cGRhdGVzIGFmdGVyIGluIGNhc2UgdGhlIGNhbGxiYWNrIGlzIHN5bmMuXG5cblxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcbiAgfSAvLyBXZSB1c2UgdGhpcyB3aGVuIGFzc2lnbmluZyBhIGxhbmUgZm9yIGEgdHJhbnNpdGlvbiBpbnNpZGVcbiAgLy8gYHJlcXVlc3RVcGRhdGVMYW5lYC4gV2UgYXNzdW1lIGl0J3MgdGhlIHNhbWUgYXMgdGhlIHJvb3QgYmVpbmcgdXBkYXRlZCxcbiAgLy8gc2luY2UgaW4gdGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlIHJvb3QgYXBwIGl0IHByb2JhYmx5IGlzLiBJZiBpdCdzIG5vdFxuICAvLyB0aGUgc2FtZSByb290LCB0aGVuIGl0J3Mgbm90IGEgaHVnZSBkZWFsLCB3ZSBqdXN0IG1pZ2h0IGJhdGNoIG1vcmUgc3R1ZmZcbiAgLy8gdG9nZXRoZXIgbW9yZSB0aGFuIG5lY2Vzc2FyeS5cblxuXG4gIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gcm9vdDtcbn0gLy8gVGhpcyBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gd2UgY2FuIG1hcmsgYSBmaWJlciB3aXRoIHBlbmRpbmdcbi8vIHdvcmsgd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHR5cGljYWwgdXBkYXRlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGV2ZW50O1xuLy8gZS5nLiByZXRyeWluZyBhIFN1c3BlbnNlIGJvdW5kYXJ5IGlzbid0IGFuIHVwZGF0ZSwgYnV0IGl0IGRvZXMgc2NoZWR1bGUgd29ya1xuLy8gb24gYSBmaWJlci5cblxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgZmliZXIncyBsYW5lc1xuICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIGxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgbGFuZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCAmJiAoc291cmNlRmliZXIuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgIH1cbiAgfSAvLyBXYWxrIHRoZSBwYXJlbnQgcGF0aCB0byB0aGUgcm9vdCBhbmQgdXBkYXRlIHRoZSBjaGlsZCBleHBpcmF0aW9uIHRpbWUuXG5cblxuICB2YXIgbm9kZSA9IHNvdXJjZUZpYmVyO1xuICB2YXIgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBwYXJlbnQuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMocGFyZW50LmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICgocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gcGFyZW50O1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgdmFyIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIHRhc2sgZm9yIGEgcm9vdC4gVGhlcmUncyBvbmx5IG9uZSB0YXNrIHBlclxuLy8gcm9vdDsgaWYgYSB0YXNrIHdhcyBhbHJlYWR5IHNjaGVkdWxlZCwgd2UnbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcmlvcml0eVxuLy8gb2YgdGhlIGV4aXN0aW5nIHRhc2sgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW9yaXR5IG9mIHRoZSBuZXh0IGxldmVsIHRoYXQgdGhlXG4vLyByb290IGhhcyB3b3JrIG9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB1cGRhdGUsIGFuZCByaWdodCBiZWZvcmVcbi8vIGV4aXRpbmcgYSB0YXNrLlxuXG5cbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBjdXJyZW50VGltZSkge1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTsgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cblxuICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7IC8vIFRoaXMgcmV0dXJucyB0aGUgcHJpb3JpdHkgbGV2ZWwgY29tcHV0ZWQgZHVyaW5nIHRoZSBgZ2V0TmV4dExhbmVzYCBjYWxsLlxuXG4gIHZhciBuZXdDYWxsYmFja1ByaW9yaXR5ID0gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKTtcblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBUaGVyZSdzIG5vdGhpbmcgdG8gd29yayBvbi5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHRhc2suIFdlIG1heSBiZSBhYmxlIHRvIHJldXNlIGl0LlxuXG5cbiAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9IHJvb3QuY2FsbGJhY2tQcmlvcml0eTtcblxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPT09IG5ld0NhbGxiYWNrUHJpb3JpdHkpIHtcbiAgICAgIC8vIFRoZSBwcmlvcml0eSBoYXNuJ3QgY2hhbmdlZC4gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyB0YXNrLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhlIHByaW9yaXR5IGNoYW5nZWQuIENhbmNlbCB0aGUgZXhpc3RpbmcgY2FsbGJhY2suIFdlJ2xsIHNjaGVkdWxlIGEgbmV3XG4gICAgLy8gb25lIGJlbG93LlxuXG5cbiAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gIH0gLy8gU2NoZWR1bGUgYSBuZXcgY2FsbGJhY2suXG5cblxuICB2YXIgbmV3Q2FsbGJhY2tOb2RlO1xuXG4gIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTeW5jIFJlYWN0IGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIG9uIGEgc3BlY2lhbFxuICAgIC8vIGludGVybmFsIHF1ZXVlXG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVTeW5jQ2FsbGJhY2socGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2UgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5KSB7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KG5ld0NhbGxiYWNrUHJpb3JpdHkpO1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9XG5cbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBldmVyeSBjb25jdXJyZW50IHRhc2ssIGkuZS4gYW55dGhpbmcgdGhhdFxuLy8gZ29lcyB0aHJvdWdoIFNjaGVkdWxlci5cblxuXG5mdW5jdGlvbiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3Qocm9vdCkge1xuICAvLyBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIGEgUmVhY3QgZXZlbnQsIHdlIGNhbiBjbGVhciB0aGUgY3VycmVudFxuICAvLyBldmVudCB0aW1lLiBUaGUgbmV4dCB1cGRhdGUgd2lsbCBjb21wdXRlIGEgbmV3IGV2ZW50IHRpbWUuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfSAvLyBGbHVzaCBhbnkgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGRlY2lkaW5nIHdoaWNoIGxhbmVzIHRvIHdvcmsgb24sXG4gIC8vIGluIGNhc2UgdGhleSBzY2hlZHVsZSBhZGRpdGlvbmFsIHdvcmsuXG5cblxuICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgdmFyIGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMgPSBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgaWYgKGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHBhc3NpdmUgZWZmZWN0IHBoYXNlIG1heSBoYXZlIGNhbmNlbGVkIHRoZSBjdXJyZW50IHRhc2suXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhc2sgbm9kZSBmb3IgdGhpcyByb290IHdhcyBjaGFuZ2VkLlxuICAgIGlmIChyb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgd2FzIGNhbmNlbGVkLiBFeGl0LiBXZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgIC8vIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGJlY2F1c2UgdGhlIGNoZWNrIGFib3ZlIGltcGxpZXMgZWl0aGVyIHRoYXRcbiAgICAgIC8vIHRoZXJlJ3MgYSBuZXcgdGFzaywgb3IgdGhhdCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSAvLyBEZXRlcm1pbmUgdGhlIG5leHQgZXhwaXJhdGlvbiB0aW1lIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gIC8vIG9uIHRoZSByb290LlxuXG5cbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKTtcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgIC8vXG4gICAgLy8gU28gd2UnbGwgdGhyb3cgb3V0IHRoZSBjdXJyZW50IHdvcmsgYW5kIHJlc3RhcnQuXG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gIH0gZWxzZSBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEluY29tcGxldGUpIHtcbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAvLyBvciwgaWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgd2FpdCB0byBjb21taXQgaXQgYWZ0ZXIgYSB0aW1lb3V0LlxuXG5cbiAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKTtcbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpIHtcbiAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgY2FzZSBSb290SW5jb21wbGV0ZTpcbiAgICBjYXNlIFJvb3RGYXRhbEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBGbG93IGtub3dzIGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zIGlmIEkgYWRkIGEgYnJlYWtcbiAgICAvLyBzdGF0ZW1lbnQsIGJ1dCBlc2xpbnQgZG9lc24ndCBrbm93IGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zXG4gICAgLy8gaWYgSSBkby4gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAge1xuICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byByZXRyeSB0aGlzIHRyZWUuIElmIHdlIHJlYWNoZWRcbiAgICAgICAgLy8gdGhpcyBwb2ludCwgaXQgZXJyb3JlZCBhZ2Fpbi4gQ29tbWl0IGl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7IC8vIFdlIGhhdmUgYW4gYWNjZXB0YWJsZSBsb2FkaW5nIHN0YXRlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltbWVkaWF0ZWx5IGNvbW1pdCBpdCBvciB3YWl0IGEgYml0LlxuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSAmJiAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIG9ubHkgaW5jbHVkZWQgcmV0cmllcywgbm8gdXBkYXRlcy4gVGhyb3R0bGUgY29tbWl0dGluZ1xuICAgICAgICAgIC8vIHJldHJpZXMgc28gdGhhdCB3ZSBkb24ndCBzaG93IHRvbyBtYW55IGxvYWRpbmcgc3RhdGVzIHRvbyBxdWlja2x5LlxuICAgICAgICAgIHZhciBtc1VudGlsVGltZW91dCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyBGQUxMQkFDS19USFJPVFRMRV9NUyAtIG5vdygpOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuICAgICAgICAgIGlmIChtc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAobmV4dExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHN1c3BlbmRlZExhbmVzLCBsYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHByZWZlciB0byByZW5kZXIgdGhlIGZhbGxiYWNrIG9mIGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBsZXZlbC4gUGluZyB0aGUgbGFzdCBzdXNwZW5kZWQgbGV2ZWwgdG8gdHJ5XG4gICAgICAgICAgICAgIC8vIHJlbmRlcmluZyBpdCBhZ2Fpbi5cbiAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgSWRsZT8gU2hvdWxkIG5vdCByZXN0YXJ0LlxuICAgICAgICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICAgICAgICBtYXJrUm9vdFBpbmdlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHdvcmsgdG8gZG8uIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLlxuXG5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIG1zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUaGUgd29yayBleHBpcmVkLiBDb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB0cmFuc2l0aW9uLCBzbyB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IGNvbW1pdHRpbmcgYVxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHRyYW5zaXRpb24sIGJ1dCB3ZSBkaWQgdHJpZ2dlciBhbiBhdm9pZGVkIHN0YXRlLlxuICAgICAgICAgIC8vIFNjaGVkdWxlIGEgcGxhY2Vob2xkZXIgdG8gZGlzcGxheSBhZnRlciBhIHNob3J0IGRlbGF5LCB1c2luZyB0aGUgSnVzdFxuICAgICAgICAgIC8vIE5vdGljZWFibGUgRGlmZmVyZW5jZS5cbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGUgSk5EIG9wdGltaXphdGlvbiB3b3J0aCB0aGUgYWRkZWQgY29tcGxleGl0eT8gSWYgdGhpcyBpc1xuICAgICAgICAgIC8vIHRoZSBvbmx5IHJlYXNvbiB3ZSB0cmFjayB0aGUgZXZlbnQgdGltZSwgdGhlbiBwcm9iYWJseSBub3QuXG4gICAgICAgICAgLy8gQ29uc2lkZXIgcmVtb3ZpbmcuXG4gICAgICAgICAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB2YXIgZXZlbnRUaW1lTXMgPSBtb3N0UmVjZW50RXZlbnRUaW1lO1xuICAgICAgICAgIHZhciB0aW1lRWxhcHNlZE1zID0gbm93KCkgLSBldmVudFRpbWVNcztcblxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQgPSBqbmQodGltZUVsYXBzZWRNcykgLSB0aW1lRWxhcHNlZE1zOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuXG4gICAgICAgICAgaWYgKF9tc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGFycml2ZS5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIF9tc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQ29tbWl0IHRoZSBwbGFjZWhvbGRlci5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAvLyBUT0RPOiBMb2wgbWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZmFjdG9yIHRoaXMgYmVzaWRlcyB0aGlzXG4gIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzKTtcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCkge1xuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHZhciBsYW5lcztcbiAgdmFyIGV4aXRTdGF0dXM7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBpbmNsdWRlc1NvbWVMYW5lKHJvb3QuZXhwaXJlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGVyZSdzIGEgcGFydGlhbCB0cmVlLCBhbmQgYXQgbGVhc3Qgb25lIG9mIGl0cyBsYW5lcyBoYXMgZXhwaXJlZC4gRmluaXNoXG4gICAgLy8gcmVuZGVyaW5nIGl0IGJlZm9yZSByZW5kZXJpbmcgdGhlIHJlc3Qgb2YgdGhlIGV4cGlyZWQgd29yay5cbiAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gcGFydCBvZiB0aGUgdHJlZSBpcyByZW5kZXJlZFxuICAgICAgLy8gY29uY3VycmVudGx5LiBJZiB0aGUgd2hvbGUgdHJlZSBpcyByZW5kZXJlZCBzeW5jaHJvbm91c2x5LCB0aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbm8gaW50ZXJsZWF2ZWQgZXZlbnRzLlxuICAgICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgbGFuZXMpO1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gIGNvbW1pdFJvb3Qocm9vdCk7IC8vIEJlZm9yZSBleGl0aW5nLCBtYWtlIHN1cmUgdGhlcmUncyBhIGNhbGxiYWNrIHNjaGVkdWxlZCBmb3IgdGhlIG5leHRcbiAgLy8gcGVuZGluZyBsZXZlbC5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzKCkge1xuICAvLyBUT0RPOiBTaG91bGQgYmUgYWJsZSB0byBmbHVzaCBpbnNpZGUgYmF0Y2hlZFVwZGF0ZXMsIGJ1dCBub3QgaW5zaWRlIGBhY3RgLlxuICAvLyBIb3dldmVyLCBgYWN0YCB1c2VzIGBiYXRjaGVkVXBkYXRlc2AsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoXG4gIC8vIHRob3NlIHR3byBjYXNlcy4gTmVlZCB0byBmaXggdGhpcyBiZWZvcmUgZXhwb3NpbmcgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNcbiAgLy8gYXMgYSBwdWJsaWMgQVBJLlxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoQmF0Y2hlZENvbnRleHQgfCBSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIGVycm9yKCd1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyAnICsgJ2FscmVhZHkgcmVuZGVyaW5nLicpO1xuICAgICAgfVxuICAgIH0gLy8gV2UncmUgYWxyZWFkeSByZW5kZXJpbmcsIHNvIHdlIGNhbid0IHN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyB3b3JrLlxuICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYSBuZXN0ZWQgZXZlbnQgZGlzcGF0Y2ggdHJpZ2dlcmVkIGJ5IGEgbGlmZWN5Y2xlL2VmZmVjdCxcbiAgICAvLyBsaWtlIGBlbC5mb2N1cygpYC4gRXhpdC5cblxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCk7IC8vIElmIHRoZSBkaXNjcmV0ZSB1cGRhdGVzIHNjaGVkdWxlZCBwYXNzaXZlIGVmZmVjdHMsIGZsdXNoIHRoZW0gbm93IHNvIHRoYXRcbiAgLy8gdGhleSBmaXJlIGJlZm9yZSB0aGUgbmV4dCBzZXJpYWwgZXZlbnQuXG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgLy8gRm9yIGVhY2ggcm9vdCB3aXRoIHBlbmRpbmcgZGlzY3JldGUgdXBkYXRlcywgc2NoZWR1bGUgYSBjYWxsYmFjayB0b1xuICAgIC8vIGltbWVkaWF0ZWx5IGZsdXNoIHRoZW0uXG4gICAgdmFyIHJvb3RzID0gcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcztcbiAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDtcbiAgICByb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgfSk7XG4gIH0gLy8gTm93IGZsdXNoIHRoZSBpbW1lZGlhdGUgcXVldWUuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBFdmVudENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzJDEoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBEaXNjcmV0ZUV2ZW50Q29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShVc2VyQmxvY2tpbmdQcmlvcml0eSQyLCBmbi5iaW5kKG51bGwsIGEsIGIsIGMsIGQpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bmJhdGNoZWRVcGRhdGVzKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgJj0gfkJhdGNoZWRDb250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IExlZ2FjeVVuYmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgaWYgKChwcmV2RXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBlcnJvcignZmx1c2hTeW5jIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLiBSZWFjdCBjYW5ub3QgJyArICdmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvICcgKyAnYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLicpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihhKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZuLmJpbmQobnVsbCwgYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBoYXBwZW4gZXZlbiBpZiBiYXRjaGVkVXBkYXRlcyBpcyBoaWdoZXIgdXBcbiAgICAgIC8vIHRoZSBzdGFjay5cblxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHVzaFJlbmRlckxhbmVzKGZpYmVyLCBsYW5lcykge1xuICBwdXNoKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgc3VidHJlZVJlbmRlckxhbmVzLCBmaWJlcik7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMoc3VidHJlZVJlbmRlckxhbmVzLCBsYW5lcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHBvcFJlbmRlckxhbmVzKGZpYmVyKSB7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICBwb3Aoc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG5cbiAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgIC8vIHN0YXRlLiBOb3cgdGhhdCB3ZSBoYXZlIGFkZGl0aW9uYWwgd29yaywgY2FuY2VsIHRoZSB0aW1lb3V0LlxuICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yayk7XG4gICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcblxuICB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSkge1xuICBkbyB7XG4gICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgbW9kdWxlLWxldmVsIHN0YXRlIHRoYXQgd2FzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IEkgZm91bmQgYW5kIGFkZGVkIHRoaXMgbWlzc2luZyBsaW5lIHdoaWxlIGludmVzdGlnYXRpbmcgYVxuICAgICAgLy8gc2VwYXJhdGUgaXNzdWUuIFdyaXRlIGEgcmVncmVzc2lvbiB0ZXN0IHVzaW5nIHN0cmluZyByZWZzLlxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsgPT09IG51bGwgfHwgZXJyb3JlZFdvcmsucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHRvIGJlIHdvcmtpbmcgb24gYSBub24tcm9vdCBmaWJlci4gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgICAgIC8vIHN1cHBvc2VkIHRvIGNhcHR1cmUgYWxsIGVycm9ycyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IGFuIGVycm9yXG4gICAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlOyAvLyBTZXQgYHdvcmtJblByb2dyZXNzYCB0byBudWxsLiBUaGlzIHJlcHJlc2VudHMgYWR2YW5jaW5nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHNpYmxpbmcsIG9yIHRoZSBwYXJlbnQgaWYgdGhlcmUgYXJlIG5vIHNpYmxpbmdzLiBCdXQgc2luY2UgdGhlIHJvb3RcbiAgICAgICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgICAgICAvLyBoYW5kbGVkIGJ5IGBjb21wbGV0ZVVuaXRPZldvcmtgIG9yIGB1bndpbmRXb3JrYCwgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgbm90IGNhbGxpbmcgdGhvc2UsIHdlIG5lZWQgc2V0IGl0IGhlcmUuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgICAgIC8vIHN1c3BlbmRlZCByZW5kZXIuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZXJyb3JlZFdvcmssIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd0V4Y2VwdGlvbihyb290LCBlcnJvcmVkV29yay5yZXR1cm4sIGVycm9yZWRXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgY29tcGxldGVVbml0T2ZXb3JrKGVycm9yZWRXb3JrKTtcbiAgICB9IGNhdGNoICh5ZXRBbm90aGVyVGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcmV0dXJuIHBhdGggYWxzbyB0aHJldy5cbiAgICAgIHRocm93blZhbHVlID0geWV0QW5vdGhlclRocm93blZhbHVlO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IGVycm9yZWRXb3JrICYmIGVycm9yZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkgaGFzIGFscmVhZHkgZXJyb3JlZCwgdGhlbiB3ZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nXG4gICAgICAgIC8vIHRoZSBlcnJvci4gQnViYmxlIGl0IHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICAgICAgICBlcnJvcmVkV29yayA9IGVycm9yZWRXb3JrLnJldHVybjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBlcnJvcmVkV29yaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpIHtcbiAge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnM7XG4gICAgcmV0dXJuIHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpIHtcbiAge1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93KCk7XG59XG5mdW5jdGlvbiBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGxhbmUpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gbWVyZ2VMYW5lcyhsYW5lLCB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZCgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHRyZWUgdGhhdCBtaWdodCBoYXZlIHVuYmxvY2tlZFxuICAvLyB0aGlzIHJlbmRlci5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwgJiYgKGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSB8fCBpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpKSB7XG4gICAgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIHNvIHRoYXQgd2Ugc3dpdGNoIHRvIHdvcmtpbmcgb25cbiAgICAvLyB0aGUgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZC4gVXN1YWxseSB3ZSBvbmx5IHN1c3BlbmQgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsd2F5cyBtYXJrIHRoZSByb290IGFzIHN1c3BlbmRlZCBpbW1lZGlhdGVseVxuICAgIC8vIChpbnNpZGUgdGhpcyBmdW5jdGlvbiksIHNpbmNlIGJ5IHN1c3BlbmRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyXG4gICAgLy8gcGhhc2UgaW50cm9kdWNlcyBhIHBvdGVudGlhbCBtaXN0YWtlIHdoZXJlIHdlIHN1c3BlbmQgbGFuZXMgdGhhdCB3ZXJlXG4gICAgLy8gcGluZ2VkIG9yIHVwZGF0ZWQgd2hpbGUgd2Ugd2VyZSByZW5kZXJpbmcuXG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMSh3b3JrSW5Qcm9ncmVzc1Jvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290Q29tcGxldGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICB9XG59IC8vIENhbGxlZCBkdXJpbmcgcmVuZGVyIHRvIGRldGVybWluZSBpZiBhbnl0aGluZyBoYXMgc3VzcGVuZGVkLlxuLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBvciBjb21wbGV0ZWQsIHdlIGNhbid0IHJlYWxseSBiZSBzdXJlLFxuICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufSAvLyBUaGUgd29yayBsb29wIGlzIGFuIGV4dHJlbWVseSBob3QgcGF0aC4gVGVsbCBDbG9zdXJlIG5vdCB0byBpbmxpbmUgaXQuXG5cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gIC8vIEFscmVhZHkgdGltZWQgb3V0LCBzbyBwZXJmb3JtIHdvcmsgd2l0aG91dCBjaGVja2luZyBpZiB3ZSBuZWVkIHRvIHlpZWxkLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wQ29uY3VycmVudCgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG5cbiAgICByZXR1cm4gUm9vdEluY29tcGxldGU7XG4gIH0gZWxzZSB7XG5cblxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBSZXR1cm4gdGhlIGZpbmFsIGV4aXQgc3RhdHVzLlxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gIH1cbn1cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkKCkpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHVuaXRPZldvcmssIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGRvZXNuJ3Qgc3Bhd24gbmV3IHdvcmssIGNvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmsuXG4gICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgfVxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIEF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgdW5pdCBvZiB3b3JrLCB0aGVuIG1vdmUgdG8gdGhlIG5leHRcbiAgLy8gc2libGluZy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2libGluZ3MsIHJldHVybiB0byB0aGUgcGFyZW50IGZpYmVyLlxuICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG5cbiAgZG8ge1xuICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgIHZhciByZXR1cm5GaWJlciA9IGNvbXBsZXRlZFdvcmsucmV0dXJuOyAvLyBDaGVjayBpZiB0aGUgd29yayBjb21wbGV0ZWQgb3IgaWYgc29tZXRoaW5nIHRocmV3LlxuXG4gICAgaWYgKChjb21wbGV0ZWRXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENvbXBsZXRpbmcgdGhpcyBmaWJlciBzcGF3bmVkIG5ldyB3b3JrLiBXb3JrIG9uIHRoYXQgbmV4dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKTtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsICYmIC8vIERvIG5vdCBhcHBlbmQgZWZmZWN0cyB0byBwYXJlbnRzIGlmIGEgc2libGluZyBmYWlsZWQgdG8gY29tcGxldGVcbiAgICAgIChyZXR1cm5GaWJlci5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIEFwcGVuZCBhbGwgdGhlIGVmZmVjdHMgb2YgdGhlIHN1YnRyZWUgYW5kIHRoaXMgZmliZXIgb250byB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3Qgb2YgdGhlIHBhcmVudC4gVGhlIGNvbXBsZXRpb24gb3JkZXIgb2YgdGhlIGNoaWxkcmVuIGFmZmVjdHMgdGhlXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0IG9yZGVyLlxuICAgICAgICBpZiAocmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdDtcbiAgICAgICAgfSAvLyBJZiB0aGlzIGZpYmVyIGhhZCBzaWRlLWVmZmVjdHMsIHdlIGFwcGVuZCBpdCBBRlRFUiB0aGUgY2hpbGRyZW4nc1xuICAgICAgICAvLyBzaWRlLWVmZmVjdHMuIFdlIGNhbiBwZXJmb3JtIGNlcnRhaW4gc2lkZS1lZmZlY3RzIGVhcmxpZXIgaWYgbmVlZGVkLFxuICAgICAgICAvLyBieSBkb2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZWZmZWN0IGxpc3QuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gc2NoZWR1bGUgb3VyIG93biBzaWRlLWVmZmVjdCBvbiBvdXIgb3duIGxpc3QgYmVjYXVzZSBpZiBlbmQgdXBcbiAgICAgICAgLy8gcmV1c2luZyBjaGlsZHJlbiB3ZSdsbCBzY2hlZHVsZSB0aGlzIGVmZmVjdCBvbnRvIGl0c2VsZiBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBhdCB0aGUgZW5kLlxuXG5cbiAgICAgICAgdmFyIGZsYWdzID0gY29tcGxldGVkV29yay5mbGFnczsgLy8gU2tpcCBib3RoIE5vV29yayBhbmQgUGVyZm9ybWVkV29yayB0YWdzIHdoZW4gY3JlYXRpbmcgdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0LiBQZXJmb3JtZWRXb3JrIGVmZmVjdCBpcyByZWFkIGJ5IFJlYWN0IERldlRvb2xzIGJ1dCBzaG91bGRuJ3QgYmVcbiAgICAgICAgLy8gY29tbWl0dGVkLlxuXG4gICAgICAgIGlmIChmbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgX25leHQgPSB1bndpbmRXb3JrKGNvbXBsZXRlZFdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGV4cGlyYXRpb24gdGltZS5cblxuXG4gICAgICBpZiAoX25leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgY29tcGxldGluZyB0aGlzIHdvcmsgc3Bhd25lZCBuZXcgd29yaywgZG8gdGhhdCBuZXh0LiBXZSdsbCBjb21lXG4gICAgICAgIC8vIGJhY2sgaGVyZSBhZ2Fpbi5cbiAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgLy8gZnJvbSB0aGUgZWZmZWN0IHRhZy5cbiAgICAgICAgX25leHQuZmxhZ3MgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gX25leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpOyAvLyBJbmNsdWRlIHRoZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gZmFpbGVkIGNoaWxkcmVuIGJlZm9yZSBjb250aW51aW5nLlxuXG4gICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gdG8gdGhlIHBhcmVudFxuXG5cbiAgICBjb21wbGV0ZWRXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yaykge1xuICBpZiAoIC8vIFRPRE86IE1vdmUgdGhpcyBjaGVjayBvdXQgb2YgdGhlIGhvdCBwYXRoIGJ5IG1vdmluZyBgcmVzZXRDaGlsZExhbmVzYFxuICAvLyB0byBzd2l0Y2ggc3RhdGVtZW50IGluIGBjb21wbGV0ZVdvcmtgLlxuICAoY29tcGxldGVkV29yay50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCB8fCBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgIWluY2x1ZGVzU29tZUxhbmUoc3VidHJlZVJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSAmJiAoY29tcGxldGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9uZW50IGFyZSBoaWRkZW4uIERvbid0IGJ1YmJsZSB0aGVpclxuICAgIC8vIGV4cGlyYXRpb24gdGltZXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0NoaWxkTGFuZXMgPSBOb0xhbmVzOyAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cblxuICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAvLyBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgLy8gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91c1xuICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuXG4gICAgdmFyIHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucyA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsIHx8IGNvbXBsZXRlZFdvcmsuY2hpbGQgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkO1xuICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcblxuICAgICAgaWYgKHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucykge1xuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSB0cmVlQmFzZUR1cmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIHZhciBfY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKF9jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQubGFuZXMsIF9jaGlsZC5jaGlsZExhbmVzKSk7XG4gICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZWRXb3JrLmNoaWxkTGFuZXMgPSBuZXdDaGlsZExhbmVzO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QpIHtcbiAgdmFyIHJlbmRlclByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBjb21taXRSb290SW1wbC5iaW5kKG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgZG8ge1xuICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgIC8vIG1lYW5zIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIHNvbWV0aW1lcyByZXN1bHQgaW4gYWRkaXRpb25hbFxuICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNaWdodCBiZSBiZXR0ZXIgaWYgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIGRpZCBub3QgYXV0b21hdGljYWxseVxuICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfSB3aGlsZSAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpO1xuXG4gIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgdmFyIGxhbmVzID0gcm9vdC5maW5pc2hlZExhbmVzO1xuXG4gIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKGZpbmlzaGVkV29yayAhPT0gcm9vdC5jdXJyZW50KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7IC8vIFVwZGF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGVuZGluZyB0aW1lcyBvbiB0aGlzIHJvb3QuIFRoZSBuZXcgZmlyc3RcbiAgLy8gcGVuZGluZyB0aW1lIGlzIHdoYXRldmVyIGlzIGxlZnQgb24gdGhlIHJvb3QgZmliZXIuXG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhmaW5pc2hlZFdvcmsubGFuZXMsIGZpbmlzaGVkV29yay5jaGlsZExhbmVzKTtcbiAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcyk7IC8vIENsZWFyIGFscmVhZHkgZmluaXNoZWQgZGlzY3JldGUgdXBkYXRlcyBpbiBjYXNlIHRoYXQgYSBsYXRlciBjYWxsIG9mXG4gIC8vIGBmbHVzaERpc2NyZXRlVXBkYXRlc2Agc3RhcnRzIGEgdXNlbGVzcyByZW5kZXIgcGFzcyB3aGljaCBtYXkgY2FuY2Vsc1xuICAvLyBhIHNjaGVkdWxlZCB0aW1lb3V0LlxuXG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgaWYgKCFoYXNEaXNjcmV0ZUxhbmVzKHJlbWFpbmluZ0xhbmVzKSAmJiByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmhhcyhyb290KSkge1xuICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5kZWxldGUocm9vdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIH0gLy8gR2V0IHRoZSBsaXN0IG9mIGVmZmVjdHMuXG5cblxuICB2YXIgZmlyc3RFZmZlY3Q7XG5cbiAgaWYgKGZpbmlzaGVkV29yay5mbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAvLyBBIGZpYmVyJ3MgZWZmZWN0IGxpc3QgY29uc2lzdHMgb25seSBvZiBpdHMgY2hpbGRyZW4sIG5vdCBpdHNlbGYuIFNvIGlmXG4gICAgLy8gdGhlIHJvb3QgaGFzIGFuIGVmZmVjdCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhlXG4gICAgLy8gcmVzdWx0aW5nIGxpc3QgaXMgdGhlIHNldCB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgcm9vdCdzIHBhcmVudCwgaWYgaXRcbiAgICAvLyBoYWQgb25lOyB0aGF0IGlzLCBhbGwgdGhlIGVmZmVjdHMgaW4gdGhlIHRyZWUgaW5jbHVkaW5nIHRoZSByb290LlxuICAgIGlmIChmaW5pc2hlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gZWZmZWN0IG9uIHRoZSByb290LlxuICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICB9XG5cbiAgaWYgKGZpcnN0RWZmZWN0ICE9PSBudWxsKSB7XG5cbiAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgLy8gb2YgdGhlIGVmZmVjdCBsaXN0IGZvciBlYWNoIHBoYXNlOiBhbGwgbXV0YXRpb24gZWZmZWN0cyBjb21lIGJlZm9yZSBhbGxcbiAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgLy8gc3RhdGUgb2YgdGhlIGhvc3QgdHJlZSByaWdodCBiZWZvcmUgd2UgbXV0YXRlIGl0LiBUaGlzIGlzIHdoZXJlXG4gICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gcHJlcGFyZUZvckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pO1xuICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cywgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTsgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSBpbnN0YW5jZSBmaWJlclxuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21taXQgdGltZSB0byBiZSBzaGFyZWQgYnkgYWxsIFByb2ZpbGVycyBpbiB0aGlzXG4gICAgICAvLyBiYXRjaC4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBtdXRhdGlvbiBwaGFzZSwgd2hlcmUgd2UgbXV0YXRlIHRoZSBob3N0IHRyZWUuXG5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdE11dGF0aW9uRWZmZWN0cywgbnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHRyZWUgaXMgbm93IHRoZSBjdXJyZW50IHRyZWUuIFRoaXMgbXVzdCBjb21lIGFmdGVyXG4gICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQsIGJ1dCBiZWZvcmUgdGhlIGxheW91dCBwaGFzZSwgc28gdGhhdCB0aGUgZmluaXNoZWRcbiAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuICAgIC8vIHRoZSBob3N0IHRyZWUgYWZ0ZXIgaXQncyBiZWVuIG11dGF0ZWQuIFRoZSBpZGlvbWF0aWMgdXNlIGNhc2UgZm9yIHRoaXMgaXNcbiAgICAvLyBsYXlvdXQsIGJ1dCBjbGFzcyBjb21wb25lbnQgbGlmZWN5Y2xlcyBhbHNvIGZpcmUgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnMuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRMYXlvdXRFZmZlY3RzLCBudWxsLCByb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yMiA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcjIpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIG5leHRFZmZlY3QgPSBudWxsOyAvLyBUZWxsIFNjaGVkdWxlciB0byB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgc28gdGhlIGJyb3dzZXIgaGFzIGFuXG4gICAgLy8gb3Bwb3J0dW5pdHkgdG8gcGFpbnQuXG5cbiAgICByZXF1ZXN0UGFpbnQoKTtcblxuICAgIHtcbiAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHtcbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5TGV2ZWw7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgZWZmZWN0IGNoYWluIGF0IHRoaXMgcG9pbnQgc28gbGV0J3MgY2xlYXIgdGhlXG4gICAgLy8gbmV4dEVmZmVjdCBwb2ludGVycyB0byBhc3Npc3Qgd2l0aCBHQy4gSWYgd2UgaGF2ZSBwYXNzaXZlIGVmZmVjdHMsIHdlJ2xsXG4gICAgLy8gY2xlYXIgdGhpcyBpbiBmbHVzaFBhc3NpdmVFZmZlY3RzLlxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICBuZXh0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICBpZiAobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKG5leHRFZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBuZXh0RWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gICAgfVxuICB9IC8vIFJlYWQgdGhpcyBhZ2Fpbiwgc2luY2UgYW4gZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhlcmUncyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3RcblxuICBpZiAocmVtYWluaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyO1xuICAgICAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBpcmF0aW9uVGltZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZXNbaV0sIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzLCB0aGVuIHdlIGNhbiBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgZmx1c2hlZC5cbiAgICAgIC8vIFdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciByZW1haW5pbmcgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQsXG4gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHByZW1hdHVyZWx5IHNpZ25hbCBjb21wbGV0ZSBmb3IgaW50ZXJhY3Rpb25zIHdoZW4gdGhlcmUncyBlLmcuIGhpZGRlbiB3b3JrLlxuICAgICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBTeW5jTGFuZSkge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvb3Qgc3luY2hyb25vdXNseSByZS1yZW5kZXJzIHdpdGhvdXRcbiAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgfVxuXG4gIG9uQ29tbWl0Um9vdChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICB7XG4gICAgb25Db21taXRSb290JDEoKTtcbiAgfSAvLyBBbHdheXMgY2FsbCB0aGlzIGJlZm9yZSBleGl0aW5nIGBjb21taXRSb290YCwgdG8gZW5zdXJlIHRoYXQgYW55XG4gIC8vIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QgaXMgc2NoZWR1bGVkLlxuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgX2Vycm9yMyA9IGZpcnN0VW5jYXVnaHRFcnJvcjtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHRocm93IF9lcnJvcjM7XG4gIH1cblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gYSBSZWFjdERPTS5yZW5kZXItZWQgcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMuIFRoZSBjb21taXQgZmlyZWRcbiAgICAvLyBzeW5jaHJvbm91c2x5LCBidXQgbGF5b3V0IHVwZGF0ZXMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmRcbiAgICAvLyBvZiB0aGUgYmF0Y2guXG5cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIXNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciAmJiBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgIT09IG51bGwpIHtcbiAgICAgIGlmICgobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICBpZiAoZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIG91dCBvZiB0aGUgaG90IHBhdGggdXNpbmcgYSBkZWRpY2F0ZWQgZWZmZWN0IHRhZy5cbiAgICAgICAgaWYgKG5leHRFZmZlY3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBuZXh0RWZmZWN0KSAmJiBkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgcGFzc2l2ZSBlZmZlY3RzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGZsdXNoIGF0XG4gICAgICAvLyB0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkuXG4gICAgICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBidWxrIG9mIHRoaXMgZnVuY3Rpb24gdG8gY29tbWl0V29yay5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERldGFjaFJlZihjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudCBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCBwbGFjZW1lbnQsXG4gICAgLy8gdXBkYXRlcywgYW5kIGRlbGV0aW9ucy4gVG8gYXZvaWQgbmVlZGluZyB0byBhZGQgYSBjYXNlIGZvciBldmVyeSBwb3NzaWJsZVxuICAgIC8vIGJpdG1hcCB2YWx1ZSwgd2UgcmVtb3ZlIHRoZSBzZWNvbmRhcnkgZWZmZWN0cyBmcm9tIHRoZSBlZmZlY3QgdGFnIGFuZFxuICAgIC8vIHN3aXRjaCBvbiB0aGF0IHZhbHVlLlxuXG5cbiAgICB2YXIgcHJpbWFyeUZsYWdzID0gZmxhZ3MgJiAoUGxhY2VtZW50IHwgVXBkYXRlIHwgRGVsZXRpb24gfCBIeWRyYXRpbmcpO1xuXG4gICAgc3dpdGNoIChwcmltYXJ5RmxhZ3MpIHtcbiAgICAgIGNhc2UgUGxhY2VtZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG4gICAgICAgICAgLy8gVE9ETzogZmluZERPTU5vZGUgZG9lc24ndCByZWx5IG9uIHRoaXMgYW55IG1vcmUgYnV0IGlzTW91bnRlZCBkb2VzXG4gICAgICAgICAgLy8gYW5kIGlzTW91bnRlZCBpcyBkZXByZWNhdGVkIGFueXdheSBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBraWxsIHRoaXMuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQbGFjZW1lbnRBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBQbGFjZW1lbnRcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZzpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZ0FuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZzsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQyID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDIsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9jdXJyZW50MyA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQzLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIERlbGV0aW9uOlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb24ocm9vdCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0cyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIChVcGRhdGUgfCBDYWxsYmFjaykpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICBjb21taXRMaWZlQ3ljbGVzKHJvb3QsIGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIC8vIFJldHVybnMgd2hldGhlciBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLlxuICBpZiAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgIT09IE5vUHJpb3JpdHkkMSkge1xuICAgIHZhciBwcmlvcml0eUxldmVsID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xuXG4gICAge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwsIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICB7XG4gICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIH1cbiAgfVxuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlKGVmZmVjdCkge1xuICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHM7XG4gIHZhciBsYW5lcyA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzO1xuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQUxMIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3QgZGVzdHJveSBmdW5jdGlvbnMgYXJlIGNhbGxlZFxuICAvLyBiZWZvcmUgQU5ZIHBhc3NpdmUgZWZmZWN0IGNyZWF0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cbiAgLy8gT3RoZXJ3aXNlIGVmZmVjdHMgaW4gc2libGluZyBjb21wb25lbnRzIG1pZ2h0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuXG4gIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgbWF5IHVuaW50ZW50aW9uYWxseSBvdmVycmlkZSBhIHJlZlxuICAvLyB2YWx1ZSBzZXQgYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQuXG4gIC8vIExheW91dCBlZmZlY3RzIGhhdmUgdGhlIHNhbWUgY29uc3RyYWludC5cbiAgLy8gRmlyc3QgcGFzczogRGVzdHJveSBzdGFsZSBwYXNzaXZlIGVmZmVjdHMuXG5cbiAgdmFyIHVubW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bm1vdW50RWZmZWN0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBfZWZmZWN0ID0gdW5tb3VudEVmZmVjdHNbaV07XG4gICAgdmFyIGZpYmVyID0gdW5tb3VudEVmZmVjdHNbaSArIDFdO1xuICAgIHZhciBkZXN0cm95ID0gX2VmZmVjdC5kZXN0cm95O1xuICAgIF9lZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgIHtcbiAgICAgIGZpYmVyLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKGZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFNlY29uZCBwYXNzOiBDcmVhdGUgbmV3IHBhc3NpdmUgZWZmZWN0cy5cblxuXG4gIHZhciBtb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb3VudEVmZmVjdHMubGVuZ3RoOyBfaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QyID0gbW91bnRFZmZlY3RzW19pXTtcbiAgICB2YXIgX2ZpYmVyID0gbW91bnRFZmZlY3RzW19pICsgMV07XG5cbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoX2ZpYmVyKTtcblxuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZSwgbnVsbCwgX2VmZmVjdDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICBpZiAoIShfZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9lcnJvcjQgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoX2ZpYmVyLCBfZXJyb3I0KTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG4gIH0gLy8gTm90ZTogVGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzIG9uIHRoZSByb290IGZpYmVyXG4gIC8vIGJlY2F1c2UgdGhlIHJvb3QgaXMgbm90IHBhcnQgb2YgaXRzIG93biBlZmZlY3QgbGlzdC5cbiAgLy8gVGhpcyBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuXG4gIHZhciBlZmZlY3QgPSByb290LmN1cnJlbnQuZmlyc3RFZmZlY3Q7XG5cbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IGVmZmVjdC5uZXh0RWZmZWN0OyAvLyBSZW1vdmUgbmV4dEVmZmVjdCBwb2ludGVyIHRvIGFzc2lzdCBHQ1xuXG4gICAgZWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgaWYgKGVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhlZmZlY3QpO1xuICAgIH1cblxuICAgIGVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICB9XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpOyAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAvLyBleGNlZWRzIHRoZSBsaW1pdCwgd2UnbGwgZmlyZSBhIHdhcm5pbmcuXG5cbiAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwgPyAwIDogbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ICsgMTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbaW5zdGFuY2VdKTtcbiAgfSBlbHNlIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICBpZiAoIWhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG52YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICB2YXIgdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gIGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCB1cGRhdGUpO1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHJvb3RGaWJlciwgU3luY0xhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Ioc291cmNlRmliZXIsIGVycm9yKSB7XG4gIGlmIChzb3VyY2VGaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gRXJyb3Igd2FzIHRocm93biBhdCB0aGUgcm9vdC4gVGhlcmUgaXMgbm8gcGFyZW50LCBzbyB0aGUgcm9vdFxuICAgIC8vIGl0c2VsZiBzaG91bGQgY2FwdHVyZSBpdC5cbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KGZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIGN0b3IgPSBmaWJlci50eXBlO1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgICAvLyBXZSBjYW4ndCBzY2hlZHVsZSBhbnkgZm9sbG93IHVwIHdvcmsgZm9yIHRoZSByb290IGJlY2F1c2UgdGhlIGZpYmVyIGlzIGFscmVhZHkgdW5tb3VudGVkLFxuICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgbG9nLW9ubHkgYm91bmRhcnkgc28gdGhlIGVycm9yIGlzbid0IHN3YWxsb3dlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRPRE8gVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGJhbmRhaWQgZm9yIHRoZSBvbGQgcmVjb25jaWxlciBmb3JrLlxuICAgICAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzcGVjaWFsIGNhc2Ugb25jZSB0aGUgbmV3IGZvcmsgaXMgbWVyZ2VkLlxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yVG9JZ25vcmUpIHsvLyBUT0RPIElnbm9yZSB0aGlzIGVycm9yPyBSZXRocm93IGl0P1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGtpbmQgb2YgYW4gZWRnZSBjYXNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcyk7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJiBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFdlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0aGlzIHJlbmRlci4gVGhpcyBzaG91bGQgbWlycm9yXG4gICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAvLyB3ZSBzaG91bGQgcHJvYmFibHkgbmV2ZXIgcmVzdGFydC5cbiAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmIG5vdygpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKSB7XG4gICAgICAvLyBSZXN0YXJ0IGZyb20gdGhlIHJvb3QuXG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY2FuJ3QgcmVzdGFydCByaWdodCBub3csIHdlIG1pZ2h0IGdldCBhblxuICAgICAgLy8gb3Bwb3J0dW5pdHkgbGF0ZXIuIFNvIHdlIG1hcmsgdGhpcyByZW5kZXIgYXMgaGF2aW5nIGEgcGluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcywgcGluZ2VkTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcGluZ2VkTGFuZXMpO1xufVxuXG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIC8vIFRoZSBib3VuZGFyeSBmaWJlciAoYSBTdXNwZW5zZSBjb21wb25lbnQgb3IgU3VzcGVuc2VMaXN0IGNvbXBvbmVudClcbiAgLy8gcHJldmlvdXNseSB3YXMgcmVuZGVyZWQgaW4gaXRzIGZhbGxiYWNrIHN0YXRlLiBPbmUgb2YgdGhlIHByb21pc2VzIHRoYXRcbiAgLy8gc3VzcGVuZGVkIGl0IGhhcyByZXNvbHZlZCwgd2hpY2ggbWVhbnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgdHJlZSB3YXNcbiAgLy8gbGlrZWx5IHVuYmxvY2tlZC4gVHJ5IHJlbmRlcmluZyBhZ2FpbiwgYXQgYSBuZXcgZXhwaXJhdGlvbiB0aW1lLlxuICBpZiAocmV0cnlMYW5lID09PSBOb0xhbmUpIHtcbiAgICByZXRyeUxhbmUgPSByZXF1ZXN0UmV0cnlMYW5lKGJvdW5kYXJ5RmliZXIpO1xuICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHJldHJ5TGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmV0cnlMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IE5vTGFuZTsgLy8gRGVmYXVsdFxuXG4gIHZhciByZXRyeUNhY2hlO1xuXG4gIHtcbiAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gIH1cblxuICBpZiAocmV0cnlDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufSAvLyBDb21wdXRlcyB0aGUgbmV4dCBKdXN0IE5vdGljZWFibGUgRGlmZmVyZW5jZSAoSk5EKSBib3VuZGFyeS5cbi8vIFRoZSB0aGVvcnkgaXMgdGhhdCBhIHBlcnNvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS5cbi8vIFRoZXJlZm9yZSwgaWYgd2Ugd2FpdCBhIGJpdCBsb25nZXIgdGhhbiBuZWNlc3NhcnkgdGhhdCB3b24ndCB0cmFuc2xhdGUgdG8gYSBub3RpY2VhYmxlXG4vLyBkaWZmZXJlbmNlIGluIHRoZSBleHBlcmllbmNlLiBIb3dldmVyLCB3YWl0aW5nIGZvciBsb25nZXIgbWlnaHQgbWVhbiB0aGF0IHdlIGNhbiBhdm9pZFxuLy8gc2hvd2luZyBhbiBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gVGhlIGxvbmdlciB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkLCB0aGUgaGFyZGVyIGl0XG4vLyBpcyB0byB0ZWxsIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuIFRoZXJlZm9yZSwgdGhlIGxvbmdlciB3ZSd2ZSBhbHJlYWR5IHdhaXRlZCxcbi8vIHRoZSBsb25nZXIgd2UgY2FuIHdhaXQgYWRkaXRpb25hbGx5LiBBdCBzb21lIHBvaW50IHdlIGhhdmUgdG8gZ2l2ZSB1cCB0aG91Z2guXG4vLyBXZSBwaWNrIGEgdHJhaW4gbW9kZWwgd2hlcmUgdGhlIG5leHQgYm91bmRhcnkgY29tbWl0cyBhdCBhIGNvbnNpc3RlbnQgc2NoZWR1bGUuXG4vLyBUaGVzZSBwYXJ0aWN1bGFyIG51bWJlcnMgYXJlIHZhZ3VlIGVzdGltYXRlcy4gV2UgZXhwZWN0IHRvIGFkanVzdCB0aGVtIGJhc2VkIG9uIHJlc2VhcmNoLlxuXG5mdW5jdGlvbiBqbmQodGltZUVsYXBzZWQpIHtcbiAgcmV0dXJuIHRpbWVFbGFwc2VkIDwgMTIwID8gMTIwIDogdGltZUVsYXBzZWQgPCA0ODAgPyA0ODAgOiB0aW1lRWxhcHNlZCA8IDEwODAgPyAxMDgwIDogdGltZUVsYXBzZWQgPCAxOTIwID8gMTkyMCA6IHRpbWVFbGFwc2VkIDwgMzAwMCA/IDMwMDAgOiB0aW1lRWxhcHNlZCA8IDQzMjAgPyA0MzIwIDogY2VpbCh0aW1lRWxhcHNlZCAvIDE5NjApICogMTk2MDtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCkge1xuICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCByZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIGNvbXBvbmVudERpZFVwZGF0ZS4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgbmVzdGVkIHVwZGF0ZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuXG4gICAgICBlcnJvcignTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gV2UgbGV0IHRoZSBvdGhlciB3YXJuaW5nIGFib3V0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGRlYWwgd2l0aCB0aGlzIG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWJlci5tb2RlICYgKEJsb2NraW5nTW9kZSB8IENvbmN1cnJlbnRNb2RlKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCAmJiB0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFwiICsgJ1RoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0ICcgKyAnYXN5bmNocm9ub3VzbHkgbGF0ZXIgY2FsbHMgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvICcgKyAndXNlRWZmZWN0IGluc3RlYWQuJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgdW5tb3VudHMgZm9yIHRoaXMgRmliZXIsXG4gICAgLy8gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZXkgd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhpcyB1cGRhdGUuXG5cblxuICAgIGlmICgoZmliZXIuZmxhZ3MgJiBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYpICE9PSBOb0ZsYWdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzKSA7IGVsc2Uge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJywgdGFnID09PSBDbGFzc0NvbXBvbmVudCA/ICd0aGUgY29tcG9uZW50V2lsbFVubW91bnQgbWV0aG9kJyA6ICdhIHVzZUVmZmVjdCBjbGVhbnVwIGZ1bmN0aW9uJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgYmVnaW5Xb3JrJDE7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yICE9PSBudWxsICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIERvbid0IHJlcGxheSBwcm9taXNlcy4gVHJlYXQgZXZlcnl0aGluZyBlbHNlIGxpa2UgYW4gZXJyb3IuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9IC8vIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgd2l0aCBoYW5kbGVFcnJvcjsgYW55IGNoYW5nZXMgaGVyZSBtdXN0IGhhdmVcbiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0aGVyZS5cblxuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAvLyBzYW1lIGZpYmVyIGFnYWluLlxuICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAoIHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG5cbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBiZWdpbldvcmssIG51bGwsIGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpOyAvLyBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBzb21ldGltZXMgc2V0cyBhbiBleHBhbmRvIGBfc3VwcHJlc3NMb2dnaW5nYC5cbiAgICAgICAgLy8gUmV0aHJvdyB0aGlzIGVycm9yIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG9uZS5cblxuICAgICAgICB0aHJvdyByZXBsYXlFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHJlYWNoYWJsZSBpZiB0aGUgcmVuZGVyIHBoYXNlIGlzIGltcHVyZS5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICFnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSkge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUgPSB3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgJyArICdkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCAnICsgJ2ZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXInLCBzZXRTdGF0ZUNvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzICcgKyAnd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSAnICsgJ2Z1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4nKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gYSAnc2hhcmVkJyB2YXJpYWJsZSB0aGF0IGNoYW5nZXMgd2hlbiBhY3QoKSBvcGVucy9jbG9zZXMgaW4gdGVzdHMuXG5cblxudmFyIElzVGhpc1JlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcbmZ1bmN0aW9uIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcikge1xuICB7XG4gICAgaWYgKCBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSB0cnVlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgIT09IHRydWUpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSB3cm9uZyBhY3QoKSBhcm91bmQgeW91ciB0ZXN0IGludGVyYWN0aW9ucy5cXG5cIiArICdCZSBzdXJlIHRvIHVzZSB0aGUgbWF0Y2hpbmcgdmVyc2lvbiBvZiBhY3QoKSBjb3JyZXNwb25kaW5nIHRvIHlvdXIgcmVuZGVyZXI6XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtZG9tOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IHthY3R9IGZyJyArIFwib20gJ3JlYWN0LWRvbS90ZXN0LXV0aWxzJztcXG5cIiArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pO1xcblxcbicgKyAnLy8gZm9yIHJlYWN0LXRlc3QtcmVuZGVyZXI6XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQgVGVzdFJlbmRlcmVyIGZyJyArIFwib20gcmVhY3QtdGVzdC1yZW5kZXJlcic7XFxuXCIgKyAnY29uc3Qge2FjdH0gPSBUZXN0UmVuZGVyZXI7XFxuJyArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pOycpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpICE9PSBOb01vZGUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgcmFuIGFuIGVmZmVjdCwgYnV0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYgPSB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVY7IC8vIEluIHRlc3RzLCB3ZSB3YW50IHRvIGVuZm9yY2UgYSBtb2NrZWQgc2NoZWR1bGVyLlxuXG52YXIgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSBmYWxzZTsgLy8gVE9ETyBCZWZvcmUgd2UgcmVsZWFzZSBjb25jdXJyZW50IG1vZGUsIHJldmlzaXQgdGhpcyBhbmQgZGVjaWRlIHdoZXRoZXIgYSBtb2NrZWRcbi8vIHNjaGVkdWxlciBpcyB0aGUgYWN0dWFsIHJlY29tbWVuZGF0aW9uLiBUaGUgYWx0ZXJuYXRpdmUgY291bGQgYmUgYSB0ZXN0aW5nIGJ1aWxkLFxuLy8gYSBuZXcgbGliLCBvciB3aGF0ZXZlcjsgd2UgZHVubm8ganVzdCB5ZXQuIFRoaXMgbWVzc2FnZSBpcyBmb3IgZWFybHkgYWRvcHRlcnNcbi8vIHRvIGdldCB0aGVpciB0ZXN0cyByaWdodC5cblxuZnVuY3Rpb24gd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9PT0gZmFsc2UgJiYgU2NoZWR1bGVyLnVuc3RhYmxlX2ZsdXNoQWxsV2l0aG91dEFzc2VydGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSB8fCBmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdJbiBDb25jdXJyZW50IG9yIFN5bmMgbW9kZXMsIHRoZSBcInNjaGVkdWxlclwiIG1vZHVsZSBuZWVkcyB0byBiZSBtb2NrZWQgJyArICd0byBndWFyYW50ZWUgY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIHRlc3RzIGFuZCBicm93c2Vycy4gJyArICdGb3IgZXhhbXBsZSwgd2l0aCBqZXN0OiBcXG4nICsgLy8gQnJlYWsgdXAgcmVxdWlyZXMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlXCIgKyBcIignc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2snKSk7XFxuXFxuXCIgKyAnRm9yIG1vcmUgaW5mbywgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL21vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKSB7XG4gIC8vIEludGVyYWN0aW9uIHRocmVhZHMgYXJlIHVuaXF1ZSBwZXIgcm9vdCBhbmQgZXhwaXJhdGlvbiB0aW1lLlxuICAvLyBOT1RFOiBJbnRlbnRpb25hbGx5IHVuc291bmQgY2FzdC4gQWxsIHRoYXQgbWF0dGVycyBpcyB0aGF0IGl0J3MgYSBudW1iZXJcbiAgLy8gYW5kIGl0IHJlcHJlc2VudHMgYSBiYXRjaCBvZiB3b3JrLiBDb3VsZCBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIGluc3RlYWQsXG4gIC8vIGJ1dCBtZWggdGhpcyBpcyBmaW5lIGZvciBub3cuXG4gIHJldHVybiBsYW5lICogMTAwMCArIHJvb3QuaW50ZXJhY3Rpb25UaHJlYWRJRDtcbn1cblxuZnVuY3Rpb24gbWFya1NwYXduZWRXb3JrKGxhbmUpIHtcblxuICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPT09IG51bGwpIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IFtsYW5lXTtcbiAgfSBlbHNlIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlci5wdXNoKGxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIGludGVyYWN0aW9ucykge1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbnMgPSBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZ2V0KGxhbmUpO1xuXG4gICAgaWYgKHBlbmRpbmdJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGlmICghcGVuZGluZ0ludGVyYWN0aW9ucy5oYXMoaW50ZXJhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHByZXZpb3VzbHkgdW5zY2hlZHVsZWQgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5zZXQobGFuZSwgbmV3IFNldChpbnRlcmFjdGlvbnMpKTsgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cblxuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpIHtcblxuICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpIHtcbiAgLy8gd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCwgQW5kIHNvIHRoYXQgY2FzY2FkaW5nXG4gIC8vIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRMYW5lKSB7XG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIHNjaGVkdWxlZExhbmUpKSB7XG4gICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBvbiB0aGUgRmliZXJSb290IGZvciBhIGZldyByZWFzb25zOlxuICAvLyBXZSBjYW4gcmUtdXNlIGl0IGluIGhvdCBmdW5jdGlvbnMgbGlrZSBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QoKVxuICAvLyB3aXRob3V0IGhhdmluZyB0byByZWNhbGN1bGF0ZSBpdC4gV2Ugd2lsbCBhbHNvIHVzZSBpdCBpbiBjb21taXRXb3JrKCkgdG9cbiAgLy8gcGFzcyB0byBhbnkgUHJvZmlsZXIgb25SZW5kZXIoKSBob29rcy4gVGhpcyBhbHNvIHByb3ZpZGVzIERldlRvb2xzIHdpdGggYVxuICAvLyB3YXkgdG8gYWNjZXNzIGl0IHdoZW4gdGhlIG9uQ29tbWl0Um9vdCgpIGhvb2sgaXMgY2FsbGVkLlxuXG4gIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBpbnRlcmFjdGlvbnM7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG4gIHZhciByZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0ID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdWJzY3JpYmVyO1xuXG4gIHRyeSB7XG4gICAgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgICAvLyBGSVhNRTogTW9yZSB0aGFuIG9uZSBsYW5lIGNhbiBmaW5pc2ggaW4gYSBzaW5nbGUgY29tbWl0LlxuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChyb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFyIGNvbXBsZXRlZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgcGVuZGluZyBNYXAuXG4gICAgLy8gVW5sZXNzIHRoZSByZW5kZXIgd2FzIHN1c3BlbmRlZCBvciBjYXNjYWRpbmcgd29yayB3YXMgc2NoZWR1bGVkLFxuICAgIC8vIEluIHdoaWNoIGNhc2XigJMgbGVhdmUgcGVuZGluZyBpbnRlcmFjdGlvbnMgdW50aWwgdGhlIHN1YnNlcXVlbnQgcmVuZGVyLlxuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBsYW5lKSB7XG4gICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgLy8gSWYgdGhlcmUncyBzdGlsbCB3b3JrIGF0IHRoZSBjdXJyZW50IHByaW9yaXR5LFxuICAgICAgLy8gVGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igc3VzcGVuc2UgZGF0YS5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0LCBsYW5lKSkge1xuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZGVsZXRlKGxhbmUpO1xuICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gYGFjdGAgdGVzdGluZyBBUElcblxuZnVuY3Rpb24gc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkge1xuICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICByZXR1cm4gIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID4gMDtcbn1cbi8vIHNvIHdlIGNhbiB0ZWxsIGlmIGFueSBhc3luYyBhY3QoKSBjYWxscyB0cnkgdG8gcnVuIGluIHBhcmFsbGVsLlxuXG5cbnZhciBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA9IDA7XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKSB7XG4gIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xufVxuXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShmaWJlciwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoY2hpbGQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoc2libGluZywgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHR5cGVzID0gbmV3IFNldChmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgIH0pKTtcbiAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShmaWJlciwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlcy5oYXMoY2FuZGlkYXRlVHlwZSkpIHtcbiAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaCBkZWVwZXIgYmVjYXVzZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2l2aW5nXG4gICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGNoaWxkLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShzaWJsaW5nLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuXG4gICAgaWYgKGZvdW5kSG9zdEluc3RhbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LicpO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIG1hdGNoLlxuICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbntcbiAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBhYm91dCBiYWQgcG9seWZpbGxzXG4gICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICB9XG59XG5cbnZhciBkZWJ1Z0NvdW50ZXIgPSAxO1xuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7IC8vIEZpYmVyXG5cbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIHRoaXMudXBkYXRlUXVldWUgPSBudWxsO1xuICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7IC8vIEVmZmVjdHNcblxuICB0aGlzLmZsYWdzID0gTm9GbGFncztcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG5cbiAge1xuICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgZG9uZSB0byBhdm9pZCBhIHY4IHBlcmZvcm1hbmNlIGNsaWZmLlxuICAgIC8vXG4gICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgYmVsb3cgdG8gc21pcyBhbmQgbGF0ZXIgdXBkYXRpbmcgdGhlbSB3aXRoXG4gICAgLy8gZG91YmxlIHZhbHVlcyB3aWxsIGNhdXNlIEZpYmVycyB0byBlbmQgdXAgaGF2aW5nIHNlcGFyYXRlIHNoYXBlcy5cbiAgICAvLyBUaGlzIGJlaGF2aW9yL2J1ZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggT2JqZWN0LnByZXZlbnRFeHRlbnNpb24oKS5cbiAgICAvLyBGb3J0dW5hdGVseSB0aGlzIG9ubHkgaW1wYWN0cyBERVYgYnVpbGRzLlxuICAgIC8vIFVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgUmVhY3QgdW51c2FibHkgc2xvdyBmb3Igc29tZSBhcHBsaWNhdGlvbnMuXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcywgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGJlbG93IHdpdGggZG91Ymxlcy5cbiAgICAvL1xuICAgIC8vIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQzNjVcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04NTM4XG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjsgLy8gSXQncyBva2F5IHRvIHJlcGxhY2UgdGhlIGluaXRpYWwgZG91YmxlcyB3aXRoIHNtaXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cblxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICB9XG5cbiAge1xuICAgIC8vIFRoaXMgaXNuJ3QgZGlyZWN0bHkgdXNlZCBidXQgaXMgaGFuZHkgZm9yIGRlYnVnZ2luZyBpbnRlcm5hbHM6XG4gICAgdGhpcy5fZGVidWdJRCA9IGRlYnVnQ291bnRlcisrO1xuICAgIHRoaXMuX2RlYnVnU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgIGlmICghaGFzQmFkTWFwUG9seWZpbGwgJiYgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbi8vIHBsZWFzZSBlbnN1cmUgd2UgZG8gdGhlIGZvbGxvd2luZzpcbi8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4vLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3Rcbi8vICAgIG5ldmVyIGlubGluZWQgcHJvcGVybHkgaW4gc3RhdGljIGNvbXBpbGVycy5cbi8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4vLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4vLyAzKSBXZSBtaWdodCB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCB1c2luZyBudW1lcmljIGtleXMgc2luY2UgdGhleSBhcmUgZWFzaWVyXG4vLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4vLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbi8vICAgIGlzIGZhc3Rlci5cbi8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuLy8gICAgY29tcGF0aWJsZS5cblxuXG52YXIgY3JlYXRlRmliZXIgPSBmdW5jdGlvbiAodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB0aGUgc2hhcGVzIGFyZSBleGFjdCBoZXJlIGJ1dCBGbG93IGRvZXNuJ3QgbGlrZSBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmICFzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkgPyBDbGFzc0NvbXBvbmVudCA6IEZ1bmN0aW9uQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgcmV0dXJuIEZvcndhcmRSZWY7XG4gICAgfVxuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIHJldHVybiBNZW1vQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xufSAvLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZy5cblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gTm9GbGFnczsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgcmVzZXQsIHJhdGhlciB0aGFuIGNvcHksIGFjdHVhbER1cmF0aW9uICYgYWN0dWFsU3RhcnRUaW1lLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgIC8vIEJ1dCB3b3JrcyBmb3IgeWllbGRpbmcgKHRoZSBjb21tb24gY2FzZSkgYW5kIHNob3VsZCBzdXBwb3J0IHJlc3VtaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gIC8vIGJlIG5lY2Vzc2FyeSBidXQgdW5mb3J0dW5hdGVseSBtYW55IGNvZGUgcGF0aHMgcmVhZHMgZnJvbSB0aGUgd29ya0luUHJvZ3Jlc3NcbiAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAvLyBhdm9pZCBkb2luZyBhbm90aGVyIHJlY29uY2lsaWF0aW9uLlxuICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZyBidXQga2VlcCBhbnkgUGxhY2VtZW50IHRhZ3MsIHNpbmNlIHRoYXQncyBzb21ldGhpbmdcbiAgLy8gdGhhdCBjaGlsZCBmaWJlciBpcyBzZXR0aW5nLCBub3QgdGhlIHJlY29uY2lsaWF0aW9uLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICB9O1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIodGFnKSB7XG4gIHZhciBtb2RlO1xuXG4gIGlmICh0YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlIHwgQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIGlmICh0YWcgPT09IEJsb2NraW5nUm9vdCkge1xuICAgIG1vZGUgPSBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSBOb01vZGU7XG4gIH1cblxuICBpZiAoIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW504oCTXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG5rZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gRGVidWdUcmFjaW5nTW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IFN0cmljdE1vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU0NPUEVfVFlQRTpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQmxvY2s7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArICduYW1lZCBpbXBvcnRzLic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIG93bmVyID0gbnVsbDtcblxuICB7XG4gICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwga2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcyk7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBhcyBhIHByb3AnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihQcm9maWxlciwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCBQcm9maWxlTW9kZSk7IC8vIFRPRE86IFRoZSBQcm9maWxlciBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICBlZmZlY3REdXJhdGlvbjogMCxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgU3VzcGVuc2VDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcblxuICB7XG4gICAgLy8gVE9ETzogVGhlIFN1c3BlbnNlTGlzdENvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAgIC8vIGluc3RlYWQuXG4gICAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE9mZnNjcmVlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgT2Zmc2NyZWVuQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKExlZ2FjeUhpZGRlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgTGVnYWN5SGlkZGVuIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTsgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgZmliZXIudHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0UG9ydGFsLCBwZW5kaW5nUHJvcHMsIHBvcnRhbC5rZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgIC8vIFVzZWQgYnkgcGVyc2lzdGVudCB1cGRhdGVzXG4gICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICB9O1xuICByZXR1cm4gZmliZXI7XG59IC8vIFVzZWQgZm9yIHN0YXNoaW5nIFdJUCBwcm9wZXJ0aWVzIHRvIHJlcGxheSBmYWlsZWQgd29yayBpbiBERVYuXG5cbmZ1bmN0aW9uIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHRhcmdldCwgc291cmNlKSB7XG4gIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIEZpYmVyJ3MgaW5pdGlhbCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG92ZXJ3cml0dGVuLlxuICAgIC8vIFdlIG9ubHkgdXNlIGEgRmliZXIgdG8gZW5zdXJlIHRoZSBzYW1lIGhpZGRlbiBjbGFzcyBzbyBERVYgaXNuJ3Qgc2xvdy5cbiAgICB0YXJnZXQgPSBjcmVhdGVGaWJlcihJbmRldGVybWluYXRlQ29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSB3cml0dGVuIGFzIGEgbGlzdCBvZiBhbGwgcHJvcGVydGllcy5cbiAgLy8gV2UgdHJpZWQgdG8gdXNlIE9iamVjdC5hc3NpZ24oKSBpbnN0ZWFkIGJ1dCB0aGlzIGlzIGNhbGxlZCBpblxuICAvLyB0aGUgaG90dGVzdCBwYXRoLCBhbmQgT2JqZWN0LmFzc2lnbigpIHdhcyB0b28gc2xvdzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwMlxuICAvLyBUaGlzIGNvZGUgaXMgREVWLW9ubHkgc28gc2l6ZSBpcyBub3QgYSBjb25jZXJuLlxuXG5cbiAgdGFyZ2V0LnRhZyA9IHNvdXJjZS50YWc7XG4gIHRhcmdldC5rZXkgPSBzb3VyY2Uua2V5O1xuICB0YXJnZXQuZWxlbWVudFR5cGUgPSBzb3VyY2UuZWxlbWVudFR5cGU7XG4gIHRhcmdldC50eXBlID0gc291cmNlLnR5cGU7XG4gIHRhcmdldC5zdGF0ZU5vZGUgPSBzb3VyY2Uuc3RhdGVOb2RlO1xuICB0YXJnZXQucmV0dXJuID0gc291cmNlLnJldHVybjtcbiAgdGFyZ2V0LmNoaWxkID0gc291cmNlLmNoaWxkO1xuICB0YXJnZXQuc2libGluZyA9IHNvdXJjZS5zaWJsaW5nO1xuICB0YXJnZXQuaW5kZXggPSBzb3VyY2UuaW5kZXg7XG4gIHRhcmdldC5yZWYgPSBzb3VyY2UucmVmO1xuICB0YXJnZXQucGVuZGluZ1Byb3BzID0gc291cmNlLnBlbmRpbmdQcm9wcztcbiAgdGFyZ2V0Lm1lbW9pemVkUHJvcHMgPSBzb3VyY2UubWVtb2l6ZWRQcm9wcztcbiAgdGFyZ2V0LnVwZGF0ZVF1ZXVlID0gc291cmNlLnVwZGF0ZVF1ZXVlO1xuICB0YXJnZXQubWVtb2l6ZWRTdGF0ZSA9IHNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICB0YXJnZXQuZGVwZW5kZW5jaWVzID0gc291cmNlLmRlcGVuZGVuY2llcztcbiAgdGFyZ2V0Lm1vZGUgPSBzb3VyY2UubW9kZTtcbiAgdGFyZ2V0LmZsYWdzID0gc291cmNlLmZsYWdzO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5sYW5lcyA9IHNvdXJjZS5sYW5lcztcbiAgdGFyZ2V0LmNoaWxkTGFuZXMgPSBzb3VyY2UuY2hpbGRMYW5lcztcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAge1xuICAgIHRhcmdldC5hY3R1YWxEdXJhdGlvbiA9IHNvdXJjZS5hY3R1YWxEdXJhdGlvbjtcbiAgICB0YXJnZXQuYWN0dWFsU3RhcnRUaW1lID0gc291cmNlLmFjdHVhbFN0YXJ0VGltZTtcbiAgICB0YXJnZXQuc2VsZkJhc2VEdXJhdGlvbiA9IHNvdXJjZS5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHRhcmdldC50cmVlQmFzZUR1cmF0aW9uID0gc291cmNlLnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB0YXJnZXQuX2RlYnVnSUQgPSBzb3VyY2UuX2RlYnVnSUQ7XG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHRoaXMuZXZlbnRUaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gIHRoaXMucGVuZGluZ0xhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmV4cGlyZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMubXV0YWJsZVJlYWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuXG4gIHtcbiAgICB0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25UaHJlYWRJRCA9IHRyYWNpbmcudW5zdGFibGVfZ2V0VGhyZWFkSUQoKTtcbiAgICB0aGlzLm1lbW9pemVkSW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICAgIHRoaXMucGVuZGluZ0ludGVyYWN0aW9uTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEJsb2NraW5nUm9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVCbG9ja2luZ1Jvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExlZ2FjeVJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlTGVnYWN5Um9vdCgpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG5cblxuICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpO1xuICByb290LmN1cnJlbnQgPSB1bmluaXRpYWxpemVkRmliZXI7XG4gIHVuaW5pdGlhbGl6ZWRGaWJlci5zdGF0ZU5vZGUgPSByb290O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2ZXJzaW9uIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcgbWF0Y2hlcyB0aGUgb25lXG4vLyB0aGF0IGlzIGV2ZW50dWFsbHkgcmVhZCBkdXJpbmcgaHlkcmF0aW9uLlxuLy8gSWYgdGhleSBkb24ndCBtYXRjaCB0aGVyZSdzIGEgcG90ZW50aWFsIHRlYXIgYW5kIGEgZnVsbCBkZW9wdCByZW5kZXIgaXMgcmVxdWlyZWQuXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKSB7XG4gIHZhciBnZXRWZXJzaW9uID0gbXV0YWJsZVNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKG11dGFibGVTb3VyY2UuX3NvdXJjZSk7IC8vIFRPRE8gQ2xlYXIgdGhpcyBkYXRhIG9uY2UgYWxsIHBlbmRpbmcgaHlkcmF0aW9uIHdvcmsgaXMgZmluaXNoZWQuXG4gIC8vIFJldGFpbmluZyBpdCBmb3JldmVyIG1heSBpbnRlcmZlcmUgd2l0aCBHQy5cblxuICBpZiAocm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID09IG51bGwpIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBbbXV0YWJsZVNvdXJjZSwgdmVyc2lvbl07XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzO1xudmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG57XG4gIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCBDb21wb25lbnQsIHBhcmVudENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICsgT2JqZWN0LmtleXMoY29tcG9uZW50KSApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoaG9zdEZpYmVyKTtcblxuICAgICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIHJlbmRlcnMgU3RyaWN0TW9kZSBjaGlsZHJlbi4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIElkZWFsbHkgdGhpcyBzaG91bGQgcmVzZXQgdG8gcHJldmlvdXMgYnV0IHRoaXMgc2hvdWxkbid0IGJlIGNhbGxlZCBpblxuICAgICAgICAgIC8vIHJlbmRlciBhbmQgdGhlcmUncyBhbm90aGVyIHdhcm5pbmcgZm9yIHRoYXQgYW55d2F5LlxuICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIocHJldmlvdXNGaWJlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHJldHVybiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAge1xuICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudCQxID0gY29udGFpbmVyLmN1cnJlbnQ7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG5cbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihjdXJyZW50JDEpO1xuICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGN1cnJlbnQkMSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50JDEpO1xuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50LnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBlbGVtZW50XG4gIH07XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGVucXVldWVVcGRhdGUoY3VycmVudCQxLCB1cGRhdGUpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY3VycmVudCQxLCBsYW5lLCBldmVudFRpbWUpO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgdmFyIGNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyLmN1cnJlbnQ7XG5cbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgIHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lID0gaGlnaGVyUHJpb3JpdHlMYW5lKHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lLCByZXRyeUxhbmUpO1xuICB9XG59IC8vIEluY3JlYXNlcyB0aGUgcHJpb3JpdHkgb2YgdGhlbm5hYmxlcyB3aGVuIHRoZXkgcmVzb2x2ZSB3aXRoaW4gdGhpcyBib3VuZGFyeS5cblxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUpIHtcbiAgICBtYXJrUmV0cnlMYW5lSW1wbChhbHRlcm5hdGUsIHJldHJ5TGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBvdGhlciB0aGFuIHN5bmNocm9ub3VzbHkgZmx1c2ggaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDIocHJpb3JpdHksIGZuKSB7XG5cbiAgdHJ5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KHByaW9yaXR5KTtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhvc3RGaWJlci50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGUuaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbntcbiAgdmFyIGNvcHlXaXRoRGVsZXRlSW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aERlbGV0ZSA9IGZ1bmN0aW9uIChvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lSW1wbCA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBuZXdLZXkgPSBuZXdQYXRoW2luZGV4XTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIG9ialtvbGRLZXldLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKSB7XG4gICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleScpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgMCwgdmFsdWUpO1xuICB9O1xuXG4gIHZhciBmaW5kSG9vayA9IGZ1bmN0aW9uIChmaWJlciwgaWQpIHtcbiAgICAvLyBGb3Igbm93LCB0aGUgXCJpZFwiIG9mIHN0YXRlZnVsIGhvb2tzIGlzIGp1c3QgdGhlIHN0YXRlZnVsIGhvb2sgaW5kZXguXG4gICAgLy8gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgd2l0aCBlLmcuIG5lc3RlZCBob29rcy5cbiAgICB2YXIgY3VycmVudEhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRIb29rICE9PSBudWxsICYmIGlkID4gMCkge1xuICAgICAgY3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgaWQtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudEhvb2s7XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgZWRpdGFibGUgdmFsdWVzIGZvciB1c2VTdGF0ZSBhbmQgdXNlUmVkdWNlci5cblxuXG4gIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhTZXQoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aERlbGV0ZShob29rLm1lbW9pemVkU3RhdGUsIHBhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBwcm9wcyBmb3IgZnVuY3Rpb24gY29tcG9uZW50cywgZm9yd2FyZFJlZiwgbWVtbywgaG9zdCBjb21wb25lbnRzLCBldGMuXG5cblxuICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0KGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIHZhbHVlKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKGZpYmVyLm1lbW9pemVkUHJvcHMsIG9sZFBhdGgsIG5ld1BhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIGluamVjdEludGVybmFscyh7XG4gICAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWcuYnVuZGxlVHlwZSxcbiAgICB2ZXJzaW9uOiBkZXZUb29sc0NvbmZpZy52ZXJzaW9uLFxuICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyQ29uZmlnLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlOiBvdmVycmlkZUhvb2tTdGF0ZSxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICBvdmVycmlkZVByb3BzOiBvdmVycmlkZVByb3BzLFxuICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcixcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHwgZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAvLyBSZWFjdCBSZWZyZXNoXG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOiAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJlZnJlc2g6ICBzY2hlZHVsZVJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUm9vdDogIHNjaGVkdWxlUm9vdCAsXG4gICAgc2V0UmVmcmVzaEhhbmRsZXI6ICBzZXRSZWZyZXNoSGFuZGxlciAsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgIGdldEN1cnJlbnRGaWJlcjogIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzIFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01Sb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpO1xufVxuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG5cbiAgICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMocm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGUgJyArICdyb290IGNvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArIFwicm9vdC51bm1vdW50KCkgdG8gZW1wdHkgYSByb290J3MgY29udGFpbmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgbnVsbCwgbnVsbCk7XG59O1xuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigndW5tb3VudCguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG4gIHVwZGF0ZUNvbnRhaW5lcihudWxsLCByb290LCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgLy8gVGFnIGlzIGVpdGhlciBMZWdhY3lSb290IG9yIENvbmN1cnJlbnQgUm9vdFxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zIHx8IG51bGw7XG4gIHZhciBtdXRhYmxlU291cmNlcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXMgfHwgbnVsbDtcbiAgdmFyIHJvb3QgPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCB0YWcsIGh5ZHJhdGUpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgdmFyIGNvbnRhaW5lck5vZGVUeXBlID0gY29udGFpbmVyLm5vZGVUeXBlO1xuXG4gIHtcbiAgICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyO1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIGlmIChtdXRhYmxlU291cmNlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZXNbaV07XG4gICAgICByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgcmV0dXJuICEhKG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIG5vZGUubm9kZVZhbHVlID09PSAnIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICcpKTtcbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzO1xudmFyIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IGZhbHNlO1xuXG57XG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGlzICcgKyAnY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgJ1JlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUgdG8gZW1wdHkgYSBjb250YWluZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCA9ICEhY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKHJvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCkpO1xuXG4gICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkICYmICFpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IFJlcGxhY2luZyBSZWFjdC1yZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbmV3IHJvb3QgJyArICdjb21wb25lbnQuIElmIHlvdSBpbnRlbmRlZCB0byB1cGRhdGUgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgJyArICd5b3Ugc2hvdWxkIGluc3RlYWQgaGF2ZSB0aGUgZXhpc3RpbmcgY2hpbGRyZW4gdXBkYXRlIHRoZWlyIHN0YXRlICcgKyAnYW5kIHJlbmRlciB0aGUgbmV3IGNvbXBvbmVudHMgaW5zdGVhZCBvZiBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlci4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgY29udGFpbmVyLnRhZ05hbWUgJiYgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICBlcnJvcigncmVuZGVyKCk6IFJlbmRlcmluZyBjb21wb25lbnRzIGRpcmVjdGx5IGludG8gZG9jdW1lbnQuYm9keSBpcyAnICsgJ2Rpc2NvdXJhZ2VkLCBzaW5jZSBpdHMgY2hpbGRyZW4gYXJlIG9mdGVuIG1hbmlwdWxhdGVkIGJ5IHRoaXJkLXBhcnR5ICcgKyAnc2NyaXB0cyBhbmQgYnJvd3NlciBleHRlbnNpb25zLiBUaGlzIG1heSBsZWFkIHRvIHN1YnRsZSAnICsgJ3JlY29uY2lsaWF0aW9uIGlzc3Vlcy4gVHJ5IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIGVsZW1lbnQgY3JlYXRlZCAnICsgJ2ZvciB5b3VyIGFwcC4nKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7IC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuXG4gIGlmICghc2hvdWxkSHlkcmF0ZSkge1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFNpYmxpbmc7XG5cbiAgICB3aGlsZSAocm9vdFNpYmxpbmcgPSBjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghd2FybmVkICYmIHJvb3RTaWJsaW5nLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdFNpYmxpbmcuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKSB7XG4gICAgICAgICAgd2FybmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgKyAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgKyAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUgJiYgIWZvcmNlSHlkcmF0ZSAmJiAhd2FybmVkQWJvdXRIeWRyYXRlQVBJKSB7XG4gICAgICB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdyZW5kZXIoKTogQ2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSB0byBoeWRyYXRlIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAgJyArICd3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCB2MTguIFJlcGxhY2UgdGhlIFJlYWN0RE9NLnJlbmRlcigpIGNhbGwgJyArICd3aXRoIFJlYWN0RE9NLmh5ZHJhdGUoKSBpZiB5b3Ugd2FudCBSZWFjdCB0byBhdHRhY2ggdG8gdGhlIHNlcnZlciBIVE1MLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgc2hvdWxkSHlkcmF0ZSA/IHtcbiAgICBoeWRyYXRlOiB0cnVlXG4gIH0gOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlLCBjYWxsYmFjaykge1xuICB7XG4gICAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyhjb250YWluZXIpO1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2ssICdyZW5kZXInKTtcbiAgfSAvLyBUT0RPOiBXaXRob3V0IGBhbnlgIHR5cGUsIEZsb3cgc2F5cyBcIlByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCBvbiBhbnlcbiAgLy8gbWVtYmVyIG9mIGludGVyc2VjdGlvbiB0eXBlLlwiIFdoeXl5eXl5LlxuXG5cbiAgdmFyIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgdmFyIGZpYmVyUm9vdDtcblxuICBpZiAoIXJvb3QpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpO1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBJbml0aWFsIG1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9vcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcblxuICAgICAgICBfb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xufVxuXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG5cbiAgICAgIGlmICghd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICB9XG5cbiAge1xuICAgIHJldHVybiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50T3JFbGVtZW50LCAnZmluZERPTU5vZGUnKTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBjcmVhdGVSb290KGNvbnRhaW5lciwge2h5ZHJhdGU6IHRydWV9KS5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwYXJlbnRDb21wb25lbnQgIT0gbnVsbCAmJiBoYXMocGFyZW50Q29tcG9uZW50KSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudFwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnVubW91bnQoKT8nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICB7XG4gICAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB2YXIgcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID0gcm9vdEVsICYmICFnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG5cbiAgICAgIGlmIChyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFVubW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIG51bGwsIGNvbnRhaW5lciwgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYGRlbGV0ZSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcmBcbiAgICAgICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBudWxsO1xuICAgICAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBJZiB5b3UgY2FsbCB1bm1vdW50Q29tcG9uZW50QXROb2RlIHR3aWNlIGluIHF1aWNrIHN1Y2Nlc3Npb24sIHlvdSdsbFxuICAgIC8vIGdldCBgdHJ1ZWAgdHdpY2UuIFRoYXQncyBwcm9iYWJseSBmaW5lP1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgdmFyIF9yb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcblxuICAgICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEoX3Jvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKF9yb290RWwpKTsgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG5cbiAgICAgIHZhciBpc0NvbnRhaW5lclJlYWN0Um9vdCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGlzVmFsaWRDb250YWluZXIoY29udGFpbmVyLnBhcmVudE5vZGUpICYmICEhY29udGFpbmVyLnBhcmVudE5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICAgICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkKSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBSZWFjdCBhbmQgaXMgbm90IGEgdG9wLWxldmVsIGNvbnRhaW5lci4gJXMnLCBpc0NvbnRhaW5lclJlYWN0Um9vdCA/ICdZb3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBpbiBhIFJlYWN0IHJvb3Qgbm9kZSBpbnN0ZWFkICcgKyAnb2YgaXRzIGNvbnRhaW5lci4nIDogJ0luc3RlYWQsIGhhdmUgdGhlIHBhcmVudCBjb21wb25lbnQgdXBkYXRlIGl0cyBzdGF0ZSBhbmQgJyArICdyZXJlbmRlciBpbiBvcmRlciB0byByZW1vdmUgdGhpcyBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbnNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHJ1bldpdGhQcmlvcml0eSQyKTtcbnZhciBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IGZhbHNlO1xuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgTWFwIGhhcyBubyBwcm90b3R5cGVcbiAgTWFwLnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFNldCBoYXMgbm8gcHJvdG90eXBlXG4gIFNldC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3IoJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICB9XG59XG5cbnNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihyZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMkMSwgZmx1c2hEaXNjcmV0ZVVwZGF0ZXMsIGJhdGNoZWRFdmVudFVwZGF0ZXMkMSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcGFzcyBSZWFjdERPTSBwb3J0YWwgaW1wbGVtZW50YXRpb24gYXMgdGhpcmQgYXJndW1lbnRcbiAgLy8gJEZsb3dGaXhNZSBUaGUgRmxvdyB0eXBlIGlzIG9wYXF1ZSBidXQgdGhlcmUncyBubyB3YXkgdG8gYWN0dWFsbHkgY3JlYXRlIGl0LlxuXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBrZXkpO1xufVxuXG52YXIgSW50ZXJuYWxzID0ge1xuICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdFRlc3RVdGlscy5qcywgYW5kIFJlYWN0VGVzdFV0aWxzQWN0LmpzLlxuICAvLyBUaGlzIGlzIGFuIGFycmF5IGZvciBiZXR0ZXIgbWluaWZpY2F0aW9uLlxuICBFdmVudHM6IFtnZXRJbnN0YW5jZUZyb21Ob2RlLCBnZXROb2RlRnJvbUluc3RhbmNlLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLCBlbnF1ZXVlU3RhdGVSZXN0b3JlLCByZXN0b3JlU3RhdGVJZk5lZWRlZCwgZmx1c2hQYXNzaXZlRWZmZWN0cywgLy8gVE9ETzogVGhpcyBpcyByZWxhdGVkIHRvIGBhY3RgLCBub3QgZXZlbnRzLiBNb3ZlIHRvIHNlcGFyYXRlIGtleT9cbiAgSXNUaGlzUmVuZGVyZXJBY3RpbmddXG59O1xudmFyIGZvdW5kRGV2VG9vbHMgPSBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gIGJ1bmRsZVR5cGU6ICAxICxcbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiAncmVhY3QtZG9tJ1xufSk7XG5cbntcbiAgaWYgKCFmb3VuZERldlRvb2xzICYmIGNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuICAgIC8vIElmIHdlJ3JlIGluIENocm9tZSBvciBGaXJlZm94LCBwcm92aWRlIGEgZG93bmxvYWQgbGluayBpZiBub3QgaW5zdGFsbGVkLlxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDsgLy8gRG9uJ3Qgd2FybiBpbiBleG90aWMgY2FzZXMgbGlrZSBjaHJvbWUtZXh0ZW5zaW9uOi8vLlxuXG4gICAgICBpZiAoL14oaHR0cHM/fGZpbGUpOiQvLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcbiAgICAgICAgY29uc29sZS5pbmZvKCclY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyAnICsgJ2ZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzLWZhcScgOiAnJyksICdmb250LXdlaWdodDpib2xkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBJbnRlcm5hbHM7XG5leHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGNyZWF0ZVBvcnRhbCQxO1xuZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlO1xuZXhwb3J0cy5mbHVzaFN5bmMgPSBmbHVzaFN5bmM7XG5leHBvcnRzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSB1bm1vdW50Q29tcG9uZW50QXROb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG5leHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCA9IHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBY3Rpdml0eSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDEyIDE4IDEyIDE1IDIxIDkgMyA2IDEyIDIgMTJcIlxuICB9KSk7XG59KTtcbkFjdGl2aXR5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFjdGl2aXR5LmRpc3BsYXlOYW1lID0gJ0FjdGl2aXR5JztcbmV4cG9ydCBkZWZhdWx0IEFjdGl2aXR5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBaXJwbGF5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTdINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTUgMTcgMjEgNyAyMSAxMiAxNVwiXG4gIH0pKTtcbn0pO1xuQWlycGxheS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BaXJwbGF5LmRpc3BsYXlOYW1lID0gJ0FpcnBsYXknO1xuZXhwb3J0IGRlZmF1bHQgQWlycGxheTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxlcnRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQWxlcnRDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxlcnRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQWxlcnRDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsZXJ0T2N0YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNy44NiAyIDE2LjE0IDIgMjIgNy44NiAyMiAxNi4xNCAxNi4xNCAyMiA3Ljg2IDIyIDIgMTYuMTQgMiA3Ljg2IDcuODYgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQWxlcnRPY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsZXJ0T2N0YWdvbi5kaXNwbGF5TmFtZSA9ICdBbGVydE9jdGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGVydFRyaWFuZ2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjI5IDMuODZMMS44MiAxOGEyIDIgMCAwIDAgMS43MSAzaDE2Ljk0YTIgMiAwIDAgMCAxLjcxLTNMMTMuNzEgMy44NmEyIDIgMCAwIDAtMy40MiAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuQWxlcnRUcmlhbmdsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGVydFRyaWFuZ2xlLmRpc3BsYXlOYW1lID0gJ0FsZXJ0VHJpYW5nbGUnO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRUcmlhbmdsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25DZW50ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduQ2VudGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduQ2VudGVyLmRpc3BsYXlOYW1lID0gJ0FsaWduQ2VudGVyJztcbmV4cG9ydCBkZWZhdWx0IEFsaWduQ2VudGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGlnbkp1c3RpZnkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduSnVzdGlmeS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGlnbkp1c3RpZnkuZGlzcGxheU5hbWUgPSAnQWxpZ25KdXN0aWZ5JztcbmV4cG9ydCBkZWZhdWx0IEFsaWduSnVzdGlmeTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25MZWZ0LmRpc3BsYXlOYW1lID0gJ0FsaWduTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25SaWdodC5kaXNwbGF5TmFtZSA9ICdBbGlnblJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFsaWduUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFuY2hvciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNVwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEySDJhMTAgMTAgMCAwIDAgMjAgMGgtM1wiXG4gIH0pKTtcbn0pO1xuQW5jaG9yLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFuY2hvci5kaXNwbGF5TmFtZSA9ICdBbmNob3InO1xuZXhwb3J0IGRlZmF1bHQgQW5jaG9yOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcGVydHVyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuMzFcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjAuMDVcIixcbiAgICB5MjogXCIxNy45NFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjkuNjlcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjEuMTdcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNy4zOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTMuMTJcIixcbiAgICB5MjogXCIyLjA2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOS42OVwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMy45NVwiLFxuICAgIHkyOiBcIjYuMDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC4zMVwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMi44M1wiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuNjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEwLjg4XCIsXG4gICAgeTI6IFwiMjEuOTRcIlxuICB9KSk7XG59KTtcbkFwZXJ0dXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFwZXJ0dXJlLmRpc3BsYXlOYW1lID0gJ0FwZXJ0dXJlJztcbmV4cG9ydCBkZWZhdWx0IEFwZXJ0dXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcmNoaXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjEgOCAyMSAyMSAzIDIxIDMgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQXJjaGl2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcmNoaXZlLmRpc3BsYXlOYW1lID0gJ0FyY2hpdmUnO1xuZXhwb3J0IGRlZmF1bHQgQXJjaGl2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggMTIgMTIgMTYgMTYgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5BcnJvd0Rvd25DaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dEb3duQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0Fycm93RG93bkNpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0Rvd25DaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93bkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAxNyA3IDE3IDcgN1wiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd25MZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93RG93bkxlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA3IDE3IDE3IDcgMTdcIlxuICB9KSk7XG59KTtcbkFycm93RG93blJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93blJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Fycm93RG93blJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93blJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0Rvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgMTIgMTIgMTkgNSAxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93bi5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0xlZnRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgOCA4IDEyIDEyIDE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dMZWZ0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93TGVmdENpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd0xlZnRDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dMZWZ0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0xlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTlcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTkgNSAxMiAxMiA1XCJcbiAgfSkpO1xufSk7XG5BcnJvd0xlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dMZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93TGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0xlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93UmlnaHRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTYgMTYgMTIgMTIgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFycm93UmlnaHRDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dSaWdodENpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd1JpZ2h0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFycm93UmlnaHRDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93UmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgNSAxOSAxMiAxMiAxOVwiXG4gIH0pKTtcbn0pO1xuQXJyb3dSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1JpZ2h0LmRpc3BsYXlOYW1lID0gJ0Fycm93UmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAxMiAxMiA4IDggMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5BcnJvd1VwQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dVcENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1VwQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTcgNyA3IDE3IDdcIlxuICB9KSk7XG59KTtcbkFycm93VXBMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBMZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93VXBMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXBMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3IDcgMTcgNyAxNyAxN1wiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcFJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBSaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcFJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjUgMTIgMTIgNSAxOSAxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwLmRpc3BsYXlOYW1lID0gJ0Fycm93VXAnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXRTaWduID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTMuOTIgNy45NFwiXG4gIH0pKTtcbn0pO1xuQXRTaWduLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkF0U2lnbi5kaXNwbGF5TmFtZSA9ICdBdFNpZ24nO1xuZXhwb3J0IGRlZmF1bHQgQXRTaWduOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiOFwiLFxuICAgIHI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOC4yMSAxMy44OSA3IDIzIDEyIDIwIDE3IDIzIDE1Ljc5IDEzLjg4XCJcbiAgfSkpO1xufSk7XG5Bd2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Bd2FyZC5kaXNwbGF5TmFtZSA9ICdBd2FyZCc7XG5leHBvcnQgZGVmYXVsdCBBd2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmFyQ2hhcnQyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQmFyQ2hhcnQyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhckNoYXJ0Mi5kaXNwbGF5TmFtZSA9ICdCYXJDaGFydDInO1xuZXhwb3J0IGRlZmF1bHQgQmFyQ2hhcnQyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXJDaGFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkJhckNoYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhckNoYXJ0LmRpc3BsYXlOYW1lID0gJ0JhckNoYXJ0JztcbmV4cG9ydCBkZWZhdWx0IEJhckNoYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXR0ZXJ5Q2hhcmdpbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxOEgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDMuMTlNMTUgNmgyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0zLjE5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDYgNyAxMiAxMyAxMiA5IDE4XCJcbiAgfSkpO1xufSk7XG5CYXR0ZXJ5Q2hhcmdpbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmF0dGVyeUNoYXJnaW5nLmRpc3BsYXlOYW1lID0gJ0JhdHRlcnlDaGFyZ2luZyc7XG5leHBvcnQgZGVmYXVsdCBCYXR0ZXJ5Q2hhcmdpbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJhdHRlcnkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCI2XCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMTJcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5CYXR0ZXJ5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhdHRlcnkuZGlzcGxheU5hbWUgPSAnQmF0dGVyeSc7XG5leHBvcnQgZGVmYXVsdCBCYXR0ZXJ5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCZWxsT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjczIDIxYTIgMiAwIDAgMS0zLjQ2IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC42MyAxM0ExNy44OSAxNy44OSAwIDAgMSAxOCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNiA2LjI2QTUuODYgNS44NiAwIDAgMCA2IDhjMCA3LTMgOS0zIDloMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA4YTYgNiAwIDAgMC05LjMzLTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbkJlbGxPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmVsbE9mZi5kaXNwbGF5TmFtZSA9ICdCZWxsT2ZmJztcbmV4cG9ydCBkZWZhdWx0IEJlbGxPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJlbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOEE2IDYgMCAwIDAgNiA4YzAgNy0zIDktMyA5aDE4cy0zLTItMy05XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNzMgMjFhMiAyIDAgMCAxLTMuNDYgMFwiXG4gIH0pKTtcbn0pO1xuQmVsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CZWxsLmRpc3BsYXlOYW1lID0gJ0JlbGwnO1xuZXhwb3J0IGRlZmF1bHQgQmVsbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmx1ZXRvb3RoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNi41IDYuNSAxNy41IDE3LjUgMTIgMjMgMTIgMSAxNy41IDYuNSA2LjUgMTcuNVwiXG4gIH0pKTtcbn0pO1xuQmx1ZXRvb3RoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJsdWV0b290aC5kaXNwbGF5TmFtZSA9ICdCbHVldG9vdGgnO1xuZXhwb3J0IGRlZmF1bHQgQmx1ZXRvb3RoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb2xkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNGg4YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMTJoOWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnpcIlxuICB9KSk7XG59KTtcbkJvbGQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm9sZC5kaXNwbGF5TmFtZSA9ICdCb2xkJztcbmV4cG9ydCBkZWZhdWx0IEJvbGQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJvb2tPcGVuID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2g2YTQgNCAwIDAgMSA0IDR2MTRhMyAzIDAgMCAwLTMtM0gyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDNoLTZhNCA0IDAgMCAwLTQgNHYxNGEzIDMgMCAwIDEgMy0zaDd6XCJcbiAgfSkpO1xufSk7XG5Cb29rT3Blbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rT3Blbi5kaXNwbGF5TmFtZSA9ICdCb29rT3Blbic7XG5leHBvcnQgZGVmYXVsdCBCb29rT3BlbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9vayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDE5LjVBMi41IDIuNSAwIDAgMSA2LjUgMTdIMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMkgyMHYyMEg2LjVBMi41IDIuNSAwIDAgMSA0IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJ6XCJcbiAgfSkpO1xufSk7XG5Cb29rLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvb2suZGlzcGxheU5hbWUgPSAnQm9vayc7XG5leHBvcnQgZGVmYXVsdCBCb29rOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb29rbWFyayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAyMWwtNy01LTcgNVY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbkJvb2ttYXJrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvb2ttYXJrLmRpc3BsYXlOYW1lID0gJ0Jvb2ttYXJrJztcbmV4cG9ydCBkZWZhdWx0IEJvb2ttYXJrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Cb3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm94LmRpc3BsYXlOYW1lID0gJ0JveCc7XG5leHBvcnQgZGVmYXVsdCBCb3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJyaWVmY2FzZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFWNWEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MTZcIlxuICB9KSk7XG59KTtcbkJyaWVmY2FzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CcmllZmNhc2UuZGlzcGxheU5hbWUgPSAnQnJpZWZjYXNlJztcbmV4cG9ydCBkZWZhdWx0IEJyaWVmY2FzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FsZW5kYXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DYWxlbmRhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DYWxlbmRhci5kaXNwbGF5TmFtZSA9ICdDYWxlbmRhcic7XG5leHBvcnQgZGVmYXVsdCBDYWxlbmRhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FtZXJhT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDIxSDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoM20zLTNoNmwyIDNoNGEyIDIgMCAwIDEgMiAydjkuMzRtLTcuNzItMi4wNmE0IDQgMCAxIDEtNS41Ni01LjU2XCJcbiAgfSkpO1xufSk7XG5DYW1lcmFPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FtZXJhT2ZmLmRpc3BsYXlOYW1lID0gJ0NhbWVyYU9mZic7XG5leHBvcnQgZGVmYXVsdCBDYW1lcmFPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbWVyYSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAxOWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNGwyLTNoNmwyIDNoNGEyIDIgMCAwIDEgMiAyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxM1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuQ2FtZXJhLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhbWVyYS5kaXNwbGF5TmFtZSA9ICdDYW1lcmEnO1xuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDYXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTYuMUE1IDUgMCAwIDEgNS45IDIwTTIgMTIuMDVBOSA5IDAgMCAxIDkuOTUgMjBNMiA4VjZhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJoLTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIyLjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkNhc3QucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FzdC5kaXNwbGF5TmFtZSA9ICdDYXN0JztcbmV4cG9ydCBkZWZhdWx0IENhc3Q7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDExLjA4VjEyYTEwIDEwIDAgMSAxLTUuOTMtOS4xNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgNCAxMiAxNC4wMSA5IDExLjAxXCJcbiAgfSkpO1xufSk7XG5DaGVja0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGVja0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdDaGVja0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBDaGVja0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hlY2tTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDExIDEyIDE0IDIyIDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMnY3YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMVwiXG4gIH0pKTtcbn0pO1xuQ2hlY2tTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hlY2tTcXVhcmUuZGlzcGxheU5hbWUgPSAnQ2hlY2tTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgNiA5IDE3IDQgMTJcIlxuICB9KSk7XG59KTtcbkNoZWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZWNrLmRpc3BsYXlOYW1lID0gJ0NoZWNrJztcbmV4cG9ydCBkZWZhdWx0IENoZWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjYgOSAxMiAxNSAxOCA5XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uRG93bi5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uRG93bic7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAxOCA5IDEyIDE1IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25MZWZ0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDE4IDE1IDEyIDkgNlwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvblJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25SaWdodC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvblJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOCAxNSAxMiA5IDYgMTVcIlxuICB9KSk7XG59KTtcbkNoZXZyb25VcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uVXAuZGlzcGxheU5hbWUgPSAnQ2hldnJvblVwJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25VcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAxMyAxMiAxOCAxNyAxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyA2IDEyIDExIDE3IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc0Rvd24uZGlzcGxheU5hbWUgPSAnQ2hldnJvbnNEb3duJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNMZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTEgMTcgNiAxMiAxMSA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOCAxNyAxMyAxMiAxOCA3XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uc0xlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNMZWZ0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uc0xlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAxNyAxOCAxMiAxMyA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDE3IDExIDEyIDYgN1wiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc1JpZ2h0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDExIDEyIDYgNyAxMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTggMTIgMTMgNyAxOFwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc1VwLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zVXAnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hyb21lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMS4xN1wiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzLjk1XCIsXG4gICAgeTE6IFwiNi4wNlwiLFxuICAgIHgyOiBcIjguNTRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwLjg4XCIsXG4gICAgeTE6IFwiMjEuOTRcIixcbiAgICB4MjogXCIxNS40NlwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5DaHJvbWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hyb21lLmRpc3BsYXlOYW1lID0gJ0Nocm9tZSc7XG5leHBvcnQgZGVmYXVsdCBDaHJvbWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsaXBib2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOFwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjhcIixcbiAgICBoZWlnaHQ6IFwiNFwiLFxuICAgIHJ4OiBcIjFcIixcbiAgICByeTogXCIxXCJcbiAgfSkpO1xufSk7XG5DbGlwYm9hcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xpcGJvYXJkLmRpc3BsYXlOYW1lID0gJ0NsaXBib2FyZCc7XG5leHBvcnQgZGVmYXVsdCBDbGlwYm9hcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDYgMTIgMTIgMTYgMTRcIlxuICB9KSk7XG59KTtcbkNsb2NrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb2NrLmRpc3BsYXlOYW1lID0gJ0Nsb2NrJztcbmV4cG9ydCBkZWZhdWx0IENsb2NrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZERyaXp6bGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNi41OEE1IDUgMCAwIDAgMTggN2gtMS4yNkE4IDggMCAxIDAgNCAxNS4yNVwiXG4gIH0pKTtcbn0pO1xuQ2xvdWREcml6emxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkRHJpenpsZS5kaXNwbGF5TmFtZSA9ICdDbG91ZERyaXp6bGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWREcml6emxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZExpZ2h0bmluZyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAxNi45QTUgNSAwIDAgMCAxOCA3aC0xLjI2YTggOCAwIDEgMC0xMS42MiA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAxMSA5IDE3IDE1IDE3IDExIDIzXCJcbiAgfSkpO1xufSk7XG5DbG91ZExpZ2h0bmluZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZExpZ2h0bmluZy5kaXNwbGF5TmFtZSA9ICdDbG91ZExpZ2h0bmluZyc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZExpZ2h0bmluZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNjEgMTYuOTVBNSA1IDAgMCAwIDE4IDEwaC0xLjI2YTggOCAwIDAgMC03LjA1LTZNNSA1YTggOCAwIDAgMCA0IDE1aDlhNSA1IDAgMCAwIDEuNy0uM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuQ2xvdWRPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRPZmYuZGlzcGxheU5hbWUgPSAnQ2xvdWRPZmYnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWRPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkUmFpbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTYuNThBNSA1IDAgMCAwIDE4IDdoLTEuMjZBOCA4IDAgMSAwIDQgMTUuMjVcIlxuICB9KSk7XG59KTtcbkNsb3VkUmFpbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZFJhaW4uZGlzcGxheU5hbWUgPSAnQ2xvdWRSYWluJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkUmFpbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRTbm93ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE3LjU4QTUgNSAwIDAgMCAxOCA4aC0xLjI2QTggOCAwIDEgMCA0IDE2LjI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiOC4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiOC4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxNi4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjE2LjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkNsb3VkU25vdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZFNub3cuZGlzcGxheU5hbWUgPSAnQ2xvdWRTbm93JztcbmV4cG9ydCBkZWZhdWx0IENsb3VkU25vdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTBoLTEuMjZBOCA4IDAgMSAwIDkgMjBoOWE1IDUgMCAwIDAgMC0xMHpcIlxuICB9KSk7XG59KTtcbkNsb3VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkLmRpc3BsYXlOYW1lID0gJ0Nsb3VkJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb2RlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTggMjIgMTIgMTYgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA2IDIgMTIgOCAxOFwiXG4gIH0pKTtcbn0pO1xuQ29kZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2RlLmRpc3BsYXlOYW1lID0gJ0NvZGUnO1xuZXhwb3J0IGRlZmF1bHQgQ29kZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZXBlbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAyMiA4LjUgMjIgMTUuNSAxMiAyMiAyIDE1LjUgMiA4LjUgMTIgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDguNSAxMiAxNS41IDIgOC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDE1LjUgMTIgOC41IDIyIDE1LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjguNVwiXG4gIH0pKTtcbn0pO1xuQ29kZXBlbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2RlcGVuLmRpc3BsYXlOYW1lID0gJ0NvZGVwZW4nO1xuZXhwb3J0IGRlZmF1bHQgQ29kZXBlbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZXNhbmRib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNy41IDE5Ljc5IDcuNSAxNC42IDMgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDEyIDE2LjUgMTQuNiAxNi41IDE5Ljc5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Db2Rlc2FuZGJveC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2Rlc2FuZGJveC5kaXNwbGF5TmFtZSA9ICdDb2Rlc2FuZGJveCc7XG5leHBvcnQgZGVmYXVsdCBDb2Rlc2FuZGJveDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29mZmVlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDhoMWE0IDQgMCAwIDEgMCA4aC0xXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA4aDE2djlhNCA0IDAgMCAxLTQgNEg2YTQgNCAwIDAgMS00LTRWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCI0XCJcbiAgfSkpO1xufSk7XG5Db2ZmZWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29mZmVlLmRpc3BsYXlOYW1lID0gJ0NvZmZlZSc7XG5leHBvcnQgZGVmYXVsdCBDb2ZmZWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbHVtbnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgM2g3YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtN20wLTE4SDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDdtMC0xOHYxOFwiXG4gIH0pKTtcbn0pO1xuQ29sdW1ucy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2x1bW5zLmRpc3BsYXlOYW1lID0gJ0NvbHVtbnMnO1xuZXhwb3J0IGRlZmF1bHQgQ29sdW1uczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29tbWFuZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAzYTMgMyAwIDAgMC0zIDN2MTJhMyAzIDAgMCAwIDMgMyAzIDMgMCAwIDAgMy0zIDMgMyAwIDAgMC0zLTNINmEzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMCAzIDMgMyAzIDAgMCAwIDMtM1Y2YTMgMyAwIDAgMC0zLTMgMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAgMyAzaDEyYTMgMyAwIDAgMCAzLTMgMyAzIDAgMCAwLTMtM3pcIlxuICB9KSk7XG59KTtcbkNvbW1hbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdDb21tYW5kJztcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbXBhc3MgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzZcIlxuICB9KSk7XG59KTtcbkNvbXBhc3MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29tcGFzcy5kaXNwbGF5TmFtZSA9ICdDb21wYXNzJztcbmV4cG9ydCBkZWZhdWx0IENvbXBhc3M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcHkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI5XCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiMTNcIixcbiAgICBoZWlnaHQ6IFwiMTNcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTVINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTIgMiAwIDAgMSAyIDJ2MVwiXG4gIH0pKTtcbn0pO1xuQ29weS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3B5LmRpc3BsYXlOYW1lID0gJ0NvcHknO1xuZXhwb3J0IGRlZmF1bHQgQ29weTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyRG93bkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDEwIDQgMTUgOSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDR2N2E0IDQgMCAwIDEtNCA0SDRcIlxuICB9KSk7XG59KTtcbkNvcm5lckRvd25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lckRvd25MZWZ0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lckRvd25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckRvd25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJEb3duUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAxMCAyMCAxNSAxNSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTJcIlxuICB9KSk7XG59KTtcbkNvcm5lckRvd25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJEb3duUmlnaHQuZGlzcGxheU5hbWUgPSAnQ29ybmVyRG93blJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckRvd25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyTGVmdERvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCAxNSA5IDIwIDQgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTJcIlxuICB9KSk7XG59KTtcbkNvcm5lckxlZnREb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lckxlZnREb3duLmRpc3BsYXlOYW1lID0gJ0Nvcm5lckxlZnREb3duJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckxlZnREb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJMZWZ0VXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCA5IDkgNCA0IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjRcIlxuICB9KSk7XG59KTtcbkNvcm5lckxlZnRVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJMZWZ0VXAuZGlzcGxheU5hbWUgPSAnQ29ybmVyTGVmdFVwJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckxlZnRVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyUmlnaHREb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgMTUgMTUgMjAgMjAgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDRoN2E0IDQgMCAwIDEgNCA0djEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJSaWdodERvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyUmlnaHREb3duLmRpc3BsYXlOYW1lID0gJ0Nvcm5lclJpZ2h0RG93bic7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJSaWdodERvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclJpZ2h0VXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMCA5IDE1IDQgMjAgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjRcIlxuICB9KSk7XG59KTtcbkNvcm5lclJpZ2h0VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyUmlnaHRVcC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJSaWdodFVwJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lclJpZ2h0VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclVwTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMTQgNCA5IDkgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDIwdi03YTQgNCAwIDAgMC00LTRINFwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyVXBMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclVwTGVmdC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJVcExlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyVXBMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJVcFJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTQgMjAgOSAxNSA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyMHYtN2E0IDQgMCAwIDEgNC00aDEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJVcFJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclVwUmlnaHQuZGlzcGxheU5hbWUgPSAnQ29ybmVyVXBSaWdodCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJVcFJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcHUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI0XCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiMTZcIixcbiAgICBoZWlnaHQ6IFwiMTZcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOVwiLFxuICAgIHk6IFwiOVwiLFxuICAgIHdpZHRoOiBcIjZcIixcbiAgICBoZWlnaHQ6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQ3B1LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNwdS5kaXNwbGF5TmFtZSA9ICdDcHUnO1xuZXhwb3J0IGRlZmF1bHQgQ3B1OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcmVkaXRDYXJkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DcmVkaXRDYXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNyZWRpdENhcmQuZGlzcGxheU5hbWUgPSAnQ3JlZGl0Q2FyZCc7XG5leHBvcnQgZGVmYXVsdCBDcmVkaXRDYXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcm9wID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTMgMUw2IDE2YTIgMiAwIDAgMCAyIDJoMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDYuMTNMMTYgNmEyIDIgMCAwIDEgMiAydjE1XCJcbiAgfSkpO1xufSk7XG5Dcm9wLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNyb3AuZGlzcGxheU5hbWUgPSAnQ3JvcCc7XG5leHBvcnQgZGVmYXVsdCBDcm9wOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcm9zc2hhaXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkNyb3NzaGFpci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Dcm9zc2hhaXIuZGlzcGxheU5hbWUgPSAnQ3Jvc3NoYWlyJztcbmV4cG9ydCBkZWZhdWx0IENyb3NzaGFpcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGF0YWJhc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZWxsaXBzZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcng6IFwiOVwiLFxuICAgIHJ5OiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjVcIlxuICB9KSk7XG59KTtcbkRhdGFiYXNlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRhdGFiYXNlLmRpc3BsYXlOYW1lID0gJ0RhdGFiYXNlJztcbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEZWxldGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgNEg4bC03IDggNyA4aDEzYTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0yelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5EZWxldGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGVsZXRlLmRpc3BsYXlOYW1lID0gJ0RlbGV0ZSc7XG5leHBvcnQgZGVmYXVsdCBEZWxldGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpc2MgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuRGlzYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXNjLmRpc3BsYXlOYW1lID0gJ0Rpc2MnO1xuZXhwb3J0IGRlZmF1bHQgRGlzYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSk7XG59KTtcbkRpdmlkZUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGVDaXJjbGUuZGlzcGxheU5hbWUgPSAnRGl2aWRlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSk7XG59KTtcbkRpdmlkZVNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGVTcXVhcmUuZGlzcGxheU5hbWUgPSAnRGl2aWRlU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZVNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuRGl2aWRlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRpdmlkZS5kaXNwbGF5TmFtZSA9ICdEaXZpZGUnO1xuZXhwb3J0IGRlZmF1bHQgRGl2aWRlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEb2xsYXJTaWduID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDZcIlxuICB9KSk7XG59KTtcbkRvbGxhclNpZ24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRG9sbGFyU2lnbi5kaXNwbGF5TmFtZSA9ICdEb2xsYXJTaWduJztcbmV4cG9ydCBkZWZhdWx0IERvbGxhclNpZ247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERvd25sb2FkQ2xvdWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI4IDE3IDEyIDIxIDE2IDE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC44OCAxOC4wOUE1IDUgMCAwIDAgMTggOWgtMS4yNkE4IDggMCAxIDAgMyAxNi4yOVwiXG4gIH0pKTtcbn0pO1xuRG93bmxvYWRDbG91ZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Eb3dubG9hZENsb3VkLmRpc3BsYXlOYW1lID0gJ0Rvd25sb2FkQ2xvdWQnO1xuZXhwb3J0IGRlZmF1bHQgRG93bmxvYWRDbG91ZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRG93bmxvYWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAxMCAxMiAxNSAxNyAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSk7XG59KTtcbkRvd25sb2FkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRvd25sb2FkLmRpc3BsYXlOYW1lID0gJ0Rvd25sb2FkJztcbmV4cG9ydCBkZWZhdWx0IERvd25sb2FkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEcmliYmJsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41NiAyLjc1YzQuMzcgNi4wMyA2LjAyIDkuNDIgOC4wMyAxNy43Mm0yLjU0LTE1LjM4Yy0zLjcyIDQuMzUtOC45NCA1LjY2LTE2Ljg4IDUuODVtMTkuNSAxLjljLTMuNS0uOTMtNi42My0uODItOC45NCAwLTIuNTguOTItNS4wMSAyLjg2LTcuNDQgNi4zMlwiXG4gIH0pKTtcbn0pO1xuRHJpYmJibGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRHJpYmJibGUuZGlzcGxheU5hbWUgPSAnRHJpYmJibGUnO1xuZXhwb3J0IGRlZmF1bHQgRHJpYmJibGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERyb3BsZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMi42OWw1LjY2IDUuNjZhOCA4IDAgMSAxLTExLjMxIDB6XCJcbiAgfSkpO1xufSk7XG5Ecm9wbGV0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRyb3BsZXQuZGlzcGxheU5hbWUgPSAnRHJvcGxldCc7XG5leHBvcnQgZGVmYXVsdCBEcm9wbGV0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFZGl0MiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAzYTIuODI4IDIuODI4IDAgMSAxIDQgNEw3LjUgMjAuNSAyIDIybDEuNS01LjVMMTcgM3pcIlxuICB9KSk7XG59KTtcbkVkaXQyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkVkaXQyLmRpc3BsYXlOYW1lID0gJ0VkaXQyJztcbmV4cG9ydCBkZWZhdWx0IEVkaXQyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFZGl0MyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyMGg5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNSAzLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDcgMTlsLTQgMSAxLTRMMTYuNSAzLjV6XCJcbiAgfSkpO1xufSk7XG5FZGl0My5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FZGl0My5kaXNwbGF5TmFtZSA9ICdFZGl0Myc7XG5leHBvcnQgZGVmYXVsdCBFZGl0MzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA0SDRhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXpcIlxuICB9KSk7XG59KTtcbkVkaXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRWRpdC5kaXNwbGF5TmFtZSA9ICdFZGl0JztcbmV4cG9ydCBkZWZhdWx0IEVkaXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV4dGVybmFsTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSk7XG59KTtcbkV4dGVybmFsTGluay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FeHRlcm5hbExpbmsuZGlzcGxheU5hbWUgPSAnRXh0ZXJuYWxMaW5rJztcbmV4cG9ydCBkZWZhdWx0IEV4dGVybmFsTGluazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRXllT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3Ljk0IDE3Ljk0QTEwLjA3IDEwLjA3IDAgMCAxIDEyIDIwYy03IDAtMTEtOC0xMS04YTE4LjQ1IDE4LjQ1IDAgMCAxIDUuMDYtNS45NE05LjkgNC4yNEE5LjEyIDkuMTIgMCAwIDEgMTIgNGM3IDAgMTEgOCAxMSA4YTE4LjUgMTguNSAwIDAgMS0yLjE2IDMuMTltLTYuNzItMS4wN2EzIDMgMCAxIDEtNC4yNC00LjI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5FeWVPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXllT2ZmLmRpc3BsYXlOYW1lID0gJ0V5ZU9mZic7XG5leHBvcnQgZGVmYXVsdCBFeWVPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV5ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLTh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5FeWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXllLmRpc3BsYXlOYW1lID0gJ0V5ZSc7XG5leHBvcnQgZGVmYXVsdCBFeWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZhY2Vib29rID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDJoLTNhNSA1IDAgMCAwLTUgNXYzSDd2NGgzdjhoNHYtOGgzbDEtNGgtNFY3YTEgMSAwIDAgMSAxLTFoM3pcIlxuICB9KSk7XG59KTtcbkZhY2Vib29rLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZhY2Vib29rLmRpc3BsYXlOYW1lID0gJ0ZhY2Vib29rJztcbmV4cG9ydCBkZWZhdWx0IEZhY2Vib29rOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGYXN0Rm9yd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTkgMjIgMTIgMTMgNSAxMyAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyIDE5IDExIDEyIDIgNSAyIDE5XCJcbiAgfSkpO1xufSk7XG5GYXN0Rm9yd2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GYXN0Rm9yd2FyZC5kaXNwbGF5TmFtZSA9ICdGYXN0Rm9yd2FyZCc7XG5leHBvcnQgZGVmYXVsdCBGYXN0Rm9yd2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmVhdGhlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNCAxMi4yNGE2IDYgMCAwIDAtOC40OS04LjQ5TDUgMTAuNVYxOWg4LjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTcuNVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GZWF0aGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZlYXRoZXIuZGlzcGxheU5hbWUgPSAnRmVhdGhlcic7XG5leHBvcnQgZGVmYXVsdCBGZWF0aGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWdtYSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmgzLjVhMy41IDMuNSAwIDEgMSAwIDdIMTJWMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMi41YTMuNSAzLjUgMCAxIDEgNyAwIDMuNSAzLjUgMCAxIDEtNyAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMi41QTMuNSAzLjUgMCAwIDEgOC41IDlIMTJ2N0g4LjVBMy41IDMuNSAwIDAgMSA1IDEyLjV6XCJcbiAgfSkpO1xufSk7XG5GaWdtYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWdtYS5kaXNwbGF5TmFtZSA9ICdGaWdtYSc7XG5leHBvcnQgZGVmYXVsdCBGaWdtYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsZU1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMiAxNCA4IDIwIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GaWxlTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZU1pbnVzLmRpc3BsYXlOYW1lID0gJ0ZpbGVNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBGaWxlTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGVQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMiAxNCA4IDIwIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcbkZpbGVQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVQbHVzLmRpc3BsYXlOYW1lID0gJ0ZpbGVQbHVzJztcbmV4cG9ydCBkZWZhdWx0IEZpbGVQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlVGV4dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDkgOSA5IDggOVwiXG4gIH0pKTtcbn0pO1xuRmlsZVRleHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZVRleHQuZGlzcGxheU5hbWUgPSAnRmlsZVRleHQnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZVRleHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjl6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAyIDEzIDkgMjAgOVwiXG4gIH0pKTtcbn0pO1xuRmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxlLmRpc3BsYXlOYW1lID0gJ0ZpbGUnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsbSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjIuMThcIixcbiAgICByeTogXCIyLjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pKTtcbn0pO1xuRmlsbS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxtLmRpc3BsYXlOYW1lID0gJ0ZpbG0nO1xuZXhwb3J0IGRlZmF1bHQgRmlsbTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsdGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMiAzIDIgMyAxMCAxMi40NiAxMCAxOSAxNCAyMSAxNCAxMi40NiAyMiAzXCJcbiAgfSkpO1xufSk7XG5GaWx0ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsdGVyLmRpc3BsYXlOYW1lID0gJ0ZpbHRlcic7XG5leHBvcnQgZGVmYXVsdCBGaWx0ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZsYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxNXMxLTEgNC0xIDUgMiA4IDIgNC0xIDQtMVYzcy0xIDEtNCAxLTUtMi04LTItNCAxLTQgMXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcbkZsYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmxhZy5kaXNwbGF5TmFtZSA9ICdGbGFnJztcbmV4cG9ydCBkZWZhdWx0IEZsYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlck1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuRm9sZGVyTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRm9sZGVyTWludXMuZGlzcGxheU5hbWUgPSAnRm9sZGVyTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgRm9sZGVyTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlclBsdXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkZvbGRlclBsdXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRm9sZGVyUGx1cy5kaXNwbGF5TmFtZSA9ICdGb2xkZXJQbHVzJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlclBsdXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyelwiXG4gIH0pKTtcbn0pO1xuRm9sZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlci5kaXNwbGF5TmFtZSA9ICdGb2xkZXInO1xuZXhwb3J0IGRlZmF1bHQgRm9sZGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGcmFtZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwbDcgN3YtN20tNyAwaDdcIlxuICB9KSk7XG59KTtcbkZyYW1lci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GcmFtZXIuZGlzcGxheU5hbWUgPSAnRnJhbWVyJztcbmV4cG9ydCBkZWZhdWx0IEZyYW1lcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRnJvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcbkZyb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZyb3duLmRpc3BsYXlOYW1lID0gJ0Zyb3duJztcbmV4cG9ydCBkZWZhdWx0IEZyb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgMTIgMjAgMjIgNCAyMiA0IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA3SDcuNWEyLjUgMi41IDAgMCAxIDAtNUMxMSAyIDEyIDcgMTIgN3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA3aDQuNWEyLjUgMi41IDAgMCAwIDAtNUMxMyAyIDEyIDcgMTIgN3pcIlxuICB9KSk7XG59KTtcbkdpZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2lmdC5kaXNwbGF5TmFtZSA9ICdHaWZ0JztcbmV4cG9ydCBkZWZhdWx0IEdpZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdEJyYW5jaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA5YTkgOSAwIDAgMS05IDlcIlxuICB9KSk7XG59KTtcbkdpdEJyYW5jaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRCcmFuY2guZGlzcGxheU5hbWUgPSAnR2l0QnJhbmNoJztcbmV4cG9ydCBkZWZhdWx0IEdpdEJyYW5jaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0Q29tbWl0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEuMDVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3LjAxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMi45NlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5HaXRDb21taXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0Q29tbWl0LmRpc3BsYXlOYW1lID0gJ0dpdENvbW1pdCc7XG5leHBvcnQgZGVmYXVsdCBHaXRDb21taXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdE1lcmdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjZcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIxVjlhOSA5IDAgMCAwIDkgOVwiXG4gIH0pKTtcbn0pO1xuR2l0TWVyZ2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0TWVyZ2UuZGlzcGxheU5hbWUgPSAnR2l0TWVyZ2UnO1xuZXhwb3J0IGRlZmF1bHQgR2l0TWVyZ2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdFB1bGxSZXF1ZXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjZcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbkdpdFB1bGxSZXF1ZXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdFB1bGxSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ0dpdFB1bGxSZXF1ZXN0JztcbmV4cG9ydCBkZWZhdWx0IEdpdFB1bGxSZXF1ZXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRIdWIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxOWMtNSAxLjUtNS0yLjUtNy0zbTE0IDZ2LTMuODdhMy4zNyAzLjM3IDAgMCAwLS45NC0yLjYxYzMuMTQtLjM1IDYuNDQtMS41NCA2LjQ0LTdBNS40NCA1LjQ0IDAgMCAwIDIwIDQuNzcgNS4wNyA1LjA3IDAgMCAwIDE5LjkxIDFTMTguNzMuNjUgMTYgMi40OGExMy4zOCAxMy4zOCAwIDAgMC03IDBDNi4yNy42NSA1LjA5IDEgNS4wOSAxQTUuMDcgNS4wNyAwIDAgMCA1IDQuNzdhNS40NCA1LjQ0IDAgMCAwLTEuNSAzLjc4YzAgNS40MiAzLjMgNi42MSA2LjQ0IDdBMy4zNyAzLjM3IDAgMCAwIDkgMTguMTNWMjJcIlxuICB9KSk7XG59KTtcbkdpdEh1Yi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRIdWIuZGlzcGxheU5hbWUgPSAnR2l0SHViJztcbmV4cG9ydCBkZWZhdWx0IEdpdEh1YjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0bGFiID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjY1IDE0LjM5TDEyIDIyLjEzIDEuMzUgMTQuMzlhLjg0Ljg0IDAgMCAxLS4zLS45NGwxLjIyLTMuNzggMi40NC03LjUxQS40Mi40MiAwIDAgMSA0LjgyIDJhLjQzLjQzIDAgMCAxIC41OCAwIC40Mi40MiAwIDAgMSAuMTEuMThsMi40NCA3LjQ5aDguMWwyLjQ0LTcuNTFBLjQyLjQyIDAgMCAxIDE4LjYgMmEuNDMuNDMgMCAwIDEgLjU4IDAgLjQyLjQyIDAgMCAxIC4xMS4xOGwyLjQ0IDcuNTFMMjMgMTMuNDVhLjg0Ljg0IDAgMCAxLS4zNS45NHpcIlxuICB9KSk7XG59KTtcbkdpdGxhYi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRsYWIuZGlzcGxheU5hbWUgPSAnR2l0bGFiJztcbmV4cG9ydCBkZWZhdWx0IEdpdGxhYjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2xvYmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyYTE1LjMgMTUuMyAwIDAgMSA0IDEwIDE1LjMgMTUuMyAwIDAgMS00IDEwIDE1LjMgMTUuMyAwIDAgMS00LTEwIDE1LjMgMTUuMyAwIDAgMSA0LTEwelwiXG4gIH0pKTtcbn0pO1xuR2xvYmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2xvYmUuZGlzcGxheU5hbWUgPSAnR2xvYmUnO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdyaWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiN1wiLFxuICAgIGhlaWdodDogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMTRcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiN1wiLFxuICAgIGhlaWdodDogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pKTtcbn0pO1xuR3JpZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HcmlkLmRpc3BsYXlOYW1lID0gJ0dyaWQnO1xuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGFyZERyaXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCI2LjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTAuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuSGFyZERyaXZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhhcmREcml2ZS5kaXNwbGF5TmFtZSA9ICdIYXJkRHJpdmUnO1xuZXhwb3J0IGRlZmF1bHQgSGFyZERyaXZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIYXNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbkhhc2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSGFzaC5kaXNwbGF5TmFtZSA9ICdIYXNoJztcbmV4cG9ydCBkZWZhdWx0IEhhc2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhlYWRwaG9uZXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxOHYtNmE5IDkgMCAwIDEgMTggMHY2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTlhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoM3pNMyAxOWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAwIDItMnYtM2EyIDIgMCAwIDAtMi0ySDN6XCJcbiAgfSkpO1xufSk7XG5IZWFkcGhvbmVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlYWRwaG9uZXMuZGlzcGxheU5hbWUgPSAnSGVhZHBob25lcyc7XG5leHBvcnQgZGVmYXVsdCBIZWFkcGhvbmVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC44NCA0LjYxYTUuNSA1LjUgMCAwIDAtNy43OCAwTDEyIDUuNjdsLTEuMDYtMS4wNmE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwxLjA2IDEuMDZMMTIgMjEuMjNsNy43OC03Ljc4IDEuMDYtMS4wNmE1LjUgNS41IDAgMCAwIDAtNy43OHpcIlxuICB9KSk7XG59KTtcbkhlYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlYXJ0LmRpc3BsYXlOYW1lID0gJ0hlYXJ0JztcbmV4cG9ydCBkZWZhdWx0IEhlYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWxwQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSkpO1xufSk7XG5IZWxwQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlbHBDaXJjbGUuZGlzcGxheU5hbWUgPSAnSGVscENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBIZWxwQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZXhhZ29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pKTtcbn0pO1xuSGV4YWdvbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZXhhZ29uLmRpc3BsYXlOYW1lID0gJ0hleGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgSGV4YWdvbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSG9tZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMjIgOSAxMiAxNSAxMiAxNSAyMlwiXG4gIH0pKTtcbn0pO1xuSG9tZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ib21lLmRpc3BsYXlOYW1lID0gJ0hvbWUnO1xuZXhwb3J0IGRlZmF1bHQgSG9tZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW1hZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiOC41XCIsXG4gICAgcjogXCIxLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDE1IDE2IDEwIDUgMjFcIlxuICB9KSk7XG59KTtcbkltYWdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkltYWdlLmRpc3BsYXlOYW1lID0gJ0ltYWdlJztcbmV4cG9ydCBkZWZhdWx0IEltYWdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbmJveCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDEyIDE2IDEyIDE0IDE1IDEwIDE1IDggMTIgMiAxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNDUgNS4xMUwyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExelwiXG4gIH0pKTtcbn0pO1xuSW5ib3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSW5ib3guZGlzcGxheU5hbWUgPSAnSW5ib3gnO1xuZXhwb3J0IGRlZmF1bHQgSW5ib3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEluZm8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5JbmZvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkluZm8uZGlzcGxheU5hbWUgPSAnSW5mbyc7XG5leHBvcnQgZGVmYXVsdCBJbmZvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbnN0YWdyYW0gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCI1XCIsXG4gICAgcnk6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNy41XCIsXG4gICAgeTE6IFwiNi41XCIsXG4gICAgeDI6IFwiMTcuNTFcIixcbiAgICB5MjogXCI2LjVcIlxuICB9KSk7XG59KTtcbkluc3RhZ3JhbS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbnN0YWdyYW0uZGlzcGxheU5hbWUgPSAnSW5zdGFncmFtJztcbmV4cG9ydCBkZWZhdWx0IEluc3RhZ3JhbTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSXRhbGljID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkl0YWxpYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JdGFsaWMuZGlzcGxheU5hbWUgPSAnSXRhbGljJztcbmV4cG9ydCBkZWZhdWx0IEl0YWxpYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgS2V5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDJsLTIgMm0tNy42MSA3LjYxYTUuNSA1LjUgMCAxIDEtNy43NzggNy43NzggNS41IDUuNSAwIDAgMSA3Ljc3Ny03Ljc3N3ptMCAwTDE1LjUgNy41bTAgMGwzIDNMMjIgN2wtMy0zbS0zLjUgMy41TDE5IDRcIlxuICB9KSk7XG59KTtcbktleS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5LZXkuZGlzcGxheU5hbWUgPSAnS2V5JztcbmV4cG9ydCBkZWZhdWx0IEtleTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGF5ZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDIgNyAxMiAxMiAyMiA3IDEyIDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIgMTcgMTIgMjIgMjIgMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIgMTIgMTIgMTcgMjIgMTJcIlxuICB9KSk7XG59KTtcbkxheWVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MYXllcnMuZGlzcGxheU5hbWUgPSAnTGF5ZXJzJztcbmV4cG9ydCBkZWZhdWx0IExheWVyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGF5b3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5MYXlvdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGF5b3V0LmRpc3BsYXlOYW1lID0gJ0xheW91dCc7XG5leHBvcnQgZGVmYXVsdCBMYXlvdXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpZmVCdW95ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjkuMTdcIixcbiAgICB5MjogXCI5LjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCIxNC44M1wiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC44M1wiLFxuICAgIHkxOiBcIjkuMTdcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjQuOTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC44M1wiLFxuICAgIHkxOiBcIjkuMTdcIixcbiAgICB4MjogXCIxOC4zNlwiLFxuICAgIHkyOiBcIjUuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiMTkuMDdcIixcbiAgICB4MjogXCI5LjE3XCIsXG4gICAgeTI6IFwiMTQuODNcIlxuICB9KSk7XG59KTtcbkxpZmVCdW95LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpZmVCdW95LmRpc3BsYXlOYW1lID0gJ0xpZmVCdW95JztcbmV4cG9ydCBkZWZhdWx0IExpZmVCdW95OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaW5rMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSA3aDNhNSA1IDAgMCAxIDUgNSA1IDUgMCAwIDEtNSA1aC0zbS02IDBINmE1IDUgMCAwIDEtNS01IDUgNSAwIDAgMSA1LTVoM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkxpbmsyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpbmsyLmRpc3BsYXlOYW1lID0gJ0xpbmsyJztcbmV4cG9ydCBkZWZhdWx0IExpbmsyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaW5rID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MVwiXG4gIH0pKTtcbn0pO1xuTGluay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaW5rLmRpc3BsYXlOYW1lID0gJ0xpbmsnO1xuZXhwb3J0IGRlZmF1bHQgTGluazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGlua2VkaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGE2IDYgMCAwIDEgNiA2djdoLTR2LTdhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAydjdoLTR2LTdhNiA2IDAgMCAxIDYtNnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI0XCIsXG4gICAgaGVpZ2h0OiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI0XCIsXG4gICAgY3k6IFwiNFwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuTGlua2VkaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGlua2VkaW4uZGlzcGxheU5hbWUgPSAnTGlua2VkaW4nO1xuZXhwb3J0IGRlZmF1bHQgTGlua2VkaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpc3QgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzLjAxXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkxpc3QucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGlzdC5kaXNwbGF5TmFtZSA9ICdMaXN0JztcbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvYWRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuOTNcIixcbiAgICB5MTogXCI0LjkzXCIsXG4gICAgeDI6IFwiNy43NlwiLFxuICAgIHkyOiBcIjcuNzZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNi4yNFwiLFxuICAgIHkxOiBcIjE2LjI0XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCIxOS4wN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjE5LjA3XCIsXG4gICAgeDI6IFwiNy43NlwiLFxuICAgIHkyOiBcIjE2LjI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuMjRcIixcbiAgICB5MTogXCI3Ljc2XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCI0LjkzXCJcbiAgfSkpO1xufSk7XG5Mb2FkZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9hZGVyLmRpc3BsYXlOYW1lID0gJ0xvYWRlcic7XG5leHBvcnQgZGVmYXVsdCBMb2FkZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxMVwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjExXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExVjdhNSA1IDAgMCAxIDEwIDB2NFwiXG4gIH0pKTtcbn0pO1xuTG9jay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Mb2NrLmRpc3BsYXlOYW1lID0gJ0xvY2snO1xuZXhwb3J0IGRlZmF1bHQgTG9jazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTG9nSW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgMTcgMTUgMTIgMTAgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkxvZ0luLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvZ0luLmRpc3BsYXlOYW1lID0gJ0xvZ0luJztcbmV4cG9ydCBkZWZhdWx0IExvZ0luOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2dPdXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE3IDIxIDEyIDE2IDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Mb2dPdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9nT3V0LmRpc3BsYXlOYW1lID0gJ0xvZ091dCc7XG5leHBvcnQgZGVmYXVsdCBMb2dPdXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1haWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyLDYgMTIsMTMgMiw2XCJcbiAgfSkpO1xufSk7XG5NYWlsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1haWwuZGlzcGxheU5hbWUgPSAnTWFpbCc7XG5leHBvcnQgZGVmYXVsdCBNYWlsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXBQaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMCAxIDE4IDB6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEwXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5NYXBQaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWFwUGluLmRpc3BsYXlOYW1lID0gJ01hcFBpbic7XG5leHBvcnQgZGVmYXVsdCBNYXBQaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1hcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMSA2IDEgMjIgOCAxOCAxNiAyMiAyMyAxOCAyMyAyIDE2IDYgOCAyIDEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pKTtcbn0pO1xuTWFwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1hcC5kaXNwbGF5TmFtZSA9ICdNYXAnO1xuZXhwb3J0IGRlZmF1bHQgTWFwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXhpbWl6ZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAyMSAzIDIxIDMgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuTWF4aW1pemUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1heGltaXplMi5kaXNwbGF5TmFtZSA9ICdNYXhpbWl6ZTInO1xuZXhwb3J0IGRlZmF1bHQgTWF4aW1pemUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXhpbWl6ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDNINWEyIDIgMCAwIDAtMiAydjNtMTggMFY1YTIgMiAwIDAgMC0yLTJoLTNtMCAxOGgzYTIgMiAwIDAgMCAyLTJ2LTNNMyAxNnYzYTIgMiAwIDAgMCAyIDJoM1wiXG4gIH0pKTtcbn0pO1xuTWF4aW1pemUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWF4aW1pemUuZGlzcGxheU5hbWUgPSAnTWF4aW1pemUnO1xuZXhwb3J0IGRlZmF1bHQgTWF4aW1pemU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1laCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcbk1laC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZWguZGlzcGxheU5hbWUgPSAnTWVoJztcbmV4cG9ydCBkZWZhdWx0IE1laDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVudSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5NZW51LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1lbnUuZGlzcGxheU5hbWUgPSAnTWVudSc7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNZXNzYWdlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDExLjVhOC4zOCA4LjM4IDAgMCAxLS45IDMuOCA4LjUgOC41IDAgMCAxLTcuNiA0LjcgOC4zOCA4LjM4IDAgMCAxLTMuOC0uOUwzIDIxbDEuOS01LjdhOC4zOCA4LjM4IDAgMCAxLS45LTMuOCA4LjUgOC41IDAgMCAxIDQuNy03LjYgOC4zOCA4LjM4IDAgMCAxIDMuOC0uOWguNWE4LjQ4IDguNDggMCAwIDEgOCA4di41elwiXG4gIH0pKTtcbn0pO1xuTWVzc2FnZUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZXNzYWdlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ01lc3NhZ2VDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVzc2FnZVNxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbk1lc3NhZ2VTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVzc2FnZVNxdWFyZS5kaXNwbGF5TmFtZSA9ICdNZXNzYWdlU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pY09mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDl2M2EzIDMgMCAwIDAgNS4xMiAyLjEyTTE1IDkuMzRWNGEzIDMgMCAwIDAtNS45NC0uNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0ybTE0IDB2MmE3IDcgMCAwIDEtLjExIDEuMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbk1pY09mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaWNPZmYuZGlzcGxheU5hbWUgPSAnTWljT2ZmJztcbmV4cG9ydCBkZWZhdWx0IE1pY09mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWljID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDFhMyAzIDAgMCAwLTMgM3Y4YTMgMyAwIDAgMCA2IDBWNGEzIDMgMCAwIDAtMy0zelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbk1pYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaWMuZGlzcGxheU5hbWUgPSAnTWljJztcbmV4cG9ydCBkZWZhdWx0IE1pYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWluaW1pemUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCAxNCAxMCAxNCAxMCAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgMTAgMTQgMTAgMTQgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5NaW5pbWl6ZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWluaW1pemUyLmRpc3BsYXlOYW1lID0gJ01pbmltaXplMic7XG5leHBvcnQgZGVmYXVsdCBNaW5pbWl6ZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbmltaXplID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggM3YzYTIgMiAwIDAgMS0yIDJIM20xOCAwaC0zYTIgMiAwIDAgMS0yLTJWM20wIDE4di0zYTIgMiAwIDAgMSAyLTJoM00zIDE2aDNhMiAyIDAgMCAxIDIgMnYzXCJcbiAgfSkpO1xufSk7XG5NaW5pbWl6ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW5pbWl6ZS5kaXNwbGF5TmFtZSA9ICdNaW5pbWl6ZSc7XG5leHBvcnQgZGVmYXVsdCBNaW5pbWl6ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWludXNDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ01pbnVzQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW51c1NxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuTWludXNTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWludXNTcXVhcmUuZGlzcGxheU5hbWUgPSAnTWludXNTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgTWludXNTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzLmRpc3BsYXlOYW1lID0gJ01pbnVzJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb25pdG9yID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbk1vbml0b3IucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9uaXRvci5kaXNwbGF5TmFtZSA9ICdNb25pdG9yJztcbmV4cG9ydCBkZWZhdWx0IE1vbml0b3I7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTIuNzlBOSA5IDAgMSAxIDExLjIxIDMgNyA3IDAgMCAwIDIxIDEyLjc5elwiXG4gIH0pKTtcbn0pO1xuTW9vbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb29uLmRpc3BsYXlOYW1lID0gJ01vb24nO1xuZXhwb3J0IGRlZmF1bHQgTW9vbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9yZUhvcml6b250YWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOVwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjFcIlxuICB9KSk7XG59KTtcbk1vcmVIb3Jpem9udGFsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vcmVIb3Jpem9udGFsLmRpc3BsYXlOYW1lID0gJ01vcmVIb3Jpem9udGFsJztcbmV4cG9ydCBkZWZhdWx0IE1vcmVIb3Jpem9udGFsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb3JlVmVydGljYWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTlcIixcbiAgICByOiBcIjFcIlxuICB9KSk7XG59KTtcbk1vcmVWZXJ0aWNhbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3JlVmVydGljYWwuZGlzcGxheU5hbWUgPSAnTW9yZVZlcnRpY2FsJztcbmV4cG9ydCBkZWZhdWx0IE1vcmVWZXJ0aWNhbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW91c2VQb2ludGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgM2w3LjA3IDE2Ljk3IDIuNTEtNy4zOSA3LjM5LTIuNTFMMyAzelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDEzbDYgNlwiXG4gIH0pKTtcbn0pO1xuTW91c2VQb2ludGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vdXNlUG9pbnRlci5kaXNwbGF5TmFtZSA9ICdNb3VzZVBvaW50ZXInO1xuZXhwb3J0IGRlZmF1bHQgTW91c2VQb2ludGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb3ZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNSA5IDIgMTIgNSAxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSA1IDEyIDIgMTUgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTkgMTIgMjIgOSAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgOSAyMiAxMiAxOSAxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSkpO1xufSk7XG5Nb3ZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vdmUuZGlzcGxheU5hbWUgPSAnTW92ZSc7XG5leHBvcnQgZGVmYXVsdCBNb3ZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNdXNpYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDE4VjVsMTItMnYxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOFwiLFxuICAgIGN5OiBcIjE2XCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5NdXNpYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NdXNpYy5kaXNwbGF5TmFtZSA9ICdNdXNpYyc7XG5leHBvcnQgZGVmYXVsdCBNdXNpYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTmF2aWdhdGlvbjIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyXCJcbiAgfSkpO1xufSk7XG5OYXZpZ2F0aW9uMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5OYXZpZ2F0aW9uMi5kaXNwbGF5TmFtZSA9ICdOYXZpZ2F0aW9uMic7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTmF2aWdhdGlvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMyAxMSAyMiAyIDEzIDIxIDExIDEzIDMgMTFcIlxuICB9KSk7XG59KTtcbk5hdmlnYXRpb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTmF2aWdhdGlvbi5kaXNwbGF5TmFtZSA9ICdOYXZpZ2F0aW9uJztcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSk7XG59KTtcbk9jdGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuT2N0YWdvbi5kaXNwbGF5TmFtZSA9ICdPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IE9jdGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhY2thZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuNVwiLFxuICAgIHkxOiBcIjkuNFwiLFxuICAgIHgyOiBcIjcuNVwiLFxuICAgIHkyOiBcIjQuMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMi4wOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBhY2thZ2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGFja2FnZS5kaXNwbGF5TmFtZSA9ICdQYWNrYWdlJztcbmV4cG9ydCBkZWZhdWx0IFBhY2thZ2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhcGVyY2xpcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40NCAxMS4wNWwtOS4xOSA5LjE5YTYgNiAwIDAgMS04LjQ5LTguNDlsOS4xOS05LjE5YTQgNCAwIDAgMSA1LjY2IDUuNjZsLTkuMiA5LjE5YTIgMiAwIDAgMS0yLjgzLTIuODNsOC40OS04LjQ4XCJcbiAgfSkpO1xufSk7XG5QYXBlcmNsaXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGFwZXJjbGlwLmRpc3BsYXlOYW1lID0gJ1BhcGVyY2xpcCc7XG5leHBvcnQgZGVmYXVsdCBQYXBlcmNsaXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhdXNlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuUGF1c2VDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGF1c2VDaXJjbGUuZGlzcGxheU5hbWUgPSAnUGF1c2VDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGF1c2VDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhdXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNlwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjRcIixcbiAgICBoZWlnaHQ6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiNFwiLFxuICAgIGhlaWdodDogXCIxNlwiXG4gIH0pKTtcbn0pO1xuUGF1c2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGF1c2UuZGlzcGxheU5hbWUgPSAnUGF1c2UnO1xuZXhwb3J0IGRlZmF1bHQgUGF1c2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBlblRvb2wgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTlsNy03IDMgMy03IDctMy0zelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDEzbC0xLjUtNy41TDIgMmwzLjUgMTQuNUwxMyAxOGw1LTV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAybDcuNTg2IDcuNTg2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCIyXCJcbiAgfSkpO1xufSk7XG5QZW5Ub29sLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBlblRvb2wuZGlzcGxheU5hbWUgPSAnUGVuVG9vbCc7XG5leHBvcnQgZGVmYXVsdCBQZW5Ub29sOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQZXJjZW50ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNi41XCIsXG4gICAgY3k6IFwiNi41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE3LjVcIixcbiAgICBjeTogXCIxNy41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSk7XG59KTtcblBlcmNlbnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGVyY2VudC5kaXNwbGF5TmFtZSA9ICdQZXJjZW50JztcbmV4cG9ydCBkZWZhdWx0IFBlcmNlbnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lQ2FsbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4wNSA1QTUgNSAwIDAgMSAxOSA4Ljk1TTE1LjA1IDFBOSA5IDAgMCAxIDIzIDguOTRtLTEgNy45OHYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVDYWxsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lQ2FsbC5kaXNwbGF5TmFtZSA9ICdQaG9uZUNhbGwnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVDYWxsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUZvcndhcmRlZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDEgMjMgNSAxOSA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lRm9yd2FyZGVkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lRm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gJ1Bob25lRm9yd2FyZGVkJztcbmV4cG9ydCBkZWZhdWx0IFBob25lRm9yd2FyZGVkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUluY29taW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMiAxNiA4IDIyIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVJbmNvbWluZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUluY29taW5nLmRpc3BsYXlOYW1lID0gJ1Bob25lSW5jb21pbmcnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVJbmNvbWluZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVNaXNzZWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lTWlzc2VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lTWlzc2VkLmRpc3BsYXlOYW1lID0gJ1Bob25lTWlzc2VkJztcbmV4cG9ydCBkZWZhdWx0IFBob25lTWlzc2VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42OCAxMy4zMWExNiAxNiAwIDAgMCAzLjQxIDIuNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuNyAyIDIgMCAwIDEgMS43MiAydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNDIgMTkuNDIgMCAwIDEtMy4zMy0yLjY3bS0yLjY3LTMuMzRhMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjYzQTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjFcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuUGhvbmVPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmVPZmYuZGlzcGxheU5hbWUgPSAnUGhvbmVPZmYnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lT3V0Z29pbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA3IDIzIDEgMTcgMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZU91dGdvaW5nLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lT3V0Z29pbmcuZGlzcGxheU5hbWUgPSAnUGhvbmVPdXRnb2luZyc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZU91dGdvaW5nOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmUuZGlzcGxheU5hbWUgPSAnUGhvbmUnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBpZUNoYXJ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjIxIDE1Ljg5QTEwIDEwIDAgMSAxIDggMi44M1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDEyQTEwIDEwIDAgMCAwIDEyIDJ2MTB6XCJcbiAgfSkpO1xufSk7XG5QaWVDaGFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaWVDaGFydC5kaXNwbGF5TmFtZSA9ICdQaWVDaGFydCc7XG5leHBvcnQgZGVmYXVsdCBQaWVDaGFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGxheUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDggMTYgMTIgMTAgMTYgMTAgOFwiXG4gIH0pKTtcbn0pO1xuUGxheUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbGF5Q2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BsYXlDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGxheUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGxheSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNSAzIDE5IDEyIDUgMjEgNSAzXCJcbiAgfSkpO1xufSk7XG5QbGF5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsYXkuZGlzcGxheU5hbWUgPSAnUGxheSc7XG5leHBvcnQgZGVmYXVsdCBQbGF5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQbHVzQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuUGx1c0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbHVzQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BsdXNDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGx1c0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGx1c1NxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXNTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1c1NxdWFyZS5kaXNwbGF5TmFtZSA9ICdQbHVzU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFBsdXNTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsdXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1cy5kaXNwbGF5TmFtZSA9ICdQbHVzJztcbmV4cG9ydCBkZWZhdWx0IFBsdXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBvY2tldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDNoMTZhMiAyIDAgMCAxIDIgMnY2YTEwIDEwIDAgMCAxLTEwIDEwQTEwIDEwIDAgMCAxIDIgMTFWNWEyIDIgMCAwIDEgMi0yelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCAxMCAxMiAxNCAxNiAxMFwiXG4gIH0pKTtcbn0pO1xuUG9ja2V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBvY2tldC5kaXNwbGF5TmFtZSA9ICdQb2NrZXQnO1xuZXhwb3J0IGRlZmF1bHQgUG9ja2V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQb3dlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC4zNiA2LjY0YTkgOSAwIDEgMS0xMi43MyAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuUG93ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUG93ZXIuZGlzcGxheU5hbWUgPSAnUG93ZXInO1xuZXhwb3J0IGRlZmF1bHQgUG93ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFByaW50ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDkgNiAyIDE4IDIgMTggOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY1YTIgMiAwIDAgMS0yIDJoLTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjZcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiMTJcIixcbiAgICBoZWlnaHQ6IFwiOFwiXG4gIH0pKTtcbn0pO1xuUHJpbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QcmludGVyLmRpc3BsYXlOYW1lID0gJ1ByaW50ZXInO1xuZXhwb3J0IGRlZmF1bHQgUHJpbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmFkaW8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMjQgNy43NmE2IDYgMCAwIDEgMCA4LjQ5bS04LjQ4LS4wMWE2IDYgMCAwIDEgMC04LjQ5bTExLjMxLTIuODJhMTAgMTAgMCAwIDEgMCAxNC4xNG0tMTQuMTQgMGExMCAxMCAwIDAgMSAwLTE0LjE0XCJcbiAgfSkpO1xufSk7XG5SYWRpby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SYWRpby5kaXNwbGF5TmFtZSA9ICdSYWRpbyc7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVmcmVzaENjdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNCAxIDEwIDcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDIwIDIzIDE0IDE3IDE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNDkgOUE5IDkgMCAwIDAgNS42NCA1LjY0TDEgMTBtMjIgNGwtNC42NCA0LjM2QTkgOSAwIDAgMSAzLjUxIDE1XCJcbiAgfSkpO1xufSk7XG5SZWZyZXNoQ2N3LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJlZnJlc2hDY3cuZGlzcGxheU5hbWUgPSAnUmVmcmVzaENjdyc7XG5leHBvcnQgZGVmYXVsdCBSZWZyZXNoQ2N3OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSZWZyZXNoQ3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA0IDIzIDEwIDE3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDIwIDEgMTQgNyAxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuNTEgOWE5IDkgMCAwIDEgMTQuODUtMy4zNkwyMyAxME0xIDE0bDQuNjQgNC4zNkE5IDkgMCAwIDAgMjAuNDkgMTVcIlxuICB9KSk7XG59KTtcblJlZnJlc2hDdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZWZyZXNoQ3cuZGlzcGxheU5hbWUgPSAnUmVmcmVzaEN3JztcbmV4cG9ydCBkZWZhdWx0IFJlZnJlc2hDdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVwZWF0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMSAyMSA1IDE3IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDExVjlhNCA0IDAgMCAxIDQtNGgxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAyMyAzIDE5IDcgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxM3YyYTQgNCAwIDAgMS00IDRIM1wiXG4gIH0pKTtcbn0pO1xuUmVwZWF0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJlcGVhdC5kaXNwbGF5TmFtZSA9ICdSZXBlYXQnO1xuZXhwb3J0IGRlZmF1bHQgUmVwZWF0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSZXdpbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDE5IDIgMTIgMTEgNSAxMSAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMiAxOSAxMyAxMiAyMiA1IDIyIDE5XCJcbiAgfSkpO1xufSk7XG5SZXdpbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmV3aW5kLmRpc3BsYXlOYW1lID0gJ1Jld2luZCc7XG5leHBvcnQgZGVmYXVsdCBSZXdpbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJvdGF0ZUNjdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNCAxIDEwIDcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUxIDE1YTkgOSAwIDEgMCAyLjEzLTkuMzZMMSAxMFwiXG4gIH0pKTtcbn0pO1xuUm90YXRlQ2N3LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJvdGF0ZUNjdy5kaXNwbGF5TmFtZSA9ICdSb3RhdGVDY3cnO1xuZXhwb3J0IGRlZmF1bHQgUm90YXRlQ2N3OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSb3RhdGVDdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDQgMjMgMTAgMTcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC40OSAxNWE5IDkgMCAxIDEtMi4xMi05LjM2TDIzIDEwXCJcbiAgfSkpO1xufSk7XG5Sb3RhdGVDdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Sb3RhdGVDdy5kaXNwbGF5TmFtZSA9ICdSb3RhdGVDdyc7XG5leHBvcnQgZGVmYXVsdCBSb3RhdGVDdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUnNzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTFhOSA5IDAgMCAxIDkgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNGExNiAxNiAwIDAgMSAxNiAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNVwiLFxuICAgIGN5OiBcIjE5XCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Sc3MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUnNzLmRpc3BsYXlOYW1lID0gJ1Jzcyc7XG5leHBvcnQgZGVmYXVsdCBSc3M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNhdmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMWw1IDV2MTFhMiAyIDAgMCAxLTIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDIxIDE3IDEzIDcgMTMgNyAyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAzIDcgOCAxNSA4XCJcbiAgfSkpO1xufSk7XG5TYXZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNhdmUuZGlzcGxheU5hbWUgPSAnU2F2ZSc7XG5leHBvcnQgZGVmYXVsdCBTYXZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTY2lzc29ycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCI4LjEyXCIsXG4gICAgeTI6IFwiMTUuODhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC40N1wiLFxuICAgIHkxOiBcIjE0LjQ4XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjguMTJcIixcbiAgICB5MTogXCI4LjEyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuU2Npc3NvcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2Npc3NvcnMuZGlzcGxheU5hbWUgPSAnU2Npc3NvcnMnO1xuZXhwb3J0IGRlZmF1bHQgU2Npc3NvcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNlYXJjaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjExXCIsXG4gICAgY3k6IFwiMTFcIixcbiAgICByOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTYuNjVcIixcbiAgICB5MjogXCIxNi42NVwiXG4gIH0pKTtcbn0pO1xuU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNlYXJjaC5kaXNwbGF5TmFtZSA9ICdTZWFyY2gnO1xuZXhwb3J0IGRlZmF1bHQgU2VhcmNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjExXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMiAxNSAyMiAxMSAxMyAyIDkgMjIgMlwiXG4gIH0pKTtcbn0pO1xuU2VuZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZW5kLmRpc3BsYXlOYW1lID0gJ1NlbmQnO1xuZXhwb3J0IGRlZmF1bHQgU2VuZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2VydmVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjhcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMTRcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCI4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjYuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiNi4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5TZXJ2ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2VydmVyLmRpc3BsYXlOYW1lID0gJ1NlcnZlcic7XG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNldHRpbmdzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXpcIlxuICB9KSk7XG59KTtcblNldHRpbmdzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNldHRpbmdzLmRpc3BsYXlOYW1lID0gJ1NldHRpbmdzJztcbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGFyZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOFwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOVwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjguNTlcIixcbiAgICB5MTogXCIxMy41MVwiLFxuICAgIHgyOiBcIjE1LjQyXCIsXG4gICAgeTI6IFwiMTcuNDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNS40MVwiLFxuICAgIHkxOiBcIjYuNTFcIixcbiAgICB4MjogXCI4LjU5XCIsXG4gICAgeTI6IFwiMTAuNDlcIlxuICB9KSk7XG59KTtcblNoYXJlMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGFyZTIuZGlzcGxheU5hbWUgPSAnU2hhcmUyJztcbmV4cG9ydCBkZWZhdWx0IFNoYXJlMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgNiAxMiAyIDggNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblNoYXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNoYXJlLmRpc3BsYXlOYW1lID0gJ1NoYXJlJztcbmV4cG9ydCBkZWZhdWx0IFNoYXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGllbGRPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuNjkgMTRhNi45IDYuOSAwIDAgMCAuMzEtMlY1bC04LTMtMy4xNiAxLjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC43MyA0LjczTDQgNXY3YzAgNiA4IDEwIDggMTBhMjAuMjkgMjAuMjkgMCAwIDAgNS42Mi00LjM4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5TaGllbGRPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hpZWxkT2ZmLmRpc3BsYXlOYW1lID0gJ1NoaWVsZE9mZic7XG5leHBvcnQgZGVmYXVsdCBTaGllbGRPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNoaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyMnM4LTQgOC0xMFY1bC04LTMtOCAzdjdjMCA2IDggMTAgOCAxMHpcIlxuICB9KSk7XG59KTtcblNoaWVsZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGllbGQuZGlzcGxheU5hbWUgPSAnU2hpZWxkJztcbmV4cG9ydCBkZWZhdWx0IFNoaWVsZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hvcHBpbmdCYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyTDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWNmwtMy00elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTBhNCA0IDAgMCAxLTggMFwiXG4gIH0pKTtcbn0pO1xuU2hvcHBpbmdCYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hvcHBpbmdCYWcuZGlzcGxheU5hbWUgPSAnU2hvcHBpbmdCYWcnO1xuZXhwb3J0IGRlZmF1bHQgU2hvcHBpbmdCYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNob3BwaW5nQ2FydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjlcIixcbiAgICBjeTogXCIyMVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMjBcIixcbiAgICBjeTogXCIyMVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2XCJcbiAgfSkpO1xufSk7XG5TaG9wcGluZ0NhcnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hvcHBpbmdDYXJ0LmRpc3BsYXlOYW1lID0gJ1Nob3BwaW5nQ2FydCc7XG5leHBvcnQgZGVmYXVsdCBTaG9wcGluZ0NhcnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNodWZmbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAzIDIxIDMgMjEgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjEgMTYgMjEgMjEgMTYgMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcblNodWZmbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2h1ZmZsZS5kaXNwbGF5TmFtZSA9ICdTaHVmZmxlJztcbmV4cG9ydCBkZWZhdWx0IFNodWZmbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNpZGViYXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5TaWRlYmFyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNpZGViYXIuZGlzcGxheU5hbWUgPSAnU2lkZWJhcic7XG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTa2lwQmFjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgMjAgOSAxMiAxOSA0IDE5IDIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiNVwiLFxuICAgIHkyOiBcIjVcIlxuICB9KSk7XG59KTtcblNraXBCYWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNraXBCYWNrLmRpc3BsYXlOYW1lID0gJ1NraXBCYWNrJztcbmV4cG9ydCBkZWZhdWx0IFNraXBCYWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTa2lwRm9yd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNSA0IDE1IDEyIDUgMjAgNSA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTlcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pKTtcbn0pO1xuU2tpcEZvcndhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2tpcEZvcndhcmQuZGlzcGxheU5hbWUgPSAnU2tpcEZvcndhcmQnO1xuZXhwb3J0IGRlZmF1bHQgU2tpcEZvcndhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNsYWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTBjLS44MyAwLTEuNS0uNjctMS41LTEuNXYtNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXY1YzAgLjgzLS42NyAxLjUtMS41IDEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC41IDEwSDE5VjguNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0Yy44MyAwIDEuNS42NyAxLjUgMS41djVjMCAuODMtLjY3IDEuNS0xLjUgMS41UzggMjEuMzMgOCAyMC41di01YzAtLjgzLjY3LTEuNSAxLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuNSAxNEg1djEuNWMwIC44My0uNjcgMS41LTEuNSAxLjVTMiAxNi4zMyAyIDE1LjUgMi42NyAxNCAzLjUgMTR6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTQuNWMwLS44My42Ny0xLjUgMS41LTEuNWg1Yy44MyAwIDEuNS42NyAxLjUgMS41cy0uNjcgMS41LTEuNSAxLjVoLTVjLS44MyAwLTEuNS0uNjctMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS41IDE5SDE0djEuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDkuNUMxMCA4LjY3IDkuMzMgOCA4LjUgOGgtNUMyLjY3IDggMiA4LjY3IDIgOS41UzIuNjcgMTEgMy41IDExaDVjLjgzIDAgMS41LS42NyAxLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA1SDEwVjMuNUMxMCAyLjY3IDkuMzMgMiA4LjUgMlM3IDIuNjcgNyAzLjUgNy42NyA1IDguNSA1elwiXG4gIH0pKTtcbn0pO1xuU2xhY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2xhY2suZGlzcGxheU5hbWUgPSAnU2xhY2snO1xuZXhwb3J0IGRlZmF1bHQgU2xhY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNsYXNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSk7XG59KTtcblNsYXNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsYXNoLmRpc3BsYXlOYW1lID0gJ1NsYXNoJztcbmV4cG9ydCBkZWZhdWx0IFNsYXNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGlkZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMFwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5TbGlkZXJzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsaWRlcnMuZGlzcGxheU5hbWUgPSAnU2xpZGVycyc7XG5leHBvcnQgZGVmYXVsdCBTbGlkZXJzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbWFydHBob25lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNVwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjE0XCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuU21hcnRwaG9uZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbWFydHBob25lLmRpc3BsYXlOYW1lID0gJ1NtYXJ0cGhvbmUnO1xuZXhwb3J0IGRlZmF1bHQgU21hcnRwaG9uZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU21pbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRzMS41IDIgNCAyIDQtMiA0LTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5TbWlsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbWlsZS5kaXNwbGF5TmFtZSA9ICdTbWlsZSc7XG5leHBvcnQgZGVmYXVsdCBTbWlsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3BlYWtlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjRcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNlwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjE0XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSkpO1xufSk7XG5TcGVha2VyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNwZWFrZXIuZGlzcGxheU5hbWUgPSAnU3BlYWtlcic7XG5leHBvcnQgZGVmYXVsdCBTcGVha2VyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pKTtcbn0pO1xuU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNxdWFyZS5kaXNwbGF5TmFtZSA9ICdTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdGFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDE1LjA5IDguMjYgMjIgOS4yNyAxNyAxNC4xNCAxOC4xOCAyMS4wMiAxMiAxNy43NyA1LjgyIDIxLjAyIDcgMTQuMTQgMiA5LjI3IDguOTEgOC4yNiAxMiAyXCJcbiAgfSkpO1xufSk7XG5TdGFyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN0YXIuZGlzcGxheU5hbWUgPSAnU3Rhcic7XG5leHBvcnQgZGVmYXVsdCBTdGFyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdG9wQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjlcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI2XCIsXG4gICAgaGVpZ2h0OiBcIjZcIlxuICB9KSk7XG59KTtcblN0b3BDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3RvcENpcmNsZS5kaXNwbGF5TmFtZSA9ICdTdG9wQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFN0b3BDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCI0LjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjUuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjE4LjM2XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxOS43OFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjE5Ljc4XCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjE4LjM2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCI1LjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCI0LjIyXCJcbiAgfSkpO1xufSk7XG5TdW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3VuLmRpc3BsYXlOYW1lID0gJ1N1bic7XG5leHBvcnQgZGVmYXVsdCBTdW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1bnJpc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMThhNSA1IDAgMCAwLTEwIDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjIyXCIsXG4gICAgeTE6IFwiMTAuMjJcIixcbiAgICB4MjogXCI1LjY0XCIsXG4gICAgeTI6IFwiMTEuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4LjM2XCIsXG4gICAgeTE6IFwiMTEuNjRcIixcbiAgICB4MjogXCIxOS43OFwiLFxuICAgIHkyOiBcIjEwLjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjFcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA2IDEyIDIgMTYgNlwiXG4gIH0pKTtcbn0pO1xuU3VucmlzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdW5yaXNlLmRpc3BsYXlOYW1lID0gJ1N1bnJpc2UnO1xuZXhwb3J0IGRlZmF1bHQgU3VucmlzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3Vuc2V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4YTUgNSAwIDAgMC0xMCAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjEwLjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjExLjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjExLjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxMC4yMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDUgMTIgOSA4IDVcIlxuICB9KSk7XG59KTtcblN1bnNldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdW5zZXQuZGlzcGxheU5hbWUgPSAnU3Vuc2V0JztcbmV4cG9ydCBkZWZhdWx0IFN1bnNldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGFibGV0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNFwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuVGFibGV0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhYmxldC5kaXNwbGF5TmFtZSA9ICdUYWJsZXQnO1xuZXhwb3J0IGRlZmF1bHQgVGFibGV0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNTkgMTMuNDFsLTcuMTcgNy4xN2EyIDIgMCAwIDEtMi44MyAwTDIgMTJWMmgxMGw4LjU5IDguNTlhMiAyIDAgMCAxIDAgMi44MnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjcuMDFcIixcbiAgICB5MjogXCI3XCJcbiAgfSkpO1xufSk7XG5UYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGFnLmRpc3BsYXlOYW1lID0gJ1RhZyc7XG5leHBvcnQgZGVmYXVsdCBUYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRhcmdldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIyXCJcbiAgfSkpO1xufSk7XG5UYXJnZXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGFyZ2V0LmRpc3BsYXlOYW1lID0gJ1RhcmdldCc7XG5leHBvcnQgZGVmYXVsdCBUYXJnZXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRlcm1pbmFsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCAxNyAxMCAxMSA0IDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pKTtcbn0pO1xuVGVybWluYWwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGVybWluYWwuZGlzcGxheU5hbWUgPSAnVGVybWluYWwnO1xuZXhwb3J0IGRlZmF1bHQgVGVybWluYWw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRoZXJtb21ldGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDE0Ljc2VjMuNWEyLjUgMi41IDAgMCAwLTUgMHYxMS4yNmE0LjUgNC41IDAgMSAwIDUgMHpcIlxuICB9KSk7XG59KTtcblRoZXJtb21ldGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRoZXJtb21ldGVyLmRpc3BsYXlOYW1lID0gJ1RoZXJtb21ldGVyJztcbmV4cG9ydCBkZWZhdWx0IFRoZXJtb21ldGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUaHVtYnNEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDE1djRhMyAzIDAgMCAwIDMgM2w0LTlWMkg1LjcyYTIgMiAwIDAgMC0yIDEuN2wtMS4zOCA5YTIgMiAwIDAgMCAyIDIuM3ptNy0xM2gyLjY3QTIuMzEgMi4zMSAwIDAgMSAyMiA0djdhMi4zMSAyLjMxIDAgMCAxLTIuMzMgMkgxN1wiXG4gIH0pKTtcbn0pO1xuVGh1bWJzRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaHVtYnNEb3duLmRpc3BsYXlOYW1lID0gJ1RodW1ic0Rvd24nO1xuZXhwb3J0IGRlZmF1bHQgVGh1bWJzRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGh1bWJzVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgOVY1YTMgMyAwIDAgMC0zLTNsLTQgOXYxMWgxMS4yOGEyIDIgMCAwIDAgMi0xLjdsMS4zOC05YTIgMiAwIDAgMC0yLTIuM3pNNyAyMkg0YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmgzXCJcbiAgfSkpO1xufSk7XG5UaHVtYnNVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaHVtYnNVcC5kaXNwbGF5TmFtZSA9ICdUaHVtYnNVcCc7XG5leHBvcnQgZGVmYXVsdCBUaHVtYnNVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVG9nZ2xlTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjdcIixcbiAgICByeTogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcblRvZ2dsZUxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVG9nZ2xlTGVmdC5kaXNwbGF5TmFtZSA9ICdUb2dnbGVMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZUxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRvZ2dsZVJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNVwiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiN1wiLFxuICAgIHJ5OiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE2XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcblRvZ2dsZVJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvZ2dsZVJpZ2h0LmRpc3BsYXlOYW1lID0gJ1RvZ2dsZVJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZVJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUb29sID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjc3LTMuNzdhNiA2IDAgMCAxLTcuOTQgNy45NGwtNi45MSA2LjkxYTIuMTIgMi4xMiAwIDAgMS0zLTNsNi45MS02LjkxYTYgNiAwIDAgMSA3Ljk0LTcuOTRsLTMuNzYgMy43NnpcIlxuICB9KSk7XG59KTtcblRvb2wucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVG9vbC5kaXNwbGF5TmFtZSA9ICdUb29sJztcbmV4cG9ydCBkZWZhdWx0IFRvb2w7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyYXNoMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMgNiA1IDYgMjEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNm0zIDBWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuVHJhc2gyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRyYXNoMi5kaXNwbGF5TmFtZSA9ICdUcmFzaDInO1xuZXhwb3J0IGRlZmF1bHQgVHJhc2gyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMgNiA1IDYgMjEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNm0zIDBWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCJcbiAgfSkpO1xufSk7XG5UcmFzaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmFzaC5kaXNwbGF5TmFtZSA9ICdUcmFzaCc7XG5leHBvcnQgZGVmYXVsdCBUcmFzaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJlbGxvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjdcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIzXCIsXG4gICAgaGVpZ2h0OiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiM1wiLFxuICAgIGhlaWdodDogXCI1XCJcbiAgfSkpO1xufSk7XG5UcmVsbG8ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbGxvLmRpc3BsYXlOYW1lID0gJ1RyZWxsbyc7XG5leHBvcnQgZGVmYXVsdCBUcmVsbG87IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZW5kaW5nRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDE4IDEzLjUgOC41IDguNSAxMy41IDEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTggMjMgMTggMjMgMTJcIlxuICB9KSk7XG59KTtcblRyZW5kaW5nRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmVuZGluZ0Rvd24uZGlzcGxheU5hbWUgPSAnVHJlbmRpbmdEb3duJztcbmV4cG9ydCBkZWZhdWx0IFRyZW5kaW5nRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJlbmRpbmdVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDYgMTMuNSAxNS41IDguNSAxMC41IDEgMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDYgMjMgNiAyMyAxMlwiXG4gIH0pKTtcbn0pO1xuVHJlbmRpbmdVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmVuZGluZ1VwLmRpc3BsYXlOYW1lID0gJ1RyZW5kaW5nVXAnO1xuZXhwb3J0IGRlZmF1bHQgVHJlbmRpbmdVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJpYW5nbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMjkgMy44NkwxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6XCJcbiAgfSkpO1xufSk7XG5UcmlhbmdsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmlhbmdsZS5kaXNwbGF5TmFtZSA9ICdUcmlhbmdsZSc7XG5leHBvcnQgZGVmYXVsdCBUcmlhbmdsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJ1Y2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMTVcIixcbiAgICBoZWlnaHQ6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgOCAyMCA4IDIzIDExIDIzIDE2IDE2IDE2IDE2IDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjUuNVwiLFxuICAgIGN5OiBcIjE4LjVcIixcbiAgICByOiBcIjIuNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTguNVwiLFxuICAgIGN5OiBcIjE4LjVcIixcbiAgICByOiBcIjIuNVwiXG4gIH0pKTtcbn0pO1xuVHJ1Y2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJ1Y2suZGlzcGxheU5hbWUgPSAnVHJ1Y2snO1xuZXhwb3J0IGRlZmF1bHQgVHJ1Y2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFR2ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjE1XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDIgMTIgNyA3IDJcIlxuICB9KSk7XG59KTtcblR2LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR2LmRpc3BsYXlOYW1lID0gJ1R2JztcbmV4cG9ydCBkZWZhdWx0IFR2OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUd2l0Y2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMkgzdjE2aDV2NGw0LTRoNWw0LTRWMnptLTEwIDlWN201IDRWN1wiXG4gIH0pKTtcbn0pO1xuVHdpdGNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR3aXRjaC5kaXNwbGF5TmFtZSA9ICdUd2l0Y2gnO1xuZXhwb3J0IGRlZmF1bHQgVHdpdGNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUd2l0dGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNhMTAuOSAxMC45IDAgMCAxLTMuMTQgMS41MyA0LjQ4IDQuNDggMCAwIDAtNy44NiAzdjFBMTAuNjYgMTAuNjYgMCAwIDEgMyA0cy00IDkgNSAxM2ExMS42NCAxMS42NCAwIDAgMS03IDJjOSA1IDIwIDAgMjAtMTEuNWE0LjUgNC41IDAgMCAwLS4wOC0uODNBNy43MiA3LjcyIDAgMCAwIDIzIDN6XCJcbiAgfSkpO1xufSk7XG5Ud2l0dGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR3aXR0ZXIuZGlzcGxheU5hbWUgPSAnVHdpdHRlcic7XG5leHBvcnQgZGVmYXVsdCBUd2l0dGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUeXBlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCA3IDQgNCAyMCA0IDIwIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pKTtcbn0pO1xuVHlwZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UeXBlLmRpc3BsYXlOYW1lID0gJ1R5cGUnO1xuZXhwb3J0IGRlZmF1bHQgVHlwZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW1icmVsbGEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMTJhMTEuMDUgMTEuMDUgMCAwIDAtMjIgMHptLTUgN2EzIDMgMCAwIDEtNiAwdi03XCJcbiAgfSkpO1xufSk7XG5VbWJyZWxsYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VbWJyZWxsYS5kaXNwbGF5TmFtZSA9ICdVbWJyZWxsYSc7XG5leHBvcnQgZGVmYXVsdCBVbWJyZWxsYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW5kZXJsaW5lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgM3Y3YTYgNiAwIDAgMCA2IDYgNiA2IDAgMCAwIDYtNlYzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pKTtcbn0pO1xuVW5kZXJsaW5lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVuZGVybGluZS5kaXNwbGF5TmFtZSA9ICdVbmRlcmxpbmUnO1xuZXhwb3J0IGRlZmF1bHQgVW5kZXJsaW5lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVbmxvY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxMVwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjExXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExVjdhNSA1IDAgMCAxIDkuOS0xXCJcbiAgfSkpO1xufSk7XG5VbmxvY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVW5sb2NrLmRpc3BsYXlOYW1lID0gJ1VubG9jayc7XG5leHBvcnQgZGVmYXVsdCBVbmxvY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVwbG9hZENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTYgMTIgMTIgOCAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMzkgMTguMzlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTYgMTIgMTIgOCAxNlwiXG4gIH0pKTtcbn0pO1xuVXBsb2FkQ2xvdWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXBsb2FkQ2xvdWQuZGlzcGxheU5hbWUgPSAnVXBsb2FkQ2xvdWQnO1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkQ2xvdWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVwbG9hZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA4IDEyIDMgNyA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuVXBsb2FkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVwbG9hZC5kaXNwbGF5TmFtZSA9ICdVcGxvYWQnO1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyQ2hlY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTEgMTkgMTMgMjMgOVwiXG4gIH0pKTtcbn0pO1xuVXNlckNoZWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJDaGVjay5kaXNwbGF5TmFtZSA9ICdVc2VyQ2hlY2snO1xuZXhwb3J0IGRlZmF1bHQgVXNlckNoZWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyTWludXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5Vc2VyTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlck1pbnVzLmRpc3BsYXlOYW1lID0gJ1VzZXJNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVzZXJQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIyMFwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblVzZXJQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJQbHVzLmRpc3BsYXlOYW1lID0gJ1VzZXJQbHVzJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyWCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4LjVcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjE4XCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSk7XG59KTtcblVzZXJYLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJYLmRpc3BsYXlOYW1lID0gJ1VzZXJYJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuVXNlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyLmRpc3BsYXlOYW1lID0gJ1VzZXInO1xuZXhwb3J0IGRlZmF1bHQgVXNlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlcnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMy4xM2E0IDQgMCAwIDEgMCA3Ljc1XCJcbiAgfSkpO1xufSk7XG5Vc2Vycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2Vycy5kaXNwbGF5TmFtZSA9ICdVc2Vycyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVmlkZW9PZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTZ2MWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJoMm01LjY2IDBIMTRhMiAyIDAgMCAxIDIgMnYzLjM0bDEgMUwyMyA3djEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5WaWRlb09mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5WaWRlb09mZi5kaXNwbGF5TmFtZSA9ICdWaWRlb09mZic7XG5leHBvcnQgZGVmYXVsdCBWaWRlb09mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVmlkZW8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDcgMTYgMTIgMjMgMTcgMjMgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNVwiLFxuICAgIHdpZHRoOiBcIjE1XCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSk7XG59KTtcblZpZGVvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZpZGVvLmRpc3BsYXlOYW1lID0gJ1ZpZGVvJztcbmV4cG9ydCBkZWZhdWx0IFZpZGVvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2ljZW1haWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1LjVcIixcbiAgICBjeTogXCIxMS41XCIsXG4gICAgcjogXCI0LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4LjVcIixcbiAgICBjeTogXCIxMS41XCIsXG4gICAgcjogXCI0LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1LjVcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjE4LjVcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuVm9pY2VtYWlsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvaWNlbWFpbC5kaXNwbGF5TmFtZSA9ICdWb2ljZW1haWwnO1xuZXhwb3J0IGRlZmF1bHQgVm9pY2VtYWlsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUxID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS41NCA4LjQ2YTUgNSAwIDAgMSAwIDcuMDdcIlxuICB9KSk7XG59KTtcblZvbHVtZTEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVm9sdW1lMS5kaXNwbGF5TmFtZSA9ICdWb2x1bWUxJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZvbHVtZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjA3IDQuOTNhMTAgMTAgMCAwIDEgMCAxNC4xNE0xNS41NCA4LjQ2YTUgNSAwIDAgMSAwIDcuMDdcIlxuICB9KSk7XG59KTtcblZvbHVtZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVm9sdW1lMi5kaXNwbGF5TmFtZSA9ICdWb2x1bWUyJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZvbHVtZVggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWVYLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZVguZGlzcGxheU5hbWUgPSAnVm9sdW1lWCc7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWVYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pKTtcbn0pO1xuVm9sdW1lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZS5kaXNwbGF5TmFtZSA9ICdWb2x1bWUnO1xuZXhwb3J0IGRlZmF1bHQgVm9sdW1lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXYXRjaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDkgMTIgMTIgMTMuNSAxMy41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNTEgMTcuMzVsLS4zNSAzLjgzYTIgMiAwIDAgMS0yIDEuODJIOS44M2EyIDIgMCAwIDEtMi0xLjgybC0uMzUtMy44M20uMDEtMTAuN2wuMzUtMy44M0EyIDIgMCAwIDEgOS44MyAxaDQuMzVhMiAyIDAgMCAxIDIgMS44MmwuMzUgMy44M1wiXG4gIH0pKTtcbn0pO1xuV2F0Y2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2F0Y2guZGlzcGxheU5hbWUgPSAnV2F0Y2gnO1xuZXhwb3J0IGRlZmF1bHQgV2F0Y2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFdpZmlPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNzIgMTEuMDZBMTAuOTQgMTAuOTQgMCAwIDEgMTkgMTIuNTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyLjU1YTEwLjk0IDEwLjk0IDAgMCAxIDUuMTctMi4zOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcxIDUuMDVBMTYgMTYgMCAwIDEgMjIuNTggOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNDIgOWExNS45MSAxNS45MSAwIDAgMSA0LjctMi44OFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTMgMTYuMTFhNiA2IDAgMCAxIDYuOTUgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5XaWZpT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldpZmlPZmYuZGlzcGxheU5hbWUgPSAnV2lmaU9mZic7XG5leHBvcnQgZGVmYXVsdCBXaWZpT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaWZpID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTIuNTVhMTEgMTEgMCAwIDEgMTQuMDggMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNDIgOWExNiAxNiAwIDAgMSAyMS4xNiAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MyAxNi4xMWE2IDYgMCAwIDEgNi45NSAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbldpZmkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2lmaS5kaXNwbGF5TmFtZSA9ICdXaWZpJztcbmV4cG9ydCBkZWZhdWx0IFdpZmk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFdpbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41OSA0LjU5QTIgMiAwIDEgMSAxMSA4SDJtMTAuNTkgMTEuNDFBMiAyIDAgMSAwIDE0IDE2SDJtMTUuNzMtOC4yN0EyLjUgMi41IDAgMSAxIDE5LjUgMTJIMlwiXG4gIH0pKTtcbn0pO1xuV2luZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5XaW5kLmRpc3BsYXlOYW1lID0gJ1dpbmQnO1xuZXhwb3J0IGRlZmF1bHQgV2luZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5YQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblhDaXJjbGUuZGlzcGxheU5hbWUgPSAnWENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBYQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBYT2N0YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNy44NiAyIDE2LjE0IDIgMjIgNy44NiAyMiAxNi4xNCAxNi4xNCAyMiA3Ljg2IDIyIDIgMTYuMTQgMiA3Ljg2IDcuODYgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWE9jdGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWE9jdGFnb24uZGlzcGxheU5hbWUgPSAnWE9jdGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgWE9jdGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFhTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWFNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5YU3F1YXJlLmRpc3BsYXlOYW1lID0gJ1hTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgWFNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjE4XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblgucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWC5kaXNwbGF5TmFtZSA9ICdYJztcbmV4cG9ydCBkZWZhdWx0IFg7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFlvdXR1YmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNTQgNi40MmEyLjc4IDIuNzggMCAwIDAtMS45NC0yQzE4Ljg4IDQgMTIgNCAxMiA0cy02Ljg4IDAtOC42LjQ2YTIuNzggMi43OCAwIDAgMC0xLjk0IDJBMjkgMjkgMCAwIDAgMSAxMS43NWEyOSAyOSAwIDAgMCAuNDYgNS4zM0EyLjc4IDIuNzggMCAwIDAgMy40IDE5YzEuNzIuNDYgOC42LjQ2IDguNi40NnM2Ljg4IDAgOC42LS40NmEyLjc4IDIuNzggMCAwIDAgMS45NC0yIDI5IDI5IDAgMCAwIC40Ni01LjI1IDI5IDI5IDAgMCAwLS40Ni01LjMzelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCI5Ljc1IDE1LjAyIDE1LjUgMTEuNzUgOS43NSA4LjQ4IDkuNzUgMTUuMDJcIlxuICB9KSk7XG59KTtcbllvdXR1YmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWW91dHViZS5kaXNwbGF5TmFtZSA9ICdZb3V0dWJlJztcbmV4cG9ydCBkZWZhdWx0IFlvdXR1YmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFphcE9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyLjQxIDYuNzUgMTMgMiAxMC41NyA0LjkyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOC41NyAxMi45MSAyMSAxMCAxNS42NiAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA4IDMgMTQgMTIgMTQgMTEgMjIgMTYgMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcblphcE9mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5aYXBPZmYuZGlzcGxheU5hbWUgPSAnWmFwT2ZmJztcbmV4cG9ydCBkZWZhdWx0IFphcE9mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWmFwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMyAyIDMgMTQgMTIgMTQgMTEgMjIgMjEgMTAgMTIgMTAgMTMgMlwiXG4gIH0pKTtcbn0pO1xuWmFwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblphcC5kaXNwbGF5TmFtZSA9ICdaYXAnO1xuZXhwb3J0IGRlZmF1bHQgWmFwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBab29tSW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjE2LjY1XCIsXG4gICAgeTI6IFwiMTYuNjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMVwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMVwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuWm9vbUluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblpvb21Jbi5kaXNwbGF5TmFtZSA9ICdab29tSW4nO1xuZXhwb3J0IGRlZmF1bHQgWm9vbUluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBab29tT3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNi42NVwiLFxuICAgIHkyOiBcIjE2LjY1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuWm9vbU91dC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5ab29tT3V0LmRpc3BsYXlOYW1lID0gJ1pvb21PdXQnO1xuZXhwb3J0IGRlZmF1bHQgWm9vbU91dDsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEFjdGl2aXR5IH0gZnJvbSAnLi9pY29ucy9hY3Rpdml0eSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFpcnBsYXkgfSBmcm9tICcuL2ljb25zL2FpcnBsYXknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbGVydENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYWxlcnQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy9hbGVydC1vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRUcmlhbmdsZSB9IGZyb20gJy4vaWNvbnMvYWxlcnQtdHJpYW5nbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbGlnbkNlbnRlciB9IGZyb20gJy4vaWNvbnMvYWxpZ24tY2VudGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25KdXN0aWZ5IH0gZnJvbSAnLi9pY29ucy9hbGlnbi1qdXN0aWZ5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25MZWZ0IH0gZnJvbSAnLi9pY29ucy9hbGlnbi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25SaWdodCB9IGZyb20gJy4vaWNvbnMvYWxpZ24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3IgfSBmcm9tICcuL2ljb25zL2FuY2hvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFwZXJ0dXJlIH0gZnJvbSAnLi9pY29ucy9hcGVydHVyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFyY2hpdmUgfSBmcm9tICcuL2ljb25zL2FyY2hpdmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0Rvd25DaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duTGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctZG93bi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duUmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0Rvd24gfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0xlZnRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LWxlZnQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dMZWZ0IH0gZnJvbSAnLi9pY29ucy9hcnJvdy1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dSaWdodENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYXJyb3ctcmlnaHQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dSaWdodCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy11cC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwTGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93VXBSaWdodCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwIH0gZnJvbSAnLi9pY29ucy9hcnJvdy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF0U2lnbiB9IGZyb20gJy4vaWNvbnMvYXQtc2lnbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF3YXJkIH0gZnJvbSAnLi9pY29ucy9hd2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhckNoYXJ0MiB9IGZyb20gJy4vaWNvbnMvYmFyLWNoYXJ0LTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXJDaGFydCB9IGZyb20gJy4vaWNvbnMvYmFyLWNoYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmF0dGVyeUNoYXJnaW5nIH0gZnJvbSAnLi9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmF0dGVyeSB9IGZyb20gJy4vaWNvbnMvYmF0dGVyeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJlbGxPZmYgfSBmcm9tICcuL2ljb25zL2JlbGwtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmVsbCB9IGZyb20gJy4vaWNvbnMvYmVsbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJsdWV0b290aCB9IGZyb20gJy4vaWNvbnMvYmx1ZXRvb3RoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9sZCB9IGZyb20gJy4vaWNvbnMvYm9sZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvb2tPcGVuIH0gZnJvbSAnLi9pY29ucy9ib29rLW9wZW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb29rIH0gZnJvbSAnLi9pY29ucy9ib29rJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9va21hcmsgfSBmcm9tICcuL2ljb25zL2Jvb2ttYXJrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9pY29ucy9ib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCcmllZmNhc2UgfSBmcm9tICcuL2ljb25zL2JyaWVmY2FzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbGVuZGFyIH0gZnJvbSAnLi9pY29ucy9jYWxlbmRhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbWVyYU9mZiB9IGZyb20gJy4vaWNvbnMvY2FtZXJhLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbWVyYSB9IGZyb20gJy4vaWNvbnMvY2FtZXJhJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2FzdCB9IGZyb20gJy4vaWNvbnMvY2FzdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9jaGVjay1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvY2hlY2stc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2sgfSBmcm9tICcuL2ljb25zL2NoZWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbkRvd24gfSBmcm9tICcuL2ljb25zL2NoZXZyb24tZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25MZWZ0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uUmlnaHQgfSBmcm9tICcuL2ljb25zL2NoZXZyb24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uVXAgfSBmcm9tICcuL2ljb25zL2NoZXZyb24tdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc0Rvd24gfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc0xlZnQgfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc1JpZ2h0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25zVXAgfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hyb21lIH0gZnJvbSAnLi9pY29ucy9jaHJvbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaXJjbGUgfSBmcm9tICcuL2ljb25zL2NpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsaXBib2FyZCB9IGZyb20gJy4vaWNvbnMvY2xpcGJvYXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvY2sgfSBmcm9tICcuL2ljb25zL2Nsb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWREcml6emxlIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1kcml6emxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRMaWdodG5pbmcgfSBmcm9tICcuL2ljb25zL2Nsb3VkLWxpZ2h0bmluZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkT2ZmIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZFJhaW4gfSBmcm9tICcuL2ljb25zL2Nsb3VkLXJhaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZFNub3cgfSBmcm9tICcuL2ljb25zL2Nsb3VkLXNub3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZCB9IGZyb20gJy4vaWNvbnMvY2xvdWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2RlIH0gZnJvbSAnLi9pY29ucy9jb2RlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29kZXBlbiB9IGZyb20gJy4vaWNvbnMvY29kZXBlbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZGVzYW5kYm94IH0gZnJvbSAnLi9pY29ucy9jb2Rlc2FuZGJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZmZlZSB9IGZyb20gJy4vaWNvbnMvY29mZmVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1ucyB9IGZyb20gJy4vaWNvbnMvY29sdW1ucyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1hbmQgfSBmcm9tICcuL2ljb25zL2NvbW1hbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21wYXNzIH0gZnJvbSAnLi9pY29ucy9jb21wYXNzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29weSB9IGZyb20gJy4vaWNvbnMvY29weSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckRvd25MZWZ0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItZG93bi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyRG93blJpZ2h0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItZG93bi1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckxlZnREb3duIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItbGVmdC1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyTGVmdFVwIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItbGVmdC11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lclJpZ2h0RG93biB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXJpZ2h0LWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJSaWdodFVwIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItcmlnaHQtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJVcExlZnQgfSBmcm9tICcuL2ljb25zL2Nvcm5lci11cC1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyVXBSaWdodCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXVwLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3B1IH0gZnJvbSAnLi9pY29ucy9jcHUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcmVkaXRDYXJkIH0gZnJvbSAnLi9pY29ucy9jcmVkaXQtY2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyb3AgfSBmcm9tICcuL2ljb25zL2Nyb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcm9zc2hhaXIgfSBmcm9tICcuL2ljb25zL2Nyb3NzaGFpcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERhdGFiYXNlIH0gZnJvbSAnLi9pY29ucy9kYXRhYmFzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlbGV0ZSB9IGZyb20gJy4vaWNvbnMvZGVsZXRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGlzYyB9IGZyb20gJy4vaWNvbnMvZGlzYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZVNxdWFyZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG9sbGFyU2lnbiB9IGZyb20gJy4vaWNvbnMvZG9sbGFyLXNpZ24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3dubG9hZENsb3VkIH0gZnJvbSAnLi9pY29ucy9kb3dubG9hZC1jbG91ZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvd25sb2FkIH0gZnJvbSAnLi9pY29ucy9kb3dubG9hZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyaWJiYmxlIH0gZnJvbSAnLi9pY29ucy9kcmliYmJsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BsZXQgfSBmcm9tICcuL2ljb25zL2Ryb3BsZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0MiB9IGZyb20gJy4vaWNvbnMvZWRpdC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdDMgfSBmcm9tICcuL2ljb25zL2VkaXQtMyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXQgfSBmcm9tICcuL2ljb25zL2VkaXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHRlcm5hbExpbmsgfSBmcm9tICcuL2ljb25zL2V4dGVybmFsLWxpbmsnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeWVPZmYgfSBmcm9tICcuL2ljb25zL2V5ZS1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeWUgfSBmcm9tICcuL2ljb25zL2V5ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZhY2Vib29rIH0gZnJvbSAnLi9pY29ucy9mYWNlYm9vayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZhc3RGb3J3YXJkIH0gZnJvbSAnLi9pY29ucy9mYXN0LWZvcndhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGZWF0aGVyIH0gZnJvbSAnLi9pY29ucy9mZWF0aGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlnbWEgfSBmcm9tICcuL2ljb25zL2ZpZ21hJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZU1pbnVzIH0gZnJvbSAnLi9pY29ucy9maWxlLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZVBsdXMgfSBmcm9tICcuL2ljb25zL2ZpbGUtcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVUZXh0IH0gZnJvbSAnLi9pY29ucy9maWxlLXRleHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlIH0gZnJvbSAnLi9pY29ucy9maWxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsbSB9IGZyb20gJy4vaWNvbnMvZmlsbSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbHRlciB9IGZyb20gJy4vaWNvbnMvZmlsdGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxhZyB9IGZyb20gJy4vaWNvbnMvZmxhZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvbGRlck1pbnVzIH0gZnJvbSAnLi9pY29ucy9mb2xkZXItbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXJQbHVzIH0gZnJvbSAnLi9pY29ucy9mb2xkZXItcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvbGRlciB9IGZyb20gJy4vaWNvbnMvZm9sZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRnJhbWVyIH0gZnJvbSAnLi9pY29ucy9mcmFtZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGcm93biB9IGZyb20gJy4vaWNvbnMvZnJvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaWZ0IH0gZnJvbSAnLi9pY29ucy9naWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0QnJhbmNoIH0gZnJvbSAnLi9pY29ucy9naXQtYnJhbmNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0Q29tbWl0IH0gZnJvbSAnLi9pY29ucy9naXQtY29tbWl0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0TWVyZ2UgfSBmcm9tICcuL2ljb25zL2dpdC1tZXJnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdFB1bGxSZXF1ZXN0IH0gZnJvbSAnLi9pY29ucy9naXQtcHVsbC1yZXF1ZXN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0SHViIH0gZnJvbSAnLi9pY29ucy9naXRodWInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaXRsYWIgfSBmcm9tICcuL2ljb25zL2dpdGxhYic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JlIH0gZnJvbSAnLi9pY29ucy9nbG9iZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdyaWQgfSBmcm9tICcuL2ljb25zL2dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIYXJkRHJpdmUgfSBmcm9tICcuL2ljb25zL2hhcmQtZHJpdmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIYXNoIH0gZnJvbSAnLi9pY29ucy9oYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGVhZHBob25lcyB9IGZyb20gJy4vaWNvbnMvaGVhZHBob25lcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlYXJ0IH0gZnJvbSAnLi9pY29ucy9oZWFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlbHBDaXJjbGUgfSBmcm9tICcuL2ljb25zL2hlbHAtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGV4YWdvbiB9IGZyb20gJy4vaWNvbnMvaGV4YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvbWUgfSBmcm9tICcuL2ljb25zL2hvbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSB9IGZyb20gJy4vaWNvbnMvaW1hZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbmJveCB9IGZyb20gJy4vaWNvbnMvaW5ib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbmZvIH0gZnJvbSAnLi9pY29ucy9pbmZvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5zdGFncmFtIH0gZnJvbSAnLi9pY29ucy9pbnN0YWdyYW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJdGFsaWMgfSBmcm9tICcuL2ljb25zL2l0YWxpYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEtleSB9IGZyb20gJy4vaWNvbnMva2V5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGF5ZXJzIH0gZnJvbSAnLi9pY29ucy9sYXllcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMYXlvdXQgfSBmcm9tICcuL2ljb25zL2xheW91dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpZmVCdW95IH0gZnJvbSAnLi9pY29ucy9saWZlLWJ1b3knO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rMiB9IGZyb20gJy4vaWNvbnMvbGluay0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluayB9IGZyb20gJy4vaWNvbnMvbGluayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmtlZGluIH0gZnJvbSAnLi9pY29ucy9saW5rZWRpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3QgfSBmcm9tICcuL2ljb25zL2xpc3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2FkZXIgfSBmcm9tICcuL2ljb25zL2xvYWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExvY2sgfSBmcm9tICcuL2ljb25zL2xvY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2dJbiB9IGZyb20gJy4vaWNvbnMvbG9nLWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nT3V0IH0gZnJvbSAnLi9pY29ucy9sb2ctb3V0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWFpbCB9IGZyb20gJy4vaWNvbnMvbWFpbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcFBpbiB9IGZyb20gJy4vaWNvbnMvbWFwLXBpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcCB9IGZyb20gJy4vaWNvbnMvbWFwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWF4aW1pemUyIH0gZnJvbSAnLi9pY29ucy9tYXhpbWl6ZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWF4aW1pemUgfSBmcm9tICcuL2ljb25zL21heGltaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVoIH0gZnJvbSAnLi9pY29ucy9tZWgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSAnLi9pY29ucy9tZW51JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVzc2FnZUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvbWVzc2FnZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXNzYWdlU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9tZXNzYWdlLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pY09mZiB9IGZyb20gJy4vaWNvbnMvbWljLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pYyB9IGZyb20gJy4vaWNvbnMvbWljJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWluaW1pemUyIH0gZnJvbSAnLi9pY29ucy9taW5pbWl6ZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWluaW1pemUgfSBmcm9tICcuL2ljb25zL21pbmltaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWludXNDaXJjbGUgfSBmcm9tICcuL2ljb25zL21pbnVzLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbnVzU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9taW51cy1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaW51cyB9IGZyb20gJy4vaWNvbnMvbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb25pdG9yIH0gZnJvbSAnLi9pY29ucy9tb25pdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9vbiB9IGZyb20gJy4vaWNvbnMvbW9vbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1vcmVIb3Jpem9udGFsIH0gZnJvbSAnLi9pY29ucy9tb3JlLWhvcml6b250YWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3JlVmVydGljYWwgfSBmcm9tICcuL2ljb25zL21vcmUtdmVydGljYWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3VzZVBvaW50ZXIgfSBmcm9tICcuL2ljb25zL21vdXNlLXBvaW50ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3ZlIH0gZnJvbSAnLi9pY29ucy9tb3ZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTXVzaWMgfSBmcm9tICcuL2ljb25zL211c2ljJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmF2aWdhdGlvbjIgfSBmcm9tICcuL2ljb25zL25hdmlnYXRpb24tMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5hdmlnYXRpb24gfSBmcm9tICcuL2ljb25zL25hdmlnYXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy9vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFja2FnZSB9IGZyb20gJy4vaWNvbnMvcGFja2FnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhcGVyY2xpcCB9IGZyb20gJy4vaWNvbnMvcGFwZXJjbGlwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGF1c2VDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BhdXNlLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhdXNlIH0gZnJvbSAnLi9pY29ucy9wYXVzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBlblRvb2wgfSBmcm9tICcuL2ljb25zL3Blbi10b29sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGVyY2VudCB9IGZyb20gJy4vaWNvbnMvcGVyY2VudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lQ2FsbCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtY2FsbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lRm9yd2FyZGVkIH0gZnJvbSAnLi9pY29ucy9waG9uZS1mb3J3YXJkZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUluY29taW5nIH0gZnJvbSAnLi9pY29ucy9waG9uZS1pbmNvbWluZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lTWlzc2VkIH0gZnJvbSAnLi9pY29ucy9waG9uZS1taXNzZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZU9mZiB9IGZyb20gJy4vaWNvbnMvcGhvbmUtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVPdXRnb2luZyB9IGZyb20gJy4vaWNvbnMvcGhvbmUtb3V0Z29pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZSB9IGZyb20gJy4vaWNvbnMvcGhvbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaWVDaGFydCB9IGZyb20gJy4vaWNvbnMvcGllLWNoYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGxheUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvcGxheS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGF5IH0gZnJvbSAnLi9pY29ucy9wbGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGx1c0NpcmNsZSB9IGZyb20gJy4vaWNvbnMvcGx1cy1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbHVzU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9wbHVzLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsdXMgfSBmcm9tICcuL2ljb25zL3BsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQb2NrZXQgfSBmcm9tICcuL2ljb25zL3BvY2tldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBvd2VyIH0gZnJvbSAnLi9pY29ucy9wb3dlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByaW50ZXIgfSBmcm9tICcuL2ljb25zL3ByaW50ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSYWRpbyB9IGZyb20gJy4vaWNvbnMvcmFkaW8nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWZyZXNoQ2N3IH0gZnJvbSAnLi9pY29ucy9yZWZyZXNoLWNjdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZnJlc2hDdyB9IGZyb20gJy4vaWNvbnMvcmVmcmVzaC1jdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlcGVhdCB9IGZyb20gJy4vaWNvbnMvcmVwZWF0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmV3aW5kIH0gZnJvbSAnLi9pY29ucy9yZXdpbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3RhdGVDY3cgfSBmcm9tICcuL2ljb25zL3JvdGF0ZS1jY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3RhdGVDdyB9IGZyb20gJy4vaWNvbnMvcm90YXRlLWN3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnNzIH0gZnJvbSAnLi9pY29ucy9yc3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTYXZlIH0gZnJvbSAnLi9pY29ucy9zYXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2Npc3NvcnMgfSBmcm9tICcuL2ljb25zL3NjaXNzb3JzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSAnLi9pY29ucy9zZWFyY2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZW5kIH0gZnJvbSAnLi9pY29ucy9zZW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VydmVyIH0gZnJvbSAnLi9pY29ucy9zZXJ2ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZXR0aW5ncyB9IGZyb20gJy4vaWNvbnMvc2V0dGluZ3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGFyZTIgfSBmcm9tICcuL2ljb25zL3NoYXJlLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGFyZSB9IGZyb20gJy4vaWNvbnMvc2hhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGllbGRPZmYgfSBmcm9tICcuL2ljb25zL3NoaWVsZC1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGllbGQgfSBmcm9tICcuL2ljb25zL3NoaWVsZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNob3BwaW5nQmFnIH0gZnJvbSAnLi9pY29ucy9zaG9wcGluZy1iYWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG9wcGluZ0NhcnQgfSBmcm9tICcuL2ljb25zL3Nob3BwaW5nLWNhcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaHVmZmxlIH0gZnJvbSAnLi9pY29ucy9zaHVmZmxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2lkZWJhciB9IGZyb20gJy4vaWNvbnMvc2lkZWJhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNraXBCYWNrIH0gZnJvbSAnLi9pY29ucy9za2lwLWJhY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lwRm9yd2FyZCB9IGZyb20gJy4vaWNvbnMvc2tpcC1mb3J3YXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xhY2sgfSBmcm9tICcuL2ljb25zL3NsYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xhc2ggfSBmcm9tICcuL2ljb25zL3NsYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xpZGVycyB9IGZyb20gJy4vaWNvbnMvc2xpZGVycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNtYXJ0cGhvbmUgfSBmcm9tICcuL2ljb25zL3NtYXJ0cGhvbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTbWlsZSB9IGZyb20gJy4vaWNvbnMvc21pbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGVha2VyIH0gZnJvbSAnLi9pY29ucy9zcGVha2VyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFyIH0gZnJvbSAnLi9pY29ucy9zdGFyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcENpcmNsZSB9IGZyb20gJy4vaWNvbnMvc3RvcC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW4gfSBmcm9tICcuL2ljb25zL3N1bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN1bnJpc2UgfSBmcm9tICcuL2ljb25zL3N1bnJpc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW5zZXQgfSBmcm9tICcuL2ljb25zL3N1bnNldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxldCB9IGZyb20gJy4vaWNvbnMvdGFibGV0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnIH0gZnJvbSAnLi9pY29ucy90YWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUYXJnZXQgfSBmcm9tICcuL2ljb25zL3RhcmdldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlcm1pbmFsIH0gZnJvbSAnLi9pY29ucy90ZXJtaW5hbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZXJtb21ldGVyIH0gZnJvbSAnLi9pY29ucy90aGVybW9tZXRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRodW1ic0Rvd24gfSBmcm9tICcuL2ljb25zL3RodW1icy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGh1bWJzVXAgfSBmcm9tICcuL2ljb25zL3RodW1icy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZUxlZnQgfSBmcm9tICcuL2ljb25zL3RvZ2dsZS1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9nZ2xlUmlnaHQgfSBmcm9tICcuL2ljb25zL3RvZ2dsZS1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvb2wgfSBmcm9tICcuL2ljb25zL3Rvb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFzaDIgfSBmcm9tICcuL2ljb25zL3RyYXNoLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFzaCB9IGZyb20gJy4vaWNvbnMvdHJhc2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVsbG8gfSBmcm9tICcuL2ljb25zL3RyZWxsbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyZW5kaW5nRG93biB9IGZyb20gJy4vaWNvbnMvdHJlbmRpbmctZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyZW5kaW5nVXAgfSBmcm9tICcuL2ljb25zL3RyZW5kaW5nLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJpYW5nbGUgfSBmcm9tICcuL2ljb25zL3RyaWFuZ2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJ1Y2sgfSBmcm9tICcuL2ljb25zL3RydWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHYgfSBmcm9tICcuL2ljb25zL3R2JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHdpdGNoIH0gZnJvbSAnLi9pY29ucy90d2l0Y2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUd2l0dGVyIH0gZnJvbSAnLi9pY29ucy90d2l0dGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHlwZSB9IGZyb20gJy4vaWNvbnMvdHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVtYnJlbGxhIH0gZnJvbSAnLi9pY29ucy91bWJyZWxsYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuZGVybGluZSB9IGZyb20gJy4vaWNvbnMvdW5kZXJsaW5lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVW5sb2NrIH0gZnJvbSAnLi9pY29ucy91bmxvY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVcGxvYWRDbG91ZCB9IGZyb20gJy4vaWNvbnMvdXBsb2FkLWNsb3VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXBsb2FkIH0gZnJvbSAnLi9pY29ucy91cGxvYWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyQ2hlY2sgfSBmcm9tICcuL2ljb25zL3VzZXItY2hlY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyTWludXMgfSBmcm9tICcuL2ljb25zL3VzZXItbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyUGx1cyB9IGZyb20gJy4vaWNvbnMvdXNlci1wbHVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlclggfSBmcm9tICcuL2ljb25zL3VzZXIteCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVzZXIgfSBmcm9tICcuL2ljb25zL3VzZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VycyB9IGZyb20gJy4vaWNvbnMvdXNlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlb09mZiB9IGZyb20gJy4vaWNvbnMvdmlkZW8tb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8gfSBmcm9tICcuL2ljb25zL3ZpZGVvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9pY2VtYWlsIH0gZnJvbSAnLi9pY29ucy92b2ljZW1haWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUxIH0gZnJvbSAnLi9pY29ucy92b2x1bWUtMSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvbHVtZTIgfSBmcm9tICcuL2ljb25zL3ZvbHVtZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lWCB9IGZyb20gJy4vaWNvbnMvdm9sdW1lLXgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUgfSBmcm9tICcuL2ljb25zL3ZvbHVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdhdGNoIH0gZnJvbSAnLi9pY29ucy93YXRjaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpZmlPZmYgfSBmcm9tICcuL2ljb25zL3dpZmktb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgV2lmaSB9IGZyb20gJy4vaWNvbnMvd2lmaSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpbmQgfSBmcm9tICcuL2ljb25zL3dpbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy94LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFhPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy94LW9jdGFnb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYU3F1YXJlIH0gZnJvbSAnLi9pY29ucy94LXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFggfSBmcm9tICcuL2ljb25zL3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBZb3V0dWJlIH0gZnJvbSAnLi9pY29ucy95b3V0dWJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmFwT2ZmIH0gZnJvbSAnLi9pY29ucy96YXAtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmFwIH0gZnJvbSAnLi9pY29ucy96YXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBab29tSW4gfSBmcm9tICcuL2ljb25zL3pvb20taW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBab29tT3V0IH0gZnJvbSAnLi9pY29ucy96b29tLW91dCc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGlzU2Vjb25kYXJ5ID0gX2EuaXNTZWNvbmRhcnksIGlzVGVydGlhcnkgPSBfYS5pc1RlcnRpYXJ5LCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DbGljayA9IF9hLm9uQ2xpY2ssIGlzRGVzdHJ1Y3RpdmUgPSBfYS5pc0Rlc3RydWN0aXZlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBsZXZlbCA9IGlzVGVydGlhcnkgPyBcInRlcnRpYXJ5XCIgOiBpc1NlY29uZGFyeSA/IFwic2Vjb25kYXJ5XCIgOiBcInByaW1hcnlcIjtcbiAgICB2YXIgbW9kaWZpY2F0b3IgPSBpc0Rlc3RydWN0aXZlID8gXCItZGVzdHJ1Y3RpdmVcIiA6IFwiXCI7XG4gICAgaWYgKGlzU2Vjb25kYXJ5ICYmIGlzVGVydGlhcnkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVXNlIG9ubHkgb25lIGxldmVsIG1vZGlmaWNhdG9yIFxcXCJpc1NlY29uZGFyeVxcXCIgb3IgXFxcImlzVGVydGlhcnlcXFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgb25DbGljazogb25DbGljaywgY2xhc3NOYW1lOiBcImJ1dHRvbiBidXR0b24tLVwiICsgbGV2ZWwgKyBtb2RpZmljYXRvciArIFwiIFwiICsgY2xhc3NOYW1lLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB9LCBjaGlsZHJlbikpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEJ1dHRvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJ1dHRvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIENoZWNrYm94ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGlkID0gX2EuaWQsIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgdHlwZSA9IF9hLnR5cGUsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBsYWJlbCA9IF9hLmxhYmVsLCBuYW1lID0gX2EubmFtZSwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHR5cGUgPSB0eXBlIHx8IFwiY2hlY2tib3hcIjtcbiAgICB2YXIgaW5wdXRDb25maWcgPSB7XG4gICAgICAgIGlkOiBpZCB8fCB0eXBlICsgXCItLVwiICsgKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLnRvRml4ZWQoMCksXG4gICAgfTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJzd2l0Y2hfX3RvZ2dsZVwiLCB0eXBlOiBcImNoZWNrYm94XCIgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJhZGlvXCI6XG4gICAgICAgICAgICBpbnB1dENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZyksIHsgY2xhc3NOYW1lOiBcInJhZGlvX19idXR0b25cIiwgdHlwZTogXCJyYWRpb1wiLCBuYW1lOiBuYW1lIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpbnB1dENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZyksIHsgY2xhc3NOYW1lOiBcImNoZWNrYm94X19ib3hcIiwgdHlwZTogXCJjaGVja2JveFwiIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBsYWJlbENsYXNzID0gdHlwZSArIFwiX19sYWJlbFwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHR5cGUgKyBcIiBcIiArIGNsYXNzTmFtZSB9LFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZywgeyBkZWZhdWx0Q2hlY2tlZDogZGVmYXVsdFZhbHVlLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQuY2hlY2tlZCwgZXZlbnQpOyB9LCBkaXNhYmxlZDogaXNEaXNhYmxlZCB9KSksXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IGxhYmVsQ2xhc3MsIGh0bWxGb3I6IGlucHV0Q29uZmlnLmlkIH0sIGxhYmVsKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IENoZWNrYm94O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2hlY2tib3guanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRGlzY2xvc3VyZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpc0RlZmF1bHRFeHBhbmRlZCA9IF9hLmlzRGVmYXVsdEV4cGFuZGVkLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGxhYmVsID0gX2EubGFiZWwsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGlzU2VjdGlvbiA9IF9hLmlzU2VjdGlvbiwgb25FeHBhbmQgPSBfYS5vbkV4cGFuZDtcbiAgICB2YXIgX2IgPSByZWFjdF8xLnVzZVN0YXRlKEJvb2xlYW4oaXNEZWZhdWx0RXhwYW5kZWQpKSwgaXNFeHBhbmRlZCA9IF9iWzBdLCBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UgPSBfYlsxXTtcbiAgICB2YXIgdG9nZ2xlRXhhcG5kU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uRXhwYW5kICYmIG9uRXhwYW5kKCFpc0V4cGFuZGVkKTtcbiAgICAgICAgb25FeHBhbmRlZFN0YXRlQ2hhbmdlKCFpc0V4cGFuZGVkKTtcbiAgICB9O1xuICAgIHZhciBsYWJlbENsYXNzID0gaXNTZWN0aW9uID8gXCJkaXNjbG9zdXJlLS1zZWN0aW9uXCIgOiBcIlwiO1xuICAgIHZhciBleHBhbmRDbGFzcyA9IGlzRXhwYW5kZWQgPyBcImRpc2Nsb3N1cmUtLWV4cGFuZGVkXCIgOiBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZSBcIiArIChjbGFzc05hbWUgfHwgXCJcIikgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZV9faXRlbSBcIiArIGV4cGFuZENsYXNzIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkaXNjbG9zdXJlX19sYWJlbCBcIiArIGxhYmVsQ2xhc3MsIG9uQ2xpY2s6IHRvZ2dsZUV4YXBuZFN0YXRlIH0sIGxhYmVsKSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmVfX2NvbnRlbnRcIiB9LCBjaGlsZHJlbikpKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gRGlzY2xvc3VyZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpc2Nsb3N1cmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEljb24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBuYW1lID0gX2EubmFtZSwgY29sb3IgPSBfYS5jb2xvciwgdGV4dCA9IF9hLnRleHQsIGlzU2VsZWN0ZWQgPSBfYS5pc1NlbGVjdGVkLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DbGljayA9IF9hLm9uQ2xpY2s7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgdmFyIGljb25DbGFzcyA9IHRleHQgPyBcIlwiIDogXCJpY29uLS1cIiArIG5hbWU7XG4gICAgdmFyIGNvbG9yQ2xhc3MgPSAhaXNEaXNhYmxlZCAmJiBjb2xvciA/IFwiaWNvbi0tXCIgKyBjb2xvciA6IFwiaWNvbi0tYmxhY2stM1wiO1xuICAgIHZhciBzZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZCA/IFwiaWNvbi1idXR0b24tLXNlbGVjdGVkXCIgOiBcIlwiO1xuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBzdHlsZToge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIH0sIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNsaWNrOiBvbkNsaWNrLCBjbGFzc05hbWU6IFwiaWNvbi1idXR0b24gXCIgKyBzZWxlY3RlZENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImljb24gXCIgKyBpY29uQ2xhc3MgfSwgdGV4dCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaWNvbiBcIiArIGljb25DbGFzcyArIFwiIFwiICsgY29sb3JDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIHRleHQpKTtcbiAgICB9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gSWNvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUljb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF8xID0gcmVxdWlyZShcIi4vXCIpO1xudmFyIElucHV0Q29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCB0eXBlID0gX2EudHlwZSwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiB0eXBlLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSwgZXZlbnQpOyB9IH0pKTtcbn07XG52YXIgSW5wdXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCB0eXBlID0gX2EudHlwZSwgaWNvbiA9IF9hLmljb24sIF9iID0gX2EuaWNvbkNvbG9yLCBpY29uQ29sb3IgPSBfYiA9PT0gdm9pZCAwID8gXCJibGFjazNcIiA6IF9iLCBkZWZhdWx0VmFsdWUgPSBfYS5kZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHR5cGUgPSB0eXBlIHx8IFwidGV4dFwiO1xuICAgIHZhciBpbnB1dENsYXNzID0gXCJpbnB1dF9fZmllbGRcIjtcbiAgICBpZiAoaWNvbikge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0IGlucHV0LS13aXRoLWljb25cIiB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXzEuSWNvbiwgeyBuYW1lOiBpY29uLCBjb2xvcjogaWNvbkNvbG9yLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkIH0pLFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIHsgY2xhc3NOYW1lOiBpbnB1dENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUsIHR5cGU6IHR5cGUsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSB9KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dFwiIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJbnB1dENvbXBvbmVudCwgeyBjbGFzc05hbWU6IGlucHV0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSwgdHlwZTogdHlwZSwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgb25DaGFuZ2U6IG9uQ2hhbmdlIH0pKSk7XG4gICAgfVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IElucHV0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5wdXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIExhYmVsID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxhYmVsIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIGNoaWxkcmVuKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gTGFiZWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1MYWJlbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciByZWFjdF9vdXRzaWRlX2NsaWNrX2hhbmRsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyXCIpKTtcbnZhciBTZWxlY3QgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5jbGFzc05hbWUsIGNsYXNzTmFtZSA9IF9iID09PSB2b2lkIDAgPyBcIlwiIDogX2IsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBvbkV4cGFuZCA9IF9hLm9uRXhwYW5kLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoZmFsc2UpLCBpc0V4cGFuZGVkID0gX2NbMF0sIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUob3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWU7XG4gICAgfSkpLCBzZWxlY3RlZE9wdGlvbiA9IF9kWzBdLCBvblNlbGVjdE9wdGlvbiA9IF9kWzFdO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25FeHBhbmQgJiYgb25FeHBhbmQoaXNFeHBhbmRlZCk7XG4gICAgfSwgW2lzRXhwYW5kZWRdKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uQ2hhbmdlICYmIHNlbGVjdGVkT3B0aW9uICYmIG9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9uKTtcbiAgICB9LCBbc2VsZWN0ZWRPcHRpb25dKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdTZWxlY3RlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBvblNlbGVjdE9wdGlvbihuZXdTZWxlY3RlZE9wdGlvbik7XG4gICAgfSwgW2RlZmF1bHRWYWx1ZV0pO1xuICAgIHZhciBoYW5kbGVFeHBhbmRDbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSghaXNFeHBhbmRlZCk7IH07XG4gICAgdmFyIGhhbmRsZU91dHNpZGVDbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZShmYWxzZSk7IH07XG4gICAgdmFyIGhhbmRsZVNlbGVjdENsaWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBuZXdPcHRpb24gPSBvcHRpb25zLmZpbmQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdiA9IF9hLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHYgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgb25FeHBhbmRlZFN0YXRlQ2hhbmdlKGZhbHNlKTtcbiAgICAgICAgb25TZWxlY3RPcHRpb24obmV3T3B0aW9uKTtcbiAgICB9O1xuICAgIHZhciBleHBhbmRCdXR0b25DbGFzcyA9IGlzRXhwYW5kZWQgPyBcInNlbGVjdC1tZW51X19idXR0b24tLWFjdGl2ZVwiIDogXCJcIjtcbiAgICB2YXIgZXhwYW5MaXN0Q2xhc3MgPSBpc0V4cGFuZGVkID8gXCJzZWxlY3QtbWVudV9fbWVudS0tYWN0aXZlXCIgOiBcIlwiO1xuICAgIHZhciBkaXNhYmxlZENvbG9yQ2xhc3MgPSBpc0Rpc2FibGVkID8gXCJpY29uLS1ibGFjay0zXCIgOiBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3Rfb3V0c2lkZV9jbGlja19oYW5kbGVyXzEuZGVmYXVsdCwgeyBvbk91dHNpZGVDbGljazogaGFuZGxlT3V0c2lkZUNsaWNrLCBkaXNhYmxlZDogIWlzRXhwYW5kZWQgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnUgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19idXR0b24gXCIgKyBleHBhbmRCdXR0b25DbGFzcyArIFwiIFwiICsgZGlzYWJsZWRDb2xvckNsYXNzLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIHRpdGxlOiBzZWxlY3RlZE9wdGlvbiA9PT0gbnVsbCB8fCBzZWxlY3RlZE9wdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRPcHRpb24udGl0bGUsIHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2xhYmVsXCIgfSwgKHNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uLmxhYmVsKSB8fCBwbGFjZWhvbGRlciksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19jYXJldFwiIH0pKSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX21lbnUgXCIgKyBleHBhbkxpc3RDbGFzcyArIFwiIFwiICsgZGlzYWJsZWRDb2xvckNsYXNzLCBzdHlsZTogeyB0b3A6IFwiLTI0cHhcIiB9IH0sIG9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1hcChmdW5jdGlvbiAoX2EsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWUsIGxhYmVsID0gX2EubGFiZWwsIGRpdmlkZXIgPSBfYS5kaXZpZGVyLCB0aXRsZSA9IF9hLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGl2aWRlciA/IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIHsga2V5OiBcInNlbGVjdC1vcHRpb24tZGl2aWRlci0tXCIgKyBpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICE9PSB0cnVlICYmIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2RpdmlkZXItbGFiZWxcIiB9LCBkaXZpZGVyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fZGl2aWRlclwiLCBrZXk6IFwic2VsZWN0LW9wdGlvbi0tXCIgKyBpIH0pKSkgOiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbSBcIiArIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwic2VsZWN0LW1lbnVfX2l0ZW0tLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYW5kbGVTZWxlY3RDbGljayh2YWx1ZSk7IH0sIGtleTogXCJzZWxlY3Qtb3B0aW9uLS1cIiArIGksIHRpdGxlOiB0aXRsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19pdGVtLWljb25cIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbS1sYWJlbFwiIH0sIGxhYmVsKSkpO1xuICAgICAgICAgICAgICAgIH0pKSkpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBTZWxlY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TZWxlY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBzaXplID0gX2Euc2l6ZSwgd2VpZ2h0ID0gX2Eud2VpZ2h0O1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBzaXplQ2xhc3MgPSBzaXplICYmIFwidHlwZS0tXCIgKyBzaXplO1xuICAgIHZhciB3ZWlnaHRDbGFzcyA9IHdlaWdodCAmJiBcInR5cGUtLVwiICsgd2VpZ2h0O1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInR5cGUgXCIgKyBzaXplQ2xhc3MgKyBcIiBcIiArIHdlaWdodENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUgfSwgY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgVGV4dGFyZWEgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBfYiA9IF9hLnJvd3MsIHJvd3MgPSBfYiA9PT0gdm9pZCAwID8gMiA6IF9iLCBkZWZhdWx0VmFsdWUgPSBfYS5kZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IHJvd3M6IHJvd3MsIGNsYXNzTmFtZTogXCJ0ZXh0YXJlYSBcIiArIGNsYXNzTmFtZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSwgZXZlbnQpOyB9IH0pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0YXJlYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRleHRhcmVhLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfMSA9IHJlcXVpcmUoXCIuL1wiKTtcbnZhciBUZXh0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgaWNvbk5hbWUgPSBfYS5pY29uTmFtZSwgaWNvblRleHQgPSBfYS5pY29uVGV4dCwgaWNvbkNvbG9yID0gX2EuaWNvbkNvbG9yO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwib25ib2FyZGluZy10aXAgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgaWNvbk5hbWUgJiYgKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm9uYm9hcmRpbmctdGlwX19pY29uXCIgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8xLkljb24sIHsgbmFtZTogaWNvbk5hbWUsIGNvbG9yOiBpY29uQ29sb3IsIHRleHQ6IGljb25UZXh0IH0pKSksXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInR5cGUgb25ib2FyZGluZy10aXBfX21zZ1wiIH0sIGNoaWxkcmVuKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRpdGxlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgbGV2ZWwgPSBfYS5sZXZlbCwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICBsZXZlbCA9IGxldmVsIHx8IFwiaDFcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICB2YXIgaGVhZGVyQ2xhc3NOYW1lID0gXCJzZWN0aW9uLXRpdGxlIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lO1xuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImgyXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImgzXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg1XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg2XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNlwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImgxXCIsIHsgY2xhc3NOYW1lOiBoZWFkZXJDbGFzc05hbWUgfSwgY2hpbGRyZW4pO1xuICAgIH1cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUaXRsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRpdGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZWxlY3QgPSBleHBvcnRzLlRleHRhcmVhID0gZXhwb3J0cy5UaXAgPSBleHBvcnRzLlRleHQgPSBleHBvcnRzLkxhYmVsID0gZXhwb3J0cy5UaXRsZSA9IGV4cG9ydHMuSWNvbiA9IGV4cG9ydHMuSW5wdXQgPSBleHBvcnRzLkRpc2Nsb3N1cmUgPSBleHBvcnRzLkNoZWNrYm94ID0gZXhwb3J0cy5CdXR0b24gPSB2b2lkIDA7XG52YXIgQnV0dG9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQnV0dG9uXCIpKTtcbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uXzEuZGVmYXVsdDtcbnZhciBDaGVja2JveF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0NoZWNrYm94XCIpKTtcbmV4cG9ydHMuQ2hlY2tib3ggPSBDaGVja2JveF8xLmRlZmF1bHQ7XG52YXIgRGlzY2xvc3VyZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0Rpc2Nsb3N1cmVcIikpO1xuZXhwb3J0cy5EaXNjbG9zdXJlID0gRGlzY2xvc3VyZV8xLmRlZmF1bHQ7XG52YXIgSW5wdXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9JbnB1dFwiKSk7XG5leHBvcnRzLklucHV0ID0gSW5wdXRfMS5kZWZhdWx0O1xudmFyIEljb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9JY29uXCIpKTtcbmV4cG9ydHMuSWNvbiA9IEljb25fMS5kZWZhdWx0O1xudmFyIFRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVGl0bGVcIikpO1xuZXhwb3J0cy5UaXRsZSA9IFRpdGxlXzEuZGVmYXVsdDtcbnZhciBMYWJlbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0xhYmVsXCIpKTtcbmV4cG9ydHMuTGFiZWwgPSBMYWJlbF8xLmRlZmF1bHQ7XG52YXIgVGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RleHRcIikpO1xuZXhwb3J0cy5UZXh0ID0gVGV4dF8xLmRlZmF1bHQ7XG52YXIgVGlwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVGlwXCIpKTtcbmV4cG9ydHMuVGlwID0gVGlwXzEuZGVmYXVsdDtcbnZhciBUZXh0YXJlYV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RleHRhcmVhXCIpKTtcbmV4cG9ydHMuVGV4dGFyZWEgPSBUZXh0YXJlYV8xLmRlZmF1bHQ7XG52YXIgU2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vU2VsZWN0XCIpKTtcbmV4cG9ydHMuU2VsZWN0ID0gU2VsZWN0XzEuZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZpZ21hLXBsdWdpbi1kcy5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX2FpcmJuYlByb3BUeXBlcyA9IHJlcXVpcmUoJ2FpcmJuYi1wcm9wLXR5cGVzJyk7XG5cbnZhciBfY29uc29saWRhdGVkRXZlbnRzID0gcmVxdWlyZSgnY29uc29saWRhdGVkLWV2ZW50cycpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoJ29iamVjdC52YWx1ZXMnKTtcblxudmFyIF9vYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb2JqZWN0KTtcblxudmFyIF9kb2N1bWVudCA9IHJlcXVpcmUoJ2RvY3VtZW50LmNvbnRhaW5zJyk7XG5cbnZhciBfZG9jdW1lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZG9jdW1lbnQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIERJU1BMQVkgPSB7XG4gIEJMT0NLOiAnYmxvY2snLFxuICBGTEVYOiAnZmxleCcsXG4gIElOTElORTogJ2lubGluZScsXG4gIElOTElORV9CTE9DSzogJ2lubGluZS1ibG9jaycsXG4gIENPTlRFTlRTOiAnY29udGVudHMnXG59O1xuXG52YXIgcHJvcFR5cGVzID0gKDAsIF9haXJibmJQcm9wVHlwZXMuZm9yYmlkRXh0cmFQcm9wcykoe1xuICBjaGlsZHJlbjogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5ub2RlLmlzUmVxdWlyZWQsXG4gIG9uT3V0c2lkZUNsaWNrOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYm9vbCxcbiAgdXNlQ2FwdHVyZTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5ib29sLFxuICBkaXNwbGF5OiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm9uZU9mKCgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShESVNQTEFZKSlcbn0pO1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBkaXNhYmxlZDogZmFsc2UsXG5cbiAgLy8gYHVzZUNhcHR1cmVgIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQgc28gdGhhdCBhIGBzdG9wUHJvcGFnYXRpb25gIGluIHRoZVxuICAvLyBjaGlsZHJlbiB3aWxsIG5vdCBwcmV2ZW50IGFsbCBvdXRzaWRlIGNsaWNrIGhhbmRsZXJzIGZyb20gZmlyaW5nIC0gbWFqYVxuICB1c2VDYXB0dXJlOiB0cnVlLFxuICBkaXNwbGF5OiBESVNQTEFZLkJMT0NLXG59O1xuXG52YXIgT3V0c2lkZUNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhPdXRzaWRlQ2xpY2tIYW5kbGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBPdXRzaWRlQ2xpY2tIYW5kbGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE91dHNpZGVDbGlja0hhbmRsZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBPdXRzaWRlQ2xpY2tIYW5kbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT3V0c2lkZUNsaWNrSGFuZGxlcikpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX3RoaXMub25Nb3VzZURvd24gPSBfdGhpcy5vbk1vdXNlRG93bi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbk1vdXNlVXAgPSBfdGhpcy5vbk1vdXNlVXAuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuc2V0Q2hpbGROb2RlUmVmID0gX3RoaXMuc2V0Q2hpbGROb2RlUmVmLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhPdXRzaWRlQ2xpY2tIYW5kbGVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgZGlzYWJsZWQgPSBfcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gX3Byb3BzLnVzZUNhcHR1cmU7XG5cblxuICAgICAgICBpZiAoIWRpc2FibGVkKSB0aGlzLmFkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXIodXNlQ2FwdHVyZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wb25lbnREaWRNb3VudDtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfcmVmMikge1xuICAgICAgICB2YXIgcHJldkRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG4gICAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzMi5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBfcHJvcHMyLnVzZUNhcHR1cmU7XG5cbiAgICAgICAgaWYgKHByZXZEaXNhYmxlZCAhPT0gZGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50RGlkVXBkYXRlO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50V2lsbFVubW91bnQ7XG4gICAgfSgpXG5cbiAgICAvLyBVc2UgbW91c2Vkb3duL21vdXNldXAgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyByZW1haW4gb3V0c2lkZSB0aGUgcm9vdCdzXG4gICAgLy8gZGVzY2VuZGFudCB0cmVlLCBldmVuIHdoZW4gZHJhZ2dlZC4gVGhpcyBzaG91bGQgYWxzbyBnZXQgdHJpZ2dlcmVkIG9uXG4gICAgLy8gdG91Y2ggZGV2aWNlcy5cblxuICB9LCB7XG4gICAga2V5OiAnb25Nb3VzZURvd24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICAgIHZhciB1c2VDYXB0dXJlID0gdGhpcy5wcm9wcy51c2VDYXB0dXJlO1xuXG5cbiAgICAgICAgdmFyIGlzRGVzY2VuZGFudE9mUm9vdCA9IHRoaXMuY2hpbGROb2RlICYmICgwLCBfZG9jdW1lbnQyWydkZWZhdWx0J10pKHRoaXMuY2hpbGROb2RlLCBlLnRhcmdldCk7XG4gICAgICAgIGlmICghaXNEZXNjZW5kYW50T2ZSb290KSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVtb3ZlTW91c2VVcCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSAoMCwgX2NvbnNvbGlkYXRlZEV2ZW50cy5hZGRFdmVudExpc3RlbmVyKShkb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCwgeyBjYXB0dXJlOiB1c2VDYXB0dXJlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbk1vdXNlRG93bjtcbiAgICB9KClcblxuICAgIC8vIFVzZSBtb3VzZWRvd24vbW91c2V1cCB0byBlbmZvcmNlIHRoYXQgY2xpY2tzIHJlbWFpbiBvdXRzaWRlIHRoZSByb290J3NcbiAgICAvLyBkZXNjZW5kYW50IHRyZWUsIGV2ZW4gd2hlbiBkcmFnZ2VkLiBUaGlzIHNob3VsZCBhbHNvIGdldCB0cmlnZ2VyZWQgb25cbiAgICAvLyB0b3VjaCBkZXZpY2VzLlxuXG4gIH0sIHtcbiAgICBrZXk6ICdvbk1vdXNlVXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBvbk1vdXNlVXAoZSkge1xuICAgICAgICB2YXIgb25PdXRzaWRlQ2xpY2sgPSB0aGlzLnByb3BzLm9uT3V0c2lkZUNsaWNrO1xuXG5cbiAgICAgICAgdmFyIGlzRGVzY2VuZGFudE9mUm9vdCA9IHRoaXMuY2hpbGROb2RlICYmICgwLCBfZG9jdW1lbnQyWydkZWZhdWx0J10pKHRoaXMuY2hpbGROb2RlLCBlLnRhcmdldCk7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAoKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Rlc2NlbmRhbnRPZlJvb3QpIHtcbiAgICAgICAgICBvbk91dHNpZGVDbGljayhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb25Nb3VzZVVwO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAnc2V0Q2hpbGROb2RlUmVmJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gc2V0Q2hpbGROb2RlUmVmKHJlZikge1xuICAgICAgICB0aGlzLmNoaWxkTm9kZSA9IHJlZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldENoaWxkTm9kZVJlZjtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2FkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBhZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVNb3VzZURvd24gPSAoMCwgX2NvbnNvbGlkYXRlZEV2ZW50cy5hZGRFdmVudExpc3RlbmVyKShkb2N1bWVudCwgJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHsgY2FwdHVyZTogdXNlQ2FwdHVyZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXI7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdyZW1vdmVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZURvd24pIHRoaXMucmVtb3ZlTW91c2VEb3duKCk7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHRoaXMucmVtb3ZlTW91c2VVcCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICAgIGRpc3BsYXkgPSBfcHJvcHMzLmRpc3BsYXk7XG5cblxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmOiB0aGlzLnNldENoaWxkTm9kZVJlZixcbiAgICAgICAgICAgIHN0eWxlOiBkaXNwbGF5ICE9PSBESVNQTEFZLkJMT0NLICYmICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShESVNQTEFZKS5pbmNsdWRlcyhkaXNwbGF5KSA/IHsgZGlzcGxheTogZGlzcGxheSB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGlsZHJlblxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH0oKVxuICB9XSk7XG5cbiAgcmV0dXJuIE91dHNpZGVDbGlja0hhbmRsZXI7XG59KF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBPdXRzaWRlQ2xpY2tIYW5kbGVyO1xuXG5cbk91dHNpZGVDbGlja0hhbmRsZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuT3V0c2lkZUNsaWNrSGFuZGxlci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnVpbGQvT3V0c2lkZUNsaWNrSGFuZGxlcicpO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBERUZBVUxUX1RIUkVBRF9JRCA9IDA7IC8vIENvdW50ZXJzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cblxudmFyIGludGVyYWN0aW9uSURDb3VudGVyID0gMDtcbnZhciB0aHJlYWRJRENvdW50ZXIgPSAwOyAvLyBTZXQgb2YgY3VycmVudGx5IHRyYWNlZCBpbnRlcmFjdGlvbnMuXG4vLyBJbnRlcmFjdGlvbnMgXCJzdGFja1wi4oCTXG4vLyBNZWFuaW5nIHRoYXQgbmV3bHkgdHJhY2VkIGludGVyYWN0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHNldC5cbi8vIFdoZW4gYW4gaW50ZXJhY3Rpb24gZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBwcmV2aW91cyBzZXQgKGlmIGFueSkgaXMgcmVzdG9yZWQuXG5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsOyAvLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cblxuZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSBudWxsO1xuXG57XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSB7XG4gICAgY3VycmVudDogbmV3IFNldCgpXG4gIH07XG4gIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2NsZWFyKGNhbGxiYWNrKSB7XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IG5ldyBTZXQoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIHtcbiAgICByZXR1cm4gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRUaHJlYWRJRCgpIHtcbiAgcmV0dXJuICsrdGhyZWFkSURDb3VudGVyO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfdHJhY2UobmFtZSwgdGltZXN0YW1wLCBjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciBpbnRlcmFjdGlvbiA9IHtcbiAgICBfX2NvdW50OiAxLFxuICAgIGlkOiBpbnRlcmFjdGlvbklEQ291bnRlcisrLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgfTtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7IC8vIFRyYWNlZCBpbnRlcmFjdGlvbnMgc2hvdWxkIHN0YWNrL2FjY3VtdWxhdGUuXG4gIC8vIFRvIGRvIHRoYXQsIGNsb25lIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVGhlIHByZXZpb3VzIHNldCB3aWxsIGJlIHJlc3RvcmVkIHVwb24gY29tcGxldGlvbi5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldChwcmV2SW50ZXJhY3Rpb25zKTtcbiAgaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IGludGVyYWN0aW9ucztcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTsgLy8gSWYgbm8gYXN5bmMgd29yayB3YXMgc2NoZWR1bGVkIGZvciB0aGlzIGludGVyYWN0aW9uLFxuICAgICAgICAgIC8vIE5vdGlmeSBzdWJzY3JpYmVycyB0aGF0IGl0J3MgY29tcGxldGVkLlxuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcChjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciB3cmFwcGVkSW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gIH0gLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVXBkYXRlIGFmdGVyIGNhbGxpbmcgc3Vic2NyaWJlcnMgaW4gY2FzZSBvZiBlcnJvci5cblxuXG4gIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gIH0pO1xuICB2YXIgaGFzUnVuID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gd3JhcHBlZCgpIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSB3cmFwcGVkSW50ZXJhY3Rpb25zO1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWhhc1J1bikge1xuICAgICAgICAvLyBXZSBvbmx5IGV4cGVjdCBhIHdyYXBwZWQgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSxcbiAgICAgICAgLy8gQnV0IGluIHRoZSBldmVudCB0aGF0IGl0J3MgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2XigJNcbiAgICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGludGVyYWN0aW9uIGNvdW50cyBvbmNlLlxuICAgICAgICBoYXNSdW4gPSB0cnVlOyAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuXG4gICAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWQuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICBpZiAoc3Vic2NyaWJlciAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gd3JhcHBlZDtcbn1cblxudmFyIHN1YnNjcmliZXJzID0gbnVsbDtcblxue1xuICBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV91bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmV4cG9ydHMudW5zdGFibGVfY2xlYXIgPSB1bnN0YWJsZV9jbGVhcjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudCA9IHVuc3RhYmxlX2dldEN1cnJlbnQ7XG5leHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEID0gdW5zdGFibGVfZ2V0VGhyZWFkSUQ7XG5leHBvcnRzLnVuc3RhYmxlX3N1YnNjcmliZSA9IHVuc3RhYmxlX3N1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfdHJhY2UgPSB1bnN0YWJsZV90cmFjZTtcbmV4cG9ydHMudW5zdGFibGVfdW5zdWJzY3JpYmUgPSB1bnN0YWJsZV91bnN1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcCA9IHVuc3RhYmxlX3dyYXA7XG4gIH0pKCk7XG59XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyA9IGZhbHNlO1xudmFyIGVuYWJsZVByb2ZpbGluZyA9IGZhbHNlO1xuXG52YXIgcmVxdWVzdEhvc3RDYWxsYmFjaztcbnZhciByZXF1ZXN0SG9zdFRpbWVvdXQ7XG52YXIgY2FuY2VsSG9zdFRpbWVvdXQ7XG52YXIgcmVxdWVzdFBhaW50O1xudmFyIGhhc1BlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5pZiAoaGFzUGVyZm9ybWFuY2VOb3cpIHtcbiAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICB2YXIgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICB9O1xufVxuXG5pZiAoIC8vIElmIFNjaGVkdWxlciBydW5zIGluIGEgbm9uLURPTSBlbnZpcm9ubWVudCwgaXQgZmFsbHMgYmFjayB0byBhIG5haXZlXG4vLyBpbXBsZW1lbnRhdGlvbiB1c2luZyBzZXRUaW1lb3V0LlxudHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgLy8gQ2hlY2sgaWYgTWVzc2FnZUNoYW5uZWwgaXMgc3VwcG9ydGVkLCB0b28uXG50eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICdmdW5jdGlvbicpIHtcbiAgLy8gSWYgdGhpcyBhY2NpZGVudGFsbHkgZ2V0cyBpbXBvcnRlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBlLmcuIEphdmFTY3JpcHRDb3JlLFxuICAvLyBmYWxsYmFjayB0byBhIG5haXZlIGltcGxlbWVudGF0aW9uLlxuICB2YXIgX2NhbGxiYWNrID0gbnVsbDtcbiAgdmFyIF90aW1lb3V0SUQgPSBudWxsO1xuXG4gIHZhciBfZmx1c2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICB2YXIgaGFzUmVtYWluaW5nVGltZSA9IHRydWU7XG5cbiAgICAgICAgX2NhbGxiYWNrKGhhc1JlbWFpbmluZ1RpbWUsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBfY2FsbGJhY2sgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZS1lbnRyYW5jeS5cbiAgICAgIHNldFRpbWVvdXQocmVxdWVzdEhvc3RDYWxsYmFjaywgMCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2FsbGJhY2sgPSBjYjtcbiAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2IsIG1zKSB7XG4gICAgX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQoY2IsIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhclRpbWVvdXQoX3RpbWVvdXRJRCk7XG4gIH07XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmVxdWVzdFBhaW50ID0gZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uICgpIHt9O1xufSBlbHNlIHtcbiAgLy8gQ2FwdHVyZSBsb2NhbCByZWZlcmVuY2VzIHRvIG5hdGl2ZSBBUElzLCBpbiBjYXNlIGEgcG9seWZpbGwgb3ZlcnJpZGVzIHRoZW0uXG4gIHZhciBfc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0O1xuICB2YXIgX2NsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQ7XG5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFNjaGVkdWxlciBubyBsb25nZXIgcmVxdWlyZXMgdGhlc2UgbWV0aG9kcyB0byBiZSBwb2x5ZmlsbGVkLiBCdXRcbiAgICAvLyBtYXliZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdhcm5pbmcgaWYgdGhleSBkb24ndCBleGlzdCwgdG8gcHJlc2VydmUgdGhlXG4gICAgLy8gb3B0aW9uIHRvIHJlbHkgb24gaXQgaW4gdGhlIGZ1dHVyZT9cbiAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICB2YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgdmFyIHRhc2tUaW1lb3V0SUQgPSAtMTsgLy8gU2NoZWR1bGVyIHBlcmlvZGljYWxseSB5aWVsZHMgaW4gY2FzZSB0aGVyZSBpcyBvdGhlciB3b3JrIG9uIHRoZSBtYWluXG4gIC8vIHRocmVhZCwgbGlrZSB1c2VyIGV2ZW50cy4gQnkgZGVmYXVsdCwgaXQgeWllbGRzIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS5cbiAgLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3RcbiAgLy8gbmVlZCB0byBiZSBmcmFtZSBhbGlnbmVkOyBmb3IgdGhvc2UgdGhhdCBkbywgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblxuICB2YXIgeWllbGRJbnRlcnZhbCA9IDU7XG4gIHZhciBkZWFkbGluZSA9IDA7IC8vIFRPRE86IE1ha2UgdGhpcyBjb25maWd1cmFibGVcblxuICB7XG4gICAgLy8gYGlzSW5wdXRQZW5kaW5nYCBpcyBub3QgYXZhaWxhYmxlLiBTaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmXG4gICAgLy8gdGhlcmUncyBwZW5kaW5nIGlucHV0LCBhbHdheXMgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpID49IGRlYWRsaW5lO1xuICAgIH07IC8vIFNpbmNlIHdlIHlpZWxkIGV2ZXJ5IGZyYW1lIHJlZ2FyZGxlc3MsIGByZXF1ZXN0UGFpbnRgIGhhcyBubyBlZmZlY3QuXG5cblxuICAgIHJlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICBpZiAoZnBzIDwgMCB8fCBmcHMgPiAxMjUpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXSgnZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsICcgKyAnZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnBzID4gMCkge1xuICAgICAgeWllbGRJbnRlcnZhbCA9IE1hdGguZmxvb3IoMTAwMCAvIGZwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7IC8vIFlpZWxkIGFmdGVyIGB5aWVsZEludGVydmFsYCBtcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHZzeW5jXG4gICAgICAvLyBjeWNsZS4gVGhpcyBtZWFucyB0aGVyZSdzIGFsd2F5cyB0aW1lIHJlbWFpbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAgICAvLyB0aGUgbWVzc2FnZSBldmVudC5cblxuICAgICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKCFoYXNNb3JlV29yaykge1xuICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgICAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbiAgfTtcblxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgIGlmICghaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbXMpIHtcbiAgICB0YXNrVGltZW91dElEID0gX3NldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgfSwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIF9jbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCk7XG5cbiAgICB0YXNrVGltZW91dElEID0gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgaGVhcC5wdXNoKG5vZGUpO1xuICBzaWZ0VXAoaGVhcCwgbm9kZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gcGVlayhoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHJldHVybiBmaXJzdCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpcnN0O1xufVxuZnVuY3Rpb24gcG9wKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcblxuICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICAgIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgICAgaGVhcFswXSA9IGxhc3Q7XG4gICAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRJbmRleCA9IGluZGV4IC0gMSA+Pj4gMTtcbiAgICB2YXIgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG5cbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShwYXJlbnQsIG5vZGUpID4gMCkge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBsYXJnZXIuIFN3YXAgcG9zaXRpb25zLlxuICAgICAgaGVhcFtwYXJlbnRJbmRleF0gPSBub2RlO1xuICAgICAgaGVhcFtpbmRleF0gPSBwYXJlbnQ7XG4gICAgICBpbmRleCA9IHBhcmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnREb3duKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcbiAgdmFyIGxlbmd0aCA9IGhlYXAubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBsZWZ0SW5kZXggPSAoaW5kZXggKyAxKSAqIDIgLSAxO1xuICAgIHZhciBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMTtcbiAgICB2YXIgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdOyAvLyBJZiB0aGUgbGVmdCBvciByaWdodCBub2RlIGlzIHNtYWxsZXIsIHN3YXAgd2l0aCB0aGUgc21hbGxlciBvZiB0aG9zZS5cblxuICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUID0gMjUwO1xudmFyIE5PUk1BTF9QUklPUklUWV9USU1FT1VUID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfVElNRU9VVCA9IDEwMDAwOyAvLyBOZXZlciB0aW1lcyBvdXRcblxudmFyIElETEVfUFJJT1JJVFlfVElNRU9VVCA9IG1heFNpZ25lZDMxQml0SW50OyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmN5LlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIC8vIENoZWNrIGZvciB0YXNrcyB0aGF0IGFyZSBubyBsb25nZXIgZGVsYXllZCBhbmQgYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICB2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gIHdoaWxlICh0aW1lciAhPT0gbnVsbCkge1xuICAgIGlmICh0aW1lci5jYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGltZXIgd2FzIGNhbmNlbGxlZC5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGltZXIgZmlyZWQuIFRyYW5zZmVyIHRvIHRoZSB0YXNrIHF1ZXVlLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgdGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWU7XG4gICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1haW5pbmcgdGltZXJzIGFyZSBwZW5kaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgIT09IG51bGwpIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoV29yayhoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuXG5cbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgIC8vIFdlIHNjaGVkdWxlZCBhIHRpbWVvdXQgYnV0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gQ2FuY2VsIGl0LlxuICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nV29yayA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgIG1hcmtUYXNrRXJyb3JlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKSkge1xuICAgICAgLy8gVGhpcyBjdXJyZW50VGFzayBoYXNuJ3QgZXhwaXJlZCwgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIGRlYWRsaW5lLlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuXG4gICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0KTtcbiAgICAgIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgaWYgKHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSkge1xuICAgICAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfbmV4dChldmVudEhhbmRsZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWw7XG5cbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEFueXRoaW5nIGxvd2VyIHRoYW4gbm9ybWFsIHByaW9yaXR5IHNob3VsZCByZW1haW4gYXQgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXBDYWxsYmFjayhjYWxsYmFjaykge1xuICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElETEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBMT1dfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgdGltZW91dCA9IE5PUk1BTF9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyB0aW1lb3V0O1xuICB2YXIgbmV3VGFzayA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuICAgIC8vIHdhaXQgdW50aWwgdGhlIG5leHQgdGltZSB3ZSB5aWVsZC5cblxuXG4gICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdUYXNrO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbigpIHtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY29udGludWVFeGVjdXRpb24oKSB7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKHRhc2spIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgeW91IGNhbid0IHJlbW92ZSBhcmJpdHJhcnkgbm9kZXMgZnJvbSBhblxuICAvLyBhcnJheSBiYXNlZCBoZWFwLCBvbmx5IHRoZSBmaXJzdCBvbmUuKVxuXG5cbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59XG5cbnZhciB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gIG51bGw7XG5cbmV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IExvd1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSB1bnN0YWJsZV9uZXh0O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVEUySWlCb1pXbG5hSFE5SWpnd0lpQjJhV1YzUW05NFBTSXdJREFnTVRFMklEZ3dJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOFp5QmpiR2x3TFhCaGRHZzlJblZ5YkNnalkyeHBjREJmT0RBMVh6TXdPREU0S1NJK0NqeHdZWFJvSUdROUlrMHdJRE5ETUNBeExqTTBNekUxSURFdU16UXpNVFVnTUNBeklEQklNVEV6UXpFeE5DNDJOVGNnTUNBeE1UWWdNUzR6TkRNeE5TQXhNVFlnTTFZNE1FZ3dWak5hSWlCbWFXeHNQU0lqTUVReE1qRXlJaTgrQ2p4eVpXTjBJSGRwWkhSb1BTSXhNVGdpSUdobGFXZG9kRDBpTWpRaUlHWnBiR3c5SWlNeE9ESXhNalVpTHo0S1BIQmhkR2dnWkQwaVRURXlMalVnTkRGRE1USXVOU0F6T1M0d05qY2dNVFF1TURZM0lETTNMalVnTVRZZ016Y3VOVWd4TVRjdU5WWTRNQzQxU0RFeUxqVldOREZhSWlCbWFXeHNQU0lqTVRneU1USTFJaUJ6ZEhKdmEyVTlJaU15UVRNMk0wTWlMejRLUEhKbFkzUWdlRDBpTkRVaUlIazlJallpSUhkcFpIUm9QU0l5TnlJZ2FHVnBaMmgwUFNJeE15SWdjbmc5SWpNaUlHWnBiR3c5SWlNelFUUTBORUlpTHo0S1BISmxZM1FnZUQwaU56WWlJSGs5SWpZaUlIZHBaSFJvUFNJeU55SWdhR1ZwWjJoMFBTSXhNeUlnY25nOUlqTWlJR1pwYkd3OUlpTXpRVFEwTkVJaUx6NEtQSEpsWTNRZ2VEMGlNVEEzSWlCNVBTSTJJaUIzYVdSMGFEMGlNamNpSUdobGFXZG9kRDBpTVRNaUlISjRQU0l6SWlCbWFXeHNQU0lqTTBFME5EUkNJaTgrQ2p4d1lYUm9JR1E5SWsweU15NDVNVElnTVRFdU5qYzNOVU15TXk0ek5EazJJRGt1TURFMU1EWWdNakF1TWpRMklEY3VORFE0TmpVZ01UWXVPVGd4TWlBNExqRTNPVFU1UXpFekxqY3hOalFnT0M0NU1EazNOeUF4TVM0MU1qVTJJREV4TGpZMk1EZ2dNVEl1TURnNElERTBMak15TWpWRE1USXVOalV3TlNBeE5pNDVPRFE1SURFMUxqYzFOQ0F4T0M0MU5URXpJREU1TGpBeE9EZ2dNVGN1T0RJd05FTXlNaTR5T0RNMklERTNMakE1TURJZ01qUXVORGMwTkNBeE5DNHpNems1SURJekxqa3hNaUF4TVM0Mk56YzFXazB4T0NBeE5TNDBOVFF4UXpFMkxqWTRNak1nTVRVdU5EVTBNU0F4TlM0Mk1UUTVJREUwTGpNMU5URWdNVFV1TmpFME9TQXhNME14TlM0Mk1UUTVJREV4TGpZME5Ea2dNVFl1TmpneklERXdMalUwTlRrZ01UZ2dNVEF1TlRRMU9VTXhPUzR6TVRjZ01UQXVOVFExT1NBeU1DNHpPRFV4SURFeExqWTBORElnTWpBdU16ZzFNU0F4TTBNeU1DNHpPRFV4SURFMExqTTFOVGdnTVRrdU16RTNJREUxTGpRMU5ERWdNVGdnTVRVdU5EVTBNVm9pSUdacGJHdzlJaU13TURoRE9Ua2lMejRLUEhCaGRHZ2daRDBpVFRFNExqVXlOemNnT1M0MU5qUXhPRU14Tmk0Mk16WTFJRGt1TlRZME1UZ2dNVFV1TVRBek1TQXhNUzR4TkRFNUlERTFMakV3TXpFZ01UTXVNRGczT0VNeE5TNHhNRE14SURFMUxqQXpNemNnTVRZdU5qTTJOU0F4Tmk0Mk1URTFJREU0TGpVeU56Y2dNVFl1TmpFeE5VTXlNQzQwTVRrMklERTJMall4TVRVZ01qRXVPVFV6SURFMUxqQXpNemNnTWpFdU9UVXpJREV6TGpBNE56aERNakV1T1RVeU1pQXhNUzR4TkRFNUlESXdMalF4T0RrZ09TNDFOalF4T0NBeE9DNDFNamMzSURrdU5UWTBNVGhhVFRFM0xqazVPVGtnTVRVdU1UUXpOa014Tmk0NE5Ea3pJREUxTGpFME16WWdNVFV1T1RFMk5pQXhOQzR4T0RNNUlERTFMamt4TmpZZ01UTkRNVFV1T1RFMk5pQXhNUzQ0TVRZeElERTJMamcwT1RNZ01UQXVPRFUyTkNBeE55NDVPVGs1SURFd0xqZzFOalJETVRrdU1UVXdOQ0F4TUM0NE5UWTBJREl3TGpBNE16RWdNVEV1T0RFMk1TQXlNQzR3T0RNeElERXpRekl3TGpBNE16RWdNVFF1TVRnek9TQXhPUzR4TlRBMElERTFMakUwTXpZZ01UY3VPVGs1T1NBeE5TNHhORE0yV2lJZ1ptbHNiRDBpSXpjd1EwTkVNeUl2UGdvOGNtVmpkQ0I0UFNJeU5DSWdlVDBpTkRraUlIZHBaSFJvUFNJM05DSWdhR1ZwWjJoMFBTSTJJaUJ5ZUQwaU1TSWdabWxzYkQwaUl6TkJORFEwUWlJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ua2lJSGRwWkhSb1BTSTFPU0lnYUdWcFoyaDBQU0k0SWlCeWVEMGlNU0lnWm1sc2JEMGlJek5CTkRRMFFpSXZQZ284TDJjK0NqeGtaV1p6UGdvOFkyeHBjRkJoZEdnZ2FXUTlJbU5zYVhBd1h6Z3dOVjh6TURneE9DSStDanh3WVhSb0lHUTlJazB3SURORE1DQXhMak0wTXpFMUlERXVNelF6TVRVZ01DQXpJREJJTVRFelF6RXhOQzQyTlRjZ01DQXhNVFlnTVM0ek5ETXhOU0F4TVRZZ00xWTRNRWd3VmpOYUlpQm1hV3hzUFNKM2FHbDBaU0l2UGdvOEwyTnNhWEJRWVhSb1BnbzhMMlJsWm5NK0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlPQ0lnYUdWcFoyaDBQU0l4TXlJZ2RtbGxkMEp2ZUQwaU1DQXdJRGdnTVRNaUlHWnBiR3c5SW01dmJtVWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk5pNDJJREV5TGpSTU1DNDRNREF3TURNZ05pNDFNREF3TVV3MkxqWWdNQzQyTURBd01EWk1OeTQwSURFdU5EQXdNREZNTWk0eUlEWXVOVEF3TURGTU55NDBJREV4TGpaTU5pNDJJREV5TGpSYUlpQm1hV3hzUFNJak1qZ3pOak0ySWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEdOcGNtTnNaU0JqZUQwaU1UWXVOU0lnWTNrOUlqRTJMalVpSUhJOUlqa3VOU0lnYzNSeWIydGxQU0lqTTBRNVJFWkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNeTFwYm5OcFpHVXRNVjg0TUROZk1qUTBPVElpSUdacGJHdzlJbmRvYVhSbElqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE5DNDJPRElnTWpBdU5ETXlRekUwTGpnM056SWdNakF1TmpJM01pQXhOUzR4T1RNNElESXdMall5TnpJZ01UVXVNemc1TVNBeU1DNDBNekpNTVRZdU1EazJNaUF4T1M0M01qUTVUREl4TGpZMU5UTWdNVFF1TVRZMU4wTXlNUzQ0TlRBMklERXpMamszTURVZ01qRXVPRFV3TmlBeE15NDJOVE01SURJeExqWTFOVE1nTVRNdU5EVTROa3d5TUM0NU5EZ3lJREV5TGpjMU1UVkRNakF1TnpVeklERXlMalUxTmpNZ01qQXVORE0yTkNBeE1pNDFOVFl6SURJd0xqSTBNVEVnTVRJdU56VXhOVXd4TlM0d016VTFJREUzTGprMU56Rk1NVE11TWpZM09DQXhOaTR4T0RrelF6RXpMakEzTWpVZ01UVXVPVGswTVNBeE1pNDNOVFU1SURFMUxqazVOREVnTVRJdU5UWXdOeUF4Tmk0eE9Ea3pUREV4TGpnMU16WWdNVFl1T0RrMk5FTXhNUzQyTlRneklERTNMakE1TVRjZ01URXVOalU0TXlBeE55NDBNRGd6SURFeExqZzFNellnTVRjdU5qQXpOa3d4TXk0NU56UTVJREU1TGpjeU5EbE1NVFF1TmpneUlESXdMalF6TWxvaUx6NEtQQzl0WVhOclBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFMExqWTRNaUF5TUM0ME16SkRNVFF1T0RjM01pQXlNQzQyTWpjeUlERTFMakU1TXpnZ01qQXVOakkzTWlBeE5TNHpPRGt4SURJd0xqUXpNa3d4Tmk0d09UWXlJREU1TGpjeU5EbE1NakV1TmpVMU15QXhOQzR4TmpVM1F6SXhMamcxTURZZ01UTXVPVGN3TlNBeU1TNDROVEEySURFekxqWTFNemtnTWpFdU5qVTFNeUF4TXk0ME5UZzJUREl3TGprME9ESWdNVEl1TnpVeE5VTXlNQzQzTlRNZ01USXVOVFUyTXlBeU1DNDBNelkwSURFeUxqVTFOak1nTWpBdU1qUXhNU0F4TWk0M05URTFUREUxTGpBek5UVWdNVGN1T1RVM01Vd3hNeTR5TmpjNElERTJMakU0T1RORE1UTXVNRGN5TlNBeE5TNDVPVFF4SURFeUxqYzFOVGtnTVRVdU9UazBNU0F4TWk0MU5qQTNJREUyTGpFNE9UTk1NVEV1T0RVek5pQXhOaTQ0T1RZMFF6RXhMalkxT0RNZ01UY3VNRGt4TnlBeE1TNDJOVGd6SURFM0xqUXdPRE1nTVRFdU9EVXpOaUF4Tnk0Mk1ETTJUREV6TGprM05Ea2dNVGt1TnpJME9Vd3hOQzQyT0RJZ01qQXVORE15V2lJZ1ptbHNiRDBpSXpORU9VUkdSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UVXVNRE0xTlNBeE55NDVOVGN4VERFMExqTXlPRFFnTVRndU5qWTBNa3d4TlM0d016VTFJREU1TGpNM01UTk1NVFV1TnpReU5pQXhPQzQyTmpReVRERTFMakF6TlRVZ01UY3VPVFUzTVZwTk1UUXVOamd5SURFNUxqY3lORGxETVRRdU9EYzNNaUF4T1M0MU1qazJJREUxTGpFNU16Z2dNVGt1TlRJNU5pQXhOUzR6T0RreElERTVMamN5TkRsTU1UTXVPVGMwT1NBeU1TNHhNemt4UXpFMExqVTJNRGNnTWpFdU56STBPU0F4TlM0MU1UQTBJREl4TGpjeU5Ea2dNVFl1TURrMk1pQXlNUzR4TXpreFRERTBMalk0TWlBeE9TNDNNalE1V2sweE5TNHpPRGt4SURFNUxqQXhOemhNTVRRdU5qZ3lJREU1TGpjeU5EbE1NVFl1TURrMk1pQXlNUzR4TXpreFRERTJMamd3TXpNZ01qQXVORE15VERFMUxqTTRPVEVnTVRrdU1ERTNPRnBOTWpBdU9UUTRNaUF4TXk0ME5UZzJUREUxTGpNNE9URWdNVGt1TURFM09Fd3hOaTQ0TURNeklESXdMalF6TWt3eU1pNHpOakkwSURFMExqZzNNamhNTWpBdU9UUTRNaUF4TXk0ME5UZzJXazB5TUM0NU5EZ3lJREUwTGpFMk5UZERNakF1TnpVeklERXpMamszTURVZ01qQXVOelV6SURFekxqWTFNemtnTWpBdU9UUTRNaUF4TXk0ME5UZzJUREl5TGpNMk1qUWdNVFF1T0RjeU9FTXlNaTQ1TkRneUlERTBMakk0TnpFZ01qSXVPVFE0TWlBeE15NHpNemN6SURJeUxqTTJNalFnTVRJdU56VXhOVXd5TUM0NU5EZ3lJREUwTGpFMk5UZGFUVEl3TGpJME1URWdNVE11TkRVNE5rd3lNQzQ1TkRneUlERTBMakUyTlRkTU1qSXVNell5TkNBeE1pNDNOVEUxVERJeExqWTFOVE1nTVRJdU1EUTBORXd5TUM0eU5ERXhJREV6TGpRMU9EWmFUVEl3TGprME9ESWdNVE11TkRVNE5rTXlNQzQzTlRNZ01UTXVOalV6T1NBeU1DNDBNelkwSURFekxqWTFNemtnTWpBdU1qUXhNU0F4TXk0ME5UZzJUREl4TGpZMU5UTWdNVEl1TURRME5FTXlNUzR3TmprMUlERXhMalExT0RZZ01qQXVNVEU1T0NBeE1TNDBOVGcySURFNUxqVXpOQ0F4TWk0d05EUTBUREl3TGprME9ESWdNVE11TkRVNE5scE5NVFV1TnpReU5pQXhPQzQyTmpReVRESXdMamswT0RJZ01UTXVORFU0Tmt3eE9TNDFNelFnTVRJdU1EUTBORXd4TkM0ek1qZzBJREUzTGpJMVRERTFMamMwTWpZZ01UZ3VOalkwTWxwTk1USXVOVFl3TnlBeE5pNDRPVFkwVERFMExqTXlPRFFnTVRndU5qWTBNa3d4TlM0M05ESTJJREUzTGpJMVRERXpMamszTkRrZ01UVXVORGd5TWt3eE1pNDFOakEzSURFMkxqZzVOalJhVFRFekxqSTJOemdnTVRZdU9EazJORU14TXk0d056STFJREUzTGpBNU1UY2dNVEl1TnpVMU9TQXhOeTR3T1RFM0lERXlMalUyTURjZ01UWXVPRGsyTkV3eE15NDVOelE1SURFMUxqUTRNakpETVRNdU16ZzVNU0F4TkM0NE9UWTBJREV5TGpRek9UTWdNVFF1T0RrMk5DQXhNUzQ0TlRNMklERTFMalE0TWpKTU1UTXVNalkzT0NBeE5pNDRPVFkwV2sweE1pNDFOakEzSURFM0xqWXdNelpNTVRNdU1qWTNPQ0F4Tmk0NE9UWTBUREV4TGpnMU16WWdNVFV1TkRneU1rd3hNUzR4TkRZMElERTJMakU0T1ROTU1USXVOVFl3TnlBeE55NDJNRE0yV2sweE1pNDFOakEzSURFMkxqZzVOalJETVRJdU56VTFPU0F4Tnk0d09URTNJREV5TGpjMU5Ua2dNVGN1TkRBNE15QXhNaTQxTmpBM0lERTNMall3TXpaTU1URXVNVFEyTkNBeE5pNHhPRGt6UXpFd0xqVTJNRGNnTVRZdU56YzFNU0F4TUM0MU5qQTNJREUzTGpjeU5Ea2dNVEV1TVRRMk5DQXhPQzR6TVRBM1RERXlMalUyTURjZ01UWXVPRGsyTkZwTk1UUXVOamd5SURFNUxqQXhOemhNTVRJdU5UWXdOeUF4Tmk0NE9UWTBUREV4TGpFME5qUWdNVGd1TXpFd04wd3hNeTR5TmpjNElESXdMalF6TWt3eE5DNDJPRElnTVRrdU1ERTNPRnBOTVRVdU16ZzVNU0F4T1M0M01qUTVUREUwTGpZNE1pQXhPUzR3TVRjNFRERXpMakkyTnpnZ01qQXVORE15VERFekxqazNORGtnTWpFdU1UTTVNVXd4TlM0ek9Ea3hJREU1TGpjeU5EbGFJaUJtYVd4c1BTSWpNMFE1UkVaR0lpQnRZWE5yUFNKMWNtd29JM0JoZEdndE15MXBibk5wWkdVdE1WODRNRE5mTWpRME9USXBJaTgrQ2p3dmMzWm5QZ289XCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTXhSak15TkRjaUx6NEtQRzFoYzJzZ2FXUTlJbkJoZEdndE1pMXBibk5wWkdVdE1WODFNREZmTmpBMk5pSWdabWxzYkQwaWQyaHBkR1VpUGdvOGNHRjBhQ0JtYVd4c0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdOc2FYQXRjblZzWlQwaVpYWmxibTlrWkNJZ1pEMGlUVEU0SURFd1NESXpRekl6TGpVMU1qTWdNVEFnTWpRZ01UQXVORFEzTnlBeU5DQXhNVll4TmtneE9GWXhNRnBOTVRZZ09FZ3hPRWd5TTBNeU5DNDJOVFk1SURnZ01qWWdPUzR6TkRNeE5TQXlOaUF4TVZZeU0wTXlOaUF5TkM0Mk5UWTVJREkwTGpZMU5qa2dNallnTWpNZ01qWklNVGhJTVRaSU1URkRPUzR6TkRNeE5TQXlOaUE0SURJMExqWTFOamtnT0NBeU0xWXhNVU00SURrdU16UXpNVFVnT1M0ek5ETXhOU0E0SURFeElEaElNVFphVFRFNElESTBTREl6UXpJekxqVTFNak1nTWpRZ01qUWdNak11TlRVeU15QXlOQ0F5TTFZeE9FZ3hPRll5TkZwTk1UWWdNalJJTVRGRE1UQXVORFEzTnlBeU5DQXhNQ0F5TXk0MU5USXpJREV3SURJelZqRTRTREUyVmpJMFdrMHhNQ0F4TmxZeE1VTXhNQ0F4TUM0ME5EYzNJREV3TGpRME56Y2dNVEFnTVRFZ01UQklNVFpXTVRaSU1UQmFJaTgrQ2p3dmJXRnphejRLUEhCaGRHZ2daRDBpVFRFNElERXdWamxJTVRkV01UQklNVGhhVFRJMElERTJWakUzU0RJMVZqRTJTREkwV2sweE9DQXhOa2d4TjFZeE4wZ3hPRll4TmxwTk1UZ2dNalJJTVRkV01qVklNVGhXTWpSYVRUSTBJREU0U0RJMVZqRTNTREkwVmpFNFdrMHhPQ0F4T0ZZeE4wZ3hOMVl4T0VneE9GcE5NVFlnTWpSV01qVklNVGRXTWpSSU1UWmFUVEV3SURFNFZqRTNTRGxXTVRoSU1UQmFUVEUySURFNFNERTNWakUzU0RFMlZqRTRXazB4TUNBeE5rZzVWakUzU0RFd1ZqRTJXazB4TmlBeE1FZ3hOMVk1U0RFMlZqRXdXazB4TmlBeE5sWXhOMGd4TjFZeE5rZ3hObHBOTWpNZ09VZ3hPRll4TVVneU0xWTVXazB5TlNBeE1VTXlOU0E1TGpnNU5UUXpJREkwTGpFd05EWWdPU0F5TXlBNVZqRXhTREkxV2sweU5TQXhObFl4TVVneU0xWXhOa2d5TlZwTk1qUWdNVFZJTVRoV01UZElNalJXTVRWYVRURTVJREUyVmpFd1NERTNWakUyU0RFNVdrMHhPQ0EzU0RFMlZqbElNVGhXTjFwTk1qTWdOMGd4T0ZZNVNESXpWamRhVFRJM0lERXhRekkzSURndU56a3dPRFlnTWpVdU1qQTVNU0EzSURJeklEZFdPVU15TkM0eE1EUTJJRGtnTWpVZ09TNDRPVFUwTXlBeU5TQXhNVWd5TjFwTk1qY2dNak5XTVRGSU1qVldNak5JTWpkYVRUSXpJREkzUXpJMUxqSXdPVEVnTWpjZ01qY2dNalV1TWpBNU1TQXlOeUF5TTBneU5VTXlOU0F5TkM0eE1EUTJJREkwTGpFd05EWWdNalVnTWpNZ01qVldNamRhVFRFNElESTNTREl6VmpJMVNERTRWakkzV2sweE5pQXlOMGd4T0ZZeU5VZ3hObFl5TjFwTk1URWdNamRJTVRaV01qVklNVEZXTWpkYVRUY2dNak5ETnlBeU5TNHlNRGt4SURndU56a3dPRFlnTWpjZ01URWdNamRXTWpWRE9TNDRPVFUwTXlBeU5TQTVJREkwTGpFd05EWWdPU0F5TTBnM1drMDNJREV4VmpJelNEbFdNVEZJTjFwTk1URWdOME00TGpjNU1EZzJJRGNnTnlBNExqYzVNRGcySURjZ01URklPVU01SURrdU9EazFORE1nT1M0NE9UVTBNeUE1SURFeElEbFdOMXBOTVRZZ04wZ3hNVlk1U0RFMlZqZGFUVEU0SURJMVNESXpWakl6U0RFNFZqSTFXazB5TXlBeU5VTXlOQzR4TURRMklESTFJREkxSURJMExqRXdORFlnTWpVZ01qTklNak5XTWpWYVRUSTFJREl6VmpFNFNESXpWakl6U0RJMVdrMHhPQ0F4T1VneU5GWXhOMGd4T0ZZeE9WcE5NVGtnTWpSV01UaElNVGRXTWpSSU1UbGFUVEV4SURJMVNERTJWakl6U0RFeFZqSTFXazA1SURJelF6a2dNalF1TVRBME5pQTVMamc1TlRReklESTFJREV4SURJMVZqSXpTREV4U0RsYVRUa2dNVGhXTWpOSU1URldNVGhJT1ZwTk1UQWdNVGxJTVRaV01UZElNVEJXTVRsYVRURTFJREU0VmpJMFNERTNWakU0U0RFMVdrMDVJREV4VmpFMlNERXhWakV4U0RsYVRURXhJRGxET1M0NE9UVTBNeUE1SURrZ09TNDRPVFUwTXlBNUlERXhTREV4VmpFeFZqbGFUVEUySURsSU1URldNVEZJTVRaV09WcE5NVFVnTVRCV01UWklNVGRXTVRCSU1UVmFUVEUySURFMVNERXdWakUzU0RFMlZqRTFXaUlnWm1sc2JEMGlJek5FT1VSR1JpSWdiV0Z6YXowaWRYSnNLQ053WVhSb0xUSXRhVzV6YVdSbExURmZOVEF4WHpZd05qWXBJaTgrQ2p4eVpXTjBJSGc5SWpJd0lpQjVQU0kxSWlCM2FXUjBhRDBpT1NJZ2FHVnBaMmgwUFNJNUlpQm1hV3hzUFNJak1qRXlSVE5FSWk4K0NqeHRZWE5ySUdsa1BTSndZWFJvTFRVdGFXNXphV1JsTFRKZk5UQXhYell3TmpZaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHlOQ0F4TVM0MVF6STBJREV4TGpjM05qRWdNalF1TWpJek9TQXhNaUF5TkM0MUlERXlTREkxTGpWRE1qVXVOemMyTVNBeE1pQXlOaUF4TVM0M056WXhJREkySURFeExqVldNVEJJTWpjdU5VTXlOeTQzTnpZeElERXdJREk0SURrdU56YzJNVFFnTWpnZ09TNDFWamd1TlVNeU9DQTRMakl5TXpnMklESTNMamMzTmpFZ09DQXlOeTQxSURoSU1qWldOaTQxUXpJMklEWXVNakl6T0RZZ01qVXVOemMyTVNBMklESTFMalVnTmtneU5DNDFRekkwTGpJeU16a2dOaUF5TkNBMkxqSXlNemcySURJMElEWXVOVlk0U0RJeUxqVkRNakl1TWpJek9TQTRJREl5SURndU1qSXpPRFlnTWpJZ09DNDFWamt1TlVNeU1pQTVMamMzTmpFMElESXlMakl5TXprZ01UQWdNakl1TlNBeE1FZ3lORll4TVM0MVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1qUWdNVEV1TlVNeU5DQXhNUzQzTnpZeElESTBMakl5TXprZ01USWdNalF1TlNBeE1rZ3lOUzQxUXpJMUxqYzNOakVnTVRJZ01qWWdNVEV1TnpjMk1TQXlOaUF4TVM0MVZqRXdTREkzTGpWRE1qY3VOemMyTVNBeE1DQXlPQ0E1TGpjM05qRTBJREk0SURrdU5WWTRMalZETWpnZ09DNHlNak00TmlBeU55NDNOell4SURnZ01qY3VOU0E0U0RJMlZqWXVOVU15TmlBMkxqSXlNemcySURJMUxqYzNOakVnTmlBeU5TNDFJRFpJTWpRdU5VTXlOQzR5TWpNNUlEWWdNalFnTmk0eU1qTTROaUF5TkNBMkxqVldPRWd5TWk0MVF6SXlMakl5TXprZ09DQXlNaUE0TGpJeU16ZzJJREl5SURndU5WWTVMalZETWpJZ09TNDNOell4TkNBeU1pNHlNak01SURFd0lESXlMalVnTVRCSU1qUldNVEV1TlZvaUlHWnBiR3c5SWlNelJEbEVSa1lpTHo0S1BIQmhkR2dnWkQwaVRUSTJJREV3VmpsSU1qVldNVEJJTWpaYVRUSTJJRGhJTWpWV09VZ3lObFk0V2sweU5DQTRWamxJTWpWV09FZ3lORnBOTWpRZ01UQklNalZXT1VneU5GWXhNRnBOTWpRdU5TQXhNVU15TkM0M056WXhJREV4SURJMUlERXhMakl5TXprZ01qVWdNVEV1TlVneU0wTXlNeUF4TWk0ek1qZzBJREl6TGpZM01UWWdNVE1nTWpRdU5TQXhNMVl4TVZwTk1qVXVOU0F4TVVneU5DNDFWakV6U0RJMUxqVldNVEZhVFRJMUlERXhMalZETWpVZ01URXVNakl6T1NBeU5TNHlNak01SURFeElESTFMalVnTVRGV01UTkRNall1TXpJNE5DQXhNeUF5TnlBeE1pNHpNamcwSURJM0lERXhMalZJTWpWYVRUSTFJREV3VmpFeExqVklNamRXTVRCSU1qVmFUVEkzTGpVZ09VZ3lObFl4TVVneU55NDFWamxhVFRJM0lEa3VOVU15TnlBNUxqSXlNemcySURJM0xqSXlNemtnT1NBeU55NDFJRGxXTVRGRE1qZ3VNekk0TkNBeE1TQXlPU0F4TUM0ek1qZzBJREk1SURrdU5VZ3lOMXBOTWpjZ09DNDFWamt1TlVneU9WWTRMalZJTWpkYVRUSTNMalVnT1VNeU55NHlNak01SURrZ01qY2dPQzQzTnpZeE5DQXlOeUE0TGpWSU1qbERNamtnTnk0Mk56RTFOeUF5T0M0ek1qZzBJRGNnTWpjdU5TQTNWamxhVFRJMklEbElNamN1TlZZM1NESTJWamxhVFRJMUlEWXVOVlk0U0RJM1ZqWXVOVWd5TlZwTk1qVXVOU0EzUXpJMUxqSXlNemtnTnlBeU5TQTJMamMzTmpFMElESTFJRFl1TlVneU4wTXlOeUExTGpZM01UVTNJREkyTGpNeU9EUWdOU0F5TlM0MUlEVldOMXBOTWpRdU5TQTNTREkxTGpWV05VZ3lOQzQxVmpkYVRUSTFJRFl1TlVNeU5TQTJMamMzTmpFMElESTBMamMzTmpFZ055QXlOQzQxSURkV05VTXlNeTQyTnpFMklEVWdNak1nTlM0Mk56RTFOeUF5TXlBMkxqVklNalZhVFRJMUlEaFdOaTQxU0RJelZqaElNalZhVFRJeUxqVWdPVWd5TkZZM1NESXlMalZXT1ZwTk1qTWdPQzQxUXpJeklEZ3VOemMyTVRRZ01qSXVOemMyTVNBNUlESXlMalVnT1ZZM1F6SXhMalkzTVRZZ055QXlNU0EzTGpZM01UVTNJREl4SURndU5VZ3lNMXBOTWpNZ09TNDFWamd1TlVneU1WWTVMalZJTWpOYVRUSXlMalVnT1VNeU1pNDNOell4SURrZ01qTWdPUzR5TWpNNE5pQXlNeUE1TGpWSU1qRkRNakVnTVRBdU16STROQ0F5TVM0Mk56RTJJREV4SURJeUxqVWdNVEZXT1ZwTk1qUWdPVWd5TWk0MVZqRXhTREkwVmpsYVRUSTFJREV4TGpWV01UQklNak5XTVRFdU5VZ3lOVm9pSUdacGJHdzlJaU16UkRsRVJrWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMDFMV2x1YzJsa1pTMHlYelV3TVY4Mk1EWTJLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTXhSak15TkRjaUx6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE1pQXhOME14TWlBeE5DNHlNemcySURFMExqSXpPRFlnTVRJZ01UY2dNVEpXTVRkV01qSkRNVFF1TWpNNE5pQXlNaUF4TWlBeE9TNDNOakUwSURFeUlERTNXazB4TnlBeE1FTXhNeTR4TXpRZ01UQWdNVEFnTVRNdU1UTTBJREV3SURFM1F6RXdJREl3TGpnMk5pQXhNeTR4TXpRZ01qUWdNVGNnTWpSRE1qQXVPRFkySURJMElESTBJREl3TGpnMk5pQXlOQ0F4TjBNeU5DQXhNeTR4TXpRZ01qQXVPRFkySURFd0lERTNJREV3V2lJZ1ptbHNiRDBpSXpORU9VUkdSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UY2dOUzR3T0RNek5GWTNMakkxSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHhOeUF5Tmk0M05WWXlPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJRGd1TlRjeE5qZE1NVEF1TVRFZ01UQXVNVEVpSUhOMGNtOXJaVDBpSXpORU9VUkdSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURJekxqZzVUREkxTGpReU9ETWdNalV1TkRJNE15SWdjM1J5YjJ0bFBTSWpNMFE1UkVaR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284Y0dGMGFDQmtQU0pOTlM0d09ETXpOQ0F4TjBnM0xqSTFJaUJ6ZEhKdmEyVTlJaU16UkRsRVJrWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweU5pNDNOU0F4TjBneU9DNDVNVFkzSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lESTFMalF5T0ROTU1UQXVNVEVnTWpNdU9Ea2lJSE4wY205clpUMGlJek5FT1VSR1JpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREV3TGpFeFRESTFMalF5T0RNZ09DNDFOekUyTnlJZ2MzUnliMnRsUFNJak0wUTVSRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU5GUmtZNFJrWWlMejRLUEdOcGNtTnNaU0JqZUQwaU1UWXVOU0lnWTNrOUlqRTJMalVpSUhJOUlqa3VOU0lnYzNSeWIydGxQU0lqTUVNM05FUkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNeTFwYm5OcFpHVXRNVjgxTUROZk5UWXhOU0lnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFMExqWTRNaUF5TUM0ME16SkRNVFF1T0RjM01pQXlNQzQyTWpjeUlERTFMakU1TXpnZ01qQXVOakkzTWlBeE5TNHpPRGt4SURJd0xqUXpNa3d4Tmk0d09UWXlJREU1TGpjeU5EbE1NakV1TmpVMU15QXhOQzR4TmpVM1F6SXhMamcxTURZZ01UTXVPVGN3TlNBeU1TNDROVEEySURFekxqWTFNemtnTWpFdU5qVTFNeUF4TXk0ME5UZzJUREl3TGprME9ESWdNVEl1TnpVeE5VTXlNQzQzTlRNZ01USXVOVFUyTXlBeU1DNDBNelkwSURFeUxqVTFOak1nTWpBdU1qUXhNU0F4TWk0M05URTFUREUxTGpBek5UVWdNVGN1T1RVM01Vd3hNeTR5TmpjNElERTJMakU0T1RORE1UTXVNRGN5TlNBeE5TNDVPVFF4SURFeUxqYzFOVGtnTVRVdU9UazBNU0F4TWk0MU5qQTNJREUyTGpFNE9UTk1NVEV1T0RVek5pQXhOaTQ0T1RZMFF6RXhMalkxT0RNZ01UY3VNRGt4TnlBeE1TNDJOVGd6SURFM0xqUXdPRE1nTVRFdU9EVXpOaUF4Tnk0Mk1ETTJUREV6TGprM05Ea2dNVGt1TnpJME9Vd3hOQzQyT0RJZ01qQXVORE15V2lJdlBnbzhMMjFoYzJzK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTVRRdU5qZ3lJREl3TGpRek1rTXhOQzQ0TnpjeUlESXdMall5TnpJZ01UVXVNVGt6T0NBeU1DNDJNamN5SURFMUxqTTRPVEVnTWpBdU5ETXlUREUyTGpBNU5qSWdNVGt1TnpJME9Vd3lNUzQyTlRVeklERTBMakUyTlRkRE1qRXVPRFV3TmlBeE15NDVOekExSURJeExqZzFNRFlnTVRNdU5qVXpPU0F5TVM0Mk5UVXpJREV6TGpRMU9EWk1NakF1T1RRNE1pQXhNaTQzTlRFMVF6SXdMamMxTXlBeE1pNDFOVFl6SURJd0xqUXpOalFnTVRJdU5UVTJNeUF5TUM0eU5ERXhJREV5TGpjMU1UVk1NVFV1TURNMU5TQXhOeTQ1TlRjeFRERXpMakkyTnpnZ01UWXVNVGc1TTBNeE15NHdOekkxSURFMUxqazVOREVnTVRJdU56VTFPU0F4TlM0NU9UUXhJREV5TGpVMk1EY2dNVFl1TVRnNU0wd3hNUzQ0TlRNMklERTJMamc1TmpSRE1URXVOalU0TXlBeE55NHdPVEUzSURFeExqWTFPRE1nTVRjdU5EQTRNeUF4TVM0NE5UTTJJREUzTGpZd016Wk1NVE11T1RjME9TQXhPUzQzTWpRNVRERTBMalk0TWlBeU1DNDBNekphSWlCbWFXeHNQU0lqTUVNM05FUkdJaTgrQ2p4d1lYUm9JR1E5SWsweE5TNHdNelUxSURFM0xqazFOekZNTVRRdU16STROQ0F4T0M0Mk5qUXlUREUxTGpBek5UVWdNVGt1TXpjeE0wd3hOUzQzTkRJMklERTRMalkyTkRKTU1UVXVNRE0xTlNBeE55NDVOVGN4V2sweE5DNDJPRElnTVRrdU56STBPVU14TkM0NE56Y3lJREU1TGpVeU9UWWdNVFV1TVRrek9DQXhPUzQxTWprMklERTFMak00T1RFZ01Ua3VOekkwT1V3eE15NDVOelE1SURJeExqRXpPVEZETVRRdU5UWXdOeUF5TVM0M01qUTVJREUxTGpVeE1EUWdNakV1TnpJME9TQXhOaTR3T1RZeUlESXhMakV6T1RGTU1UUXVOamd5SURFNUxqY3lORGxhVFRFMUxqTTRPVEVnTVRrdU1ERTNPRXd4TkM0Mk9ESWdNVGt1TnpJME9Vd3hOaTR3T1RZeUlESXhMakV6T1RGTU1UWXVPREF6TXlBeU1DNDBNekpNTVRVdU16ZzVNU0F4T1M0d01UYzRXazB5TUM0NU5EZ3lJREV6TGpRMU9EWk1NVFV1TXpnNU1TQXhPUzR3TVRjNFRERTJMamd3TXpNZ01qQXVORE15VERJeUxqTTJNalFnTVRRdU9EY3lPRXd5TUM0NU5EZ3lJREV6TGpRMU9EWmFUVEl3TGprME9ESWdNVFF1TVRZMU4wTXlNQzQzTlRNZ01UTXVPVGN3TlNBeU1DNDNOVE1nTVRNdU5qVXpPU0F5TUM0NU5EZ3lJREV6TGpRMU9EWk1Nakl1TXpZeU5DQXhOQzQ0TnpJNFF6SXlMamswT0RJZ01UUXVNamczTVNBeU1pNDVORGd5SURFekxqTXpOek1nTWpJdU16WXlOQ0F4TWk0M05URTFUREl3TGprME9ESWdNVFF1TVRZMU4xcE5NakF1TWpReE1TQXhNeTQwTlRnMlRESXdMamswT0RJZ01UUXVNVFkxTjB3eU1pNHpOakkwSURFeUxqYzFNVFZNTWpFdU5qVTFNeUF4TWk0d05EUTBUREl3TGpJME1URWdNVE11TkRVNE5scE5NakF1T1RRNE1pQXhNeTQwTlRnMlF6SXdMamMxTXlBeE15NDJOVE01SURJd0xqUXpOalFnTVRNdU5qVXpPU0F5TUM0eU5ERXhJREV6TGpRMU9EWk1NakV1TmpVMU15QXhNaTR3TkRRMFF6SXhMakEyT1RVZ01URXVORFU0TmlBeU1DNHhNVGs0SURFeExqUTFPRFlnTVRrdU5UTTBJREV5TGpBME5EUk1NakF1T1RRNE1pQXhNeTQwTlRnMldrMHhOUzQzTkRJMklERTRMalkyTkRKTU1qQXVPVFE0TWlBeE15NDBOVGcyVERFNUxqVXpOQ0F4TWk0d05EUTBUREUwTGpNeU9EUWdNVGN1TWpWTU1UVXVOelF5TmlBeE9DNDJOalF5V2sweE1pNDFOakEzSURFMkxqZzVOalJNTVRRdU16STROQ0F4T0M0Mk5qUXlUREUxTGpjME1qWWdNVGN1TWpWTU1UTXVPVGMwT1NBeE5TNDBPREl5VERFeUxqVTJNRGNnTVRZdU9EazJORnBOTVRNdU1qWTNPQ0F4Tmk0NE9UWTBRekV6TGpBM01qVWdNVGN1TURreE55QXhNaTQzTlRVNUlERTNMakE1TVRjZ01USXVOVFl3TnlBeE5pNDRPVFkwVERFekxqazNORGtnTVRVdU5EZ3lNa014TXk0ek9Ea3hJREUwTGpnNU5qUWdNVEl1TkRNNU15QXhOQzQ0T1RZMElERXhMamcxTXpZZ01UVXVORGd5TWt3eE15NHlOamM0SURFMkxqZzVOalJhVFRFeUxqVTJNRGNnTVRjdU5qQXpOa3d4TXk0eU5qYzRJREUyTGpnNU5qUk1NVEV1T0RVek5pQXhOUzQwT0RJeVRERXhMakUwTmpRZ01UWXVNVGc1TTB3eE1pNDFOakEzSURFM0xqWXdNelphVFRFeUxqVTJNRGNnTVRZdU9EazJORU14TWk0M05UVTVJREUzTGpBNU1UY2dNVEl1TnpVMU9TQXhOeTQwTURneklERXlMalUyTURjZ01UY3VOakF6Tmt3eE1TNHhORFkwSURFMkxqRTRPVE5ETVRBdU5UWXdOeUF4Tmk0M056VXhJREV3TGpVMk1EY2dNVGN1TnpJME9TQXhNUzR4TkRZMElERTRMak14TURkTU1USXVOVFl3TnlBeE5pNDRPVFkwV2sweE5DNDJPRElnTVRrdU1ERTNPRXd4TWk0MU5qQTNJREUyTGpnNU5qUk1NVEV1TVRRMk5DQXhPQzR6TVRBM1RERXpMakkyTnpnZ01qQXVORE15VERFMExqWTRNaUF4T1M0d01UYzRXazB4TlM0ek9Ea3hJREU1TGpjeU5EbE1NVFF1TmpneUlERTVMakF4TnpoTU1UTXVNalkzT0NBeU1DNDBNekpNTVRNdU9UYzBPU0F5TVM0eE16a3hUREUxTGpNNE9URWdNVGt1TnpJME9Wb2lJR1pwYkd3OUlpTXdRemMwUkVZaUlHMWhjMnM5SW5WeWJDZ2pjR0YwYUMwekxXbHVjMmxrWlMweFh6VXdNMTgxTmpFMUtTSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRVaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5TQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB3SURjdU5VTXdJRE11TkNBekxqUWdNQ0EzTGpVZ01FTXhNUzQySURBZ01UVWdNeTQwSURFMUlEY3VOVU14TlNBeE1TNDJJREV4TGpZZ01UVWdOeTQxSURFMVF6TXVOQ0F4TlNBd0lERXhMallnTUNBM0xqVmFUVEVnTnk0MVF6RWdNVEV1TVNBekxqa2dNVFFnTnk0MUlERTBRekV4TGpFZ01UUWdNVFFnTVRFdU1TQXhOQ0EzTGpWRE1UUWdNeTQ1SURFeExqRWdNU0EzTGpVZ01VTXpMamtnTVNBeElETXVPU0F4SURjdU5WcE5PQ0F4TVZZeE1rZzNWakV4U0RoYVRUVWdOUzQxUXpVZ05DNHhJRFl1TVNBeklEY3VOU0F6UXpndU9TQXpJREV3SURRdU1TQXhNQ0ExTGpWRE1UQWdOaTQzTWpnd01pQTVMak00TkRRNElEY3VNVGcyTmpNZ09DNDRPVFU0TVNBM0xqVTFNRGN6UXpndU9ESTNNemNnTnk0Mk1ERTNNaUE0TGpjMk1UUXlJRGN1TmpVd09EWWdPQzQzSURjdU4wTTRMalkzTmpZeklEY3VOekUwTURJZ09DNDJOVE01TVNBM0xqY3lOell4SURndU5qTXhPRFFnTnk0M05EQTRNVU00TGpFNE1UYzBJRGd1TURFZ09DQTRMakV4T0RjZ09DQTRMalZXT1ZZeE1FZzNWamxXT0M0MVF6Y2dOeTQxT1RVME5DQTNMalUzTWpjMUlEY3VNVGd4T0RJZ055NDVOemd4TkNBMkxqZzRPVEEzUXpndU1ESXdPVEVnTmk0NE5UZ3hPQ0E0TGpBMk1UZ3lJRFl1T0RJNE5qTWdPQzR4SURZdU9FTTRMakV5TWprM0lEWXVOemcyTWpJZ09DNHhORFUzTWlBMkxqYzNNalkxSURndU1UWTRNalFnTmk0M05Ua3lNa000TGpZek5Ua2dOaTQwT0RBek5pQTVJRFl1TWpZek1qVWdPU0ExTGpWRE9TQTBMamNnT0M0eklEUWdOeTQxSURSRE5pNDNJRFFnTmlBMExqY2dOaUExTGpWV05rZzFWalV1TlZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdlRDBpTUM0MUlpQjVQU0l3TGpVaUlIZHBaSFJvUFNJNUlpQm9aV2xuYUhROUlqa2lJSE4wY205clpUMGlZbXhoWTJzaUx6NEtQSEpsWTNRZ2VEMGlOQzQxSWlCNVBTSTBMalVpSUhkcFpIUm9QU0k1SWlCb1pXbG5hSFE5SWpraUlITjBjbTlyWlQwaVlteGhZMnNpTHo0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEdOcGNtTnNaU0JqZUQwaU55SWdZM2s5SWpjaUlISTlJall1TlNJZ2MzUnliMnRsUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQR3hwYm1VZ2VURTlJall1TlNJZ2VESTlJakUwSWlCNU1qMGlOaTQxSWlCemRISnZhMlU5SW1Kc1lXTnJJaTgrQ2p3dmMzWm5QZ289XCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQR2NnWTJ4cGNDMXdZWFJvUFNKMWNtd29JMk5zYVhBd1h6SXdNRjgwTmpBNEtTSStDanh3WVhSb0lHUTlJazB3TGprek56Z3lNaUF4TWk0MVREY2dNa3d4TXk0d05qSXlJREV5TGpWSU1DNDVNemM0TWpKYUlpQnpkSEp2YTJVOUltSnNZV05ySWk4K0Nqd3ZaejRLUEdSbFpuTStDanhqYkdsd1VHRjBhQ0JwWkQwaVkyeHBjREJmTWpBd1h6UTJNRGdpUGdvOGNtVmpkQ0IzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlHWnBiR3c5SW5kb2FYUmxJaTgrQ2p3dlkyeHBjRkJoZEdnK0Nqd3ZaR1ZtY3o0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRFeUlESklNbFl4TWtneE1sWXlXaUlnYzNSeWIydGxQU0ppYkdGamF5SXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJakUwSWlCb1pXbG5hSFE5SWpFMElpQm1hV3hzUFNKM2FHbDBaU0l2UGdvOGNHRjBhQ0JrUFNKTk1pQXlTREV5VmpWSU1URldNMGczTGpWV01URklPVll4TWtnMVZqRXhTRFl1TlZZelNETldOVWd5VmpKYUlpQm1hV3hzUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UTWlJR2hsYVdkb2REMGlNeUlnZG1sbGQwSnZlRDBpTUNBd0lERXpJRE1pSUdacGJHdzlJbTV2Ym1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTXlBeExqSTFRek1nTVM0NU5EQXpOaUF5TGpRME1ETTJJREl1TlNBeExqYzFJREl1TlVNeExqQTFPVFkwSURJdU5TQXdMalVnTVM0NU5EQXpOaUF3TGpVZ01TNHlOVU13TGpVZ01DNDFOVGsyTkRRZ01TNHdOVGsyTkNBd0lERXVOelVnTUVNeUxqUTBNRE0ySURBZ015QXdMalUxT1RZME5DQXpJREV1TWpWYVRUZ2dNUzR5TlVNNElERXVPVFF3TXpZZ055NDBOREF6TmlBeUxqVWdOaTQzTlNBeUxqVkROaTR3TlRrMk5DQXlMalVnTlM0MUlERXVPVFF3TXpZZ05TNDFJREV1TWpWRE5TNDFJREF1TlRVNU5qUTBJRFl1TURVNU5qUWdNQ0EyTGpjMUlEQkROeTQwTkRBek5pQXdJRGdnTUM0MU5UazJORFFnT0NBeExqSTFXazB4TVM0M05TQXlMalZETVRJdU5EUXdOQ0F5TGpVZ01UTWdNUzQ1TkRBek5pQXhNeUF4TGpJMVF6RXpJREF1TlRVNU5qUTBJREV5TGpRME1EUWdNQ0F4TVM0M05TQXdRekV4TGpBMU9UWWdNQ0F4TUM0MUlEQXVOVFU1TmpRMElERXdMalVnTVM0eU5VTXhNQzQxSURFdU9UUXdNellnTVRFdU1EVTVOaUF5TGpVZ01URXVOelVnTWk0MVdpSWdabWxzYkQwaUl6VTFOakEyTUNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU5GUmtZNFJrWWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNaTFwYm5OcFpHVXRNVjgxTURGZk5qQTJOaUlnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFNElERXdTREl6UXpJekxqVTFNak1nTVRBZ01qUWdNVEF1TkRRM055QXlOQ0F4TVZZeE5rZ3hPRll4TUZwTk1UWWdPRWd4T0VneU0wTXlOQzQyTlRZNUlEZ2dNallnT1M0ek5ETXhOU0F5TmlBeE1WWXlNME15TmlBeU5DNDJOVFk1SURJMExqWTFOamtnTWpZZ01qTWdNalpJTVRoSU1UWklNVEZET1M0ek5ETXhOU0F5TmlBNElESTBMalkxTmprZ09DQXlNMVl4TVVNNElEa3VNelF6TVRVZ09TNHpORE14TlNBNElERXhJRGhJTVRaYVRURTRJREkwU0RJelF6SXpMalUxTWpNZ01qUWdNalFnTWpNdU5UVXlNeUF5TkNBeU0xWXhPRWd4T0ZZeU5GcE5NVFlnTWpSSU1URkRNVEF1TkRRM055QXlOQ0F4TUNBeU15NDFOVEl6SURFd0lESXpWakU0U0RFMlZqSTBXazB4TUNBeE5sWXhNVU14TUNBeE1DNDBORGMzSURFd0xqUTBOemNnTVRBZ01URWdNVEJJTVRaV01UWklNVEJhSWk4K0Nqd3ZiV0Z6YXo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB4T0NBeE1FZ3lNME15TXk0MU5USXpJREV3SURJMElERXdMalEwTnpjZ01qUWdNVEZXTVRaSU1UaFdNVEJhVFRFMklEaElNVGhJTWpORE1qUXVOalUyT1NBNElESTJJRGt1TXpRek1UVWdNallnTVRGV01qTkRNallnTWpRdU5qVTJPU0F5TkM0Mk5UWTVJREkySURJeklESTJTREU0U0RFMlNERXhRemt1TXpRek1UVWdNallnT0NBeU5DNDJOVFk1SURnZ01qTldNVEZET0NBNUxqTTBNekUxSURrdU16UXpNVFVnT0NBeE1TQTRTREUyV2sweE9DQXlORWd5TTBNeU15NDFOVEl6SURJMElESTBJREl6TGpVMU1qTWdNalFnTWpOV01UaElNVGhXTWpSYVRURTJJREkwU0RFeFF6RXdMalEwTnpjZ01qUWdNVEFnTWpNdU5UVXlNeUF4TUNBeU0xWXhPRWd4TmxZeU5GcE5NVEFnTVRaV01URkRNVEFnTVRBdU5EUTNOeUF4TUM0ME5EYzNJREV3SURFeElERXdTREUyVmpFMlNERXdXaUlnWm1sc2JEMGlkMmhwZEdVaUx6NEtQSEJoZEdnZ1pEMGlUVEU0SURFd1ZqbElNVGRXTVRCSU1UaGFUVEkwSURFMlZqRTNTREkxVmpFMlNESTBXazB4T0NBeE5rZ3hOMVl4TjBneE9GWXhObHBOTVRnZ01qUklNVGRXTWpWSU1UaFdNalJhVFRJMElERTRTREkxVmpFM1NESTBWakU0V2sweE9DQXhPRll4TjBneE4xWXhPRWd4T0ZwTk1UWWdNalJXTWpWSU1UZFdNalJJTVRaYVRURXdJREU0VmpFM1NEbFdNVGhJTVRCYVRURTJJREU0U0RFM1ZqRTNTREUyVmpFNFdrMHhNQ0F4TmtnNVZqRTNTREV3VmpFMldrMHhOaUF4TUVneE4xWTVTREUyVmpFd1drMHhOaUF4TmxZeE4wZ3hOMVl4TmtneE5scE5Nak1nT1VneE9GWXhNVWd5TTFZNVdrMHlOU0F4TVVNeU5TQTVMamc1TlRReklESTBMakV3TkRZZ09TQXlNeUE1VmpFeFNESTFXazB5TlNBeE5sWXhNVWd5TTFZeE5rZ3lOVnBOTWpRZ01UVklNVGhXTVRkSU1qUldNVFZhVFRFNUlERTJWakV3U0RFM1ZqRTJTREU1V2sweE9DQTNTREUyVmpsSU1UaFdOMXBOTWpNZ04wZ3hPRlk1U0RJelZqZGFUVEkzSURFeFF6STNJRGd1Tnprd09EWWdNalV1TWpBNU1TQTNJREl6SURkV09VTXlOQzR4TURRMklEa2dNalVnT1M0NE9UVTBNeUF5TlNBeE1VZ3lOMXBOTWpjZ01qTldNVEZJTWpWV01qTklNamRhVFRJeklESTNRekkxTGpJd09URWdNamNnTWpjZ01qVXVNakE1TVNBeU55QXlNMGd5TlVNeU5TQXlOQzR4TURRMklESTBMakV3TkRZZ01qVWdNak1nTWpWV01qZGFUVEU0SURJM1NESXpWakkxU0RFNFZqSTNXazB4TmlBeU4wZ3hPRll5TlVneE5sWXlOMXBOTVRFZ01qZElNVFpXTWpWSU1URldNamRhVFRjZ01qTkROeUF5TlM0eU1Ea3hJRGd1Tnprd09EWWdNamNnTVRFZ01qZFdNalZET1M0NE9UVTBNeUF5TlNBNUlESTBMakV3TkRZZ09TQXlNMGczV2swM0lERXhWakl6U0RsV01URklOMXBOTVRFZ04wTTRMamM1TURnMklEY2dOeUE0TGpjNU1EZzJJRGNnTVRGSU9VTTVJRGt1T0RrMU5ETWdPUzQ0T1RVME15QTVJREV4SURsV04xcE5NVFlnTjBneE1WWTVTREUyVmpkYVRURTRJREkxU0RJelZqSXpTREU0VmpJMVdrMHlNeUF5TlVNeU5DNHhNRFEySURJMUlESTFJREkwTGpFd05EWWdNalVnTWpOSU1qTldNalZhVFRJMUlESXpWakU0U0RJelZqSXpTREkxV2sweE9DQXhPVWd5TkZZeE4wZ3hPRll4T1ZwTk1Ua2dNalJXTVRoSU1UZFdNalJJTVRsYVRURXhJREkxU0RFMlZqSXpTREV4VmpJMVdrMDVJREl6UXprZ01qUXVNVEEwTmlBNUxqZzVOVFF6SURJMUlERXhJREkxVmpJelNERXhTRGxhVFRrZ01UaFdNak5JTVRGV01UaElPVnBOTVRBZ01UbElNVFpXTVRkSU1UQldNVGxhVFRFMUlERTRWakkwU0RFM1ZqRTRTREUxV2swNUlERXhWakUyU0RFeFZqRXhTRGxhVFRFeElEbERPUzQ0T1RVME15QTVJRGtnT1M0NE9UVTBNeUE1SURFeFNERXhWakV4VmpsYVRURTJJRGxJTVRGV01URklNVFpXT1ZwTk1UVWdNVEJXTVRaSU1UZFdNVEJJTVRWYVRURTJJREUxU0RFd1ZqRTNTREUyVmpFMVdpSWdabWxzYkQwaUl6QkROelJFUmlJZ2JXRnphejBpZFhKc0tDTndZWFJvTFRJdGFXNXphV1JsTFRGZk5UQXhYell3TmpZcElpOCtDanh5WldOMElIZzlJakl3SWlCNVBTSTFJaUIzYVdSMGFEMGlPU0lnYUdWcFoyaDBQU0k1SWlCbWFXeHNQU0lqUlVaR09FWkdJaTgrQ2p4dFlYTnJJR2xrUFNKd1lYUm9MVFV0YVc1emFXUmxMVEpmTlRBeFh6WXdOallpSUdacGJHdzlJbmRvYVhSbElqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweU5DQXhNUzQxUXpJMElERXhMamMzTmpFZ01qUXVNakl6T1NBeE1pQXlOQzQxSURFeVNESTFMalZETWpVdU56YzJNU0F4TWlBeU5pQXhNUzQzTnpZeElESTJJREV4TGpWV01UQklNamN1TlVNeU55NDNOell4SURFd0lESTRJRGt1TnpjMk1UUWdNamdnT1M0MVZqZ3VOVU15T0NBNExqSXlNemcySURJM0xqYzNOakVnT0NBeU55NDFJRGhJTWpaV05pNDFRekkySURZdU1qSXpPRFlnTWpVdU56YzJNU0EySURJMUxqVWdOa2d5TkM0MVF6STBMakl5TXprZ05pQXlOQ0EyTGpJeU16ZzJJREkwSURZdU5WWTRTREl5TGpWRE1qSXVNakl6T1NBNElESXlJRGd1TWpJek9EWWdNaklnT0M0MVZqa3VOVU15TWlBNUxqYzNOakUwSURJeUxqSXlNemtnTVRBZ01qSXVOU0F4TUVneU5GWXhNUzQxV2lJdlBnbzhMMjFoYzJzK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTWpRZ01URXVOVU15TkNBeE1TNDNOell4SURJMExqSXlNemtnTVRJZ01qUXVOU0F4TWtneU5TNDFRekkxTGpjM05qRWdNVElnTWpZZ01URXVOemMyTVNBeU5pQXhNUzQxVmpFd1NESTNMalZETWpjdU56YzJNU0F4TUNBeU9DQTVMamMzTmpFMElESTRJRGt1TlZZNExqVkRNamdnT0M0eU1qTTROaUF5Tnk0M056WXhJRGdnTWpjdU5TQTRTREkyVmpZdU5VTXlOaUEyTGpJeU16ZzJJREkxTGpjM05qRWdOaUF5TlM0MUlEWklNalF1TlVNeU5DNHlNak01SURZZ01qUWdOaTR5TWpNNE5pQXlOQ0EyTGpWV09FZ3lNaTQxUXpJeUxqSXlNemtnT0NBeU1pQTRMakl5TXpnMklESXlJRGd1TlZZNUxqVkRNaklnT1M0M056WXhOQ0F5TWk0eU1qTTVJREV3SURJeUxqVWdNVEJJTWpSV01URXVOVm9pSUdacGJHdzlJaU13UXpjMFJFWWlMejRLUEhCaGRHZ2daRDBpVFRJMklERXdWamxJTWpWV01UQklNalphVFRJMklEaElNalZXT1VneU5sWTRXazB5TkNBNFZqbElNalZXT0VneU5GcE5NalFnTVRCSU1qVldPVWd5TkZZeE1GcE5NalF1TlNBeE1VTXlOQzQzTnpZeElERXhJREkxSURFeExqSXlNemtnTWpVZ01URXVOVWd5TTBNeU15QXhNaTR6TWpnMElESXpMalkzTVRZZ01UTWdNalF1TlNBeE0xWXhNVnBOTWpVdU5TQXhNVWd5TkM0MVZqRXpTREkxTGpWV01URmFUVEkxSURFeExqVkRNalVnTVRFdU1qSXpPU0F5TlM0eU1qTTVJREV4SURJMUxqVWdNVEZXTVRORE1qWXVNekk0TkNBeE15QXlOeUF4TWk0ek1qZzBJREkzSURFeExqVklNalZhVFRJMUlERXdWakV4TGpWSU1qZFdNVEJJTWpWYVRUSTNMalVnT1VneU5sWXhNVWd5Tnk0MVZqbGFUVEkzSURrdU5VTXlOeUE1TGpJeU16ZzJJREkzTGpJeU16a2dPU0F5Tnk0MUlEbFdNVEZETWpndU16STROQ0F4TVNBeU9TQXhNQzR6TWpnMElESTVJRGt1TlVneU4xcE5NamNnT0M0MVZqa3VOVWd5T1ZZNExqVklNamRhVFRJM0xqVWdPVU15Tnk0eU1qTTVJRGtnTWpjZ09DNDNOell4TkNBeU55QTRMalZJTWpsRE1qa2dOeTQyTnpFMU55QXlPQzR6TWpnMElEY2dNamN1TlNBM1ZqbGFUVEkySURsSU1qY3VOVlkzU0RJMlZqbGFUVEkxSURZdU5WWTRTREkzVmpZdU5VZ3lOVnBOTWpVdU5TQTNRekkxTGpJeU16a2dOeUF5TlNBMkxqYzNOakUwSURJMUlEWXVOVWd5TjBNeU55QTFMalkzTVRVM0lESTJMak15T0RRZ05TQXlOUzQxSURWV04xcE5NalF1TlNBM1NESTFMalZXTlVneU5DNDFWamRhVFRJMUlEWXVOVU15TlNBMkxqYzNOakUwSURJMExqYzNOakVnTnlBeU5DNDFJRGRXTlVNeU15NDJOekUySURVZ01qTWdOUzQyTnpFMU55QXlNeUEyTGpWSU1qVmFUVEkxSURoV05pNDFTREl6VmpoSU1qVmFUVEl5TGpVZ09VZ3lORlkzU0RJeUxqVldPVnBOTWpNZ09DNDFRekl6SURndU56YzJNVFFnTWpJdU56YzJNU0E1SURJeUxqVWdPVlkzUXpJeExqWTNNVFlnTnlBeU1TQTNMalkzTVRVM0lESXhJRGd1TlVneU0xcE5Nak1nT1M0MVZqZ3VOVWd5TVZZNUxqVklNak5hVFRJeUxqVWdPVU15TWk0M056WXhJRGtnTWpNZ09TNHlNak00TmlBeU15QTVMalZJTWpGRE1qRWdNVEF1TXpJNE5DQXlNUzQyTnpFMklERXhJREl5TGpVZ01URldPVnBOTWpRZ09VZ3lNaTQxVmpFeFNESTBWamxhVFRJMUlERXhMalZXTVRCSU1qTldNVEV1TlVneU5Wb2lJR1pwYkd3OUlpTXdRemMwUkVZaUlHMWhjMnM5SW5WeWJDZ2pjR0YwYUMwMUxXbHVjMmxrWlMweVh6VXdNVjgyTURZMktTSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB4TWlBeE4wTXhNaUF4TkM0eU16ZzJJREUwTGpJek9EWWdNVElnTVRjZ01USldNVGRXTWpKRE1UUXVNak00TmlBeU1pQXhNaUF4T1M0M05qRTBJREV5SURFM1drMHhOeUF4TUVNeE15NHhNelFnTVRBZ01UQWdNVE11TVRNMElERXdJREUzUXpFd0lESXdMamcyTmlBeE15NHhNelFnTWpRZ01UY2dNalJETWpBdU9EWTJJREkwSURJMElESXdMamcyTmlBeU5DQXhOME15TkNBeE15NHhNelFnTWpBdU9EWTJJREV3SURFM0lERXdXaUlnWm1sc2JEMGlJekJETnpSRVJpSXZQZ284Y0dGMGFDQmtQU0pOTVRjZ05TNHdPRE16TkZZM0xqSTFJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweE55QXlOaTQzTlZZeU9DNDVNVFkzSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lEZ3VOVGN4TmpkTU1UQXVNVEVnTVRBdU1URWlJSE4wY205clpUMGlJekJETnpSRVJpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREl6TGpnNVRESTFMalF5T0RNZ01qVXVOREk0TXlJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhjR0YwYUNCa1BTSk5OUzR3T0RNek5DQXhOMGczTGpJMUlpQnpkSEp2YTJVOUlpTXdRemMwUkVZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazB5Tmk0M05TQXhOMGd5T0M0NU1UWTNJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWswNExqVTNNVFkzSURJMUxqUXlPRE5NTVRBdU1URWdNak11T0RraUlITjBjbTlyWlQwaUl6QkROelJFUmlJZ2MzUnliMnRsTFhkcFpIUm9QU0l5SWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUx6NEtQSEJoZEdnZ1pEMGlUVEl6TGpnNUlERXdMakV4VERJMUxqUXlPRE1nT0M0MU56RTJOeUlnYzNSeWIydGxQU0lqTUVNM05FUkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1URTJJaUJvWldsbmFIUTlJamd3SWlCMmFXVjNRbTk0UFNJd0lEQWdNVEUySURnd0lpQm1hV3hzUFNKdWIyNWxJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ284WnlCamJHbHdMWEJoZEdnOUluVnliQ2dqWTJ4cGNEQmZPREExWHpNd09ETXhLU0krQ2p4d1lYUm9JR1E5SWswd0lETkRNQ0F4TGpNME16RTFJREV1TXpRek1UVWdNQ0F6SURCSU1URXpRekV4TkM0Mk5UY2dNQ0F4TVRZZ01TNHpORE14TlNBeE1UWWdNMVk0TUVnd1ZqTmFJaUJtYVd4c1BTSWpSak5HTkVZMElpOCtDanh5WldOMElIZHBaSFJvUFNJeE1UZ2lJR2hsYVdkb2REMGlNalFpSUdacGJHdzlJbmRvYVhSbElpOCtDanh3WVhSb0lHUTlJazB4TWk0MUlEUXhRekV5TGpVZ016a3VNRFkzSURFMExqQTJOeUF6Tnk0MUlERTJJRE0zTGpWSU1URTNMalZXT0RBdU5VZ3hNaTQxVmpReFdpSWdabWxzYkQwaWQyaHBkR1VpSUhOMGNtOXJaVDBpSTBVM1JUbEZPU0l2UGdvOGNtVmpkQ0I0UFNJME5TSWdlVDBpTmlJZ2QybGtkR2c5SWpJM0lpQm9aV2xuYUhROUlqRXpJaUJ5ZUQwaU15SWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ea2lJSGRwWkhSb1BTSTNOQ0lnYUdWcFoyaDBQU0kySWlCeWVEMGlNU0lnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlOVGtpSUhkcFpIUm9QU0kxT1NJZ2FHVnBaMmgwUFNJNElpQnllRDBpTVNJZ1ptbHNiRDBpSTBVM1JUbEZRU0l2UGdvOGNtVmpkQ0I0UFNJM05pSWdlVDBpTmlJZ2QybGtkR2c5SWpJM0lpQm9aV2xuYUhROUlqRXpJaUJ5ZUQwaU15SWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSXhNRGNpSUhrOUlqWWlJSGRwWkhSb1BTSXlOeUlnYUdWcFoyaDBQU0l4TXlJZ2NuZzlJak1pSUdacGJHdzlJaU5GTjBVNVJVRWlMejRLUEhCaGRHZ2daRDBpVFRJekxqa3hNaUF4TVM0Mk56YzFRekl6TGpNME9UWWdPUzR3TVRVd05pQXlNQzR5TkRZZ055NDBORGcyTlNBeE5pNDVPREV5SURndU1UYzVOVGxETVRNdU56RTJOQ0E0TGprd09UYzNJREV4TGpVeU5UWWdNVEV1TmpZd09DQXhNaTR3T0RnZ01UUXVNekl5TlVNeE1pNDJOVEExSURFMkxqazRORGtnTVRVdU56VTBJREU0TGpVMU1UTWdNVGt1TURFNE9DQXhOeTQ0TWpBMFF6SXlMakk0TXpZZ01UY3VNRGt3TWlBeU5DNDBOelEwSURFMExqTXpPVGtnTWpNdU9URXlJREV4TGpZM056VmFUVEU0SURFMUxqUTFOREZETVRZdU5qZ3lNeUF4TlM0ME5UUXhJREUxTGpZeE5Ea2dNVFF1TXpVMU1TQXhOUzQyTVRRNUlERXpRekUxTGpZeE5Ea2dNVEV1TmpRME9TQXhOaTQyT0RNZ01UQXVOVFExT1NBeE9DQXhNQzQxTkRVNVF6RTVMak14TnlBeE1DNDFORFU1SURJd0xqTTROVEVnTVRFdU5qUTBNaUF5TUM0ek9EVXhJREV6UXpJd0xqTTROVEVnTVRRdU16VTFPQ0F4T1M0ek1UY2dNVFV1TkRVME1TQXhPQ0F4TlM0ME5UUXhXaUlnWm1sc2JEMGlJekF3T0VNNU9TSXZQZ284Y0dGMGFDQmtQU0pOTVRndU5USTNOeUE1TGpVMk5ERTRRekUyTGpZek5qVWdPUzQxTmpReE9DQXhOUzR4TURNeElERXhMakUwTVRrZ01UVXVNVEF6TVNBeE15NHdPRGM0UXpFMUxqRXdNekVnTVRVdU1ETXpOeUF4Tmk0Mk16WTFJREUyTGpZeE1UVWdNVGd1TlRJM055QXhOaTQyTVRFMVF6SXdMalF4T1RZZ01UWXVOakV4TlNBeU1TNDVOVE1nTVRVdU1ETXpOeUF5TVM0NU5UTWdNVE11TURnM09FTXlNUzQ1TlRJeUlERXhMakUwTVRrZ01qQXVOREU0T1NBNUxqVTJOREU0SURFNExqVXlOemNnT1M0MU5qUXhPRnBOTVRjdU9UazVPU0F4TlM0eE5ETTJRekUyTGpnME9UTWdNVFV1TVRRek5pQXhOUzQ1TVRZMklERTBMakU0TXprZ01UVXVPVEUyTmlBeE0wTXhOUzQ1TVRZMklERXhMamd4TmpFZ01UWXVPRFE1TXlBeE1DNDROVFkwSURFM0xqazVPVGtnTVRBdU9EVTJORU14T1M0eE5UQTBJREV3TGpnMU5qUWdNakF1TURnek1TQXhNUzQ0TVRZeElESXdMakE0TXpFZ01UTkRNakF1TURnek1TQXhOQzR4T0RNNUlERTVMakUxTURRZ01UVXVNVFF6TmlBeE55NDVPVGs1SURFMUxqRTBNelphSWlCbWFXeHNQU0lqTnpCRFEwUXpJaTgrQ2p3dlp6NEtQR1JsWm5NK0NqeGpiR2x3VUdGMGFDQnBaRDBpWTJ4cGNEQmZPREExWHpNd09ETXhJajRLUEhCaGRHZ2daRDBpVFRBZ00wTXdJREV1TXpRek1UVWdNUzR6TkRNeE5TQXdJRE1nTUVneE1UTkRNVEUwTGpZMU55QXdJREV4TmlBeExqTTBNekUxSURFeE5pQXpWamd3U0RCV00xb2lJR1pwYkd3OUluZG9hWFJsSWk4K0Nqd3ZZMnhwY0ZCaGRHZytDand2WkdWbWN6NEtQQzl6ZG1jK0NnPT1cIiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgVGFibGVDcmVhdG9yIGZyb20gXCIuL1RhYmxlQ3JlYXRvci9UYWJsZUNyZWF0b3JcIjtcbmltcG9ydCBEZXNpZ25MaW50ZXIgZnJvbSBcIi4vRGVzaWduTGludGVyL0Rlc2lnbkxpbnRlclwiO1xuaW1wb3J0IFJlc2l6ZXIgZnJvbSBcIi4vUmVzaXplclwiO1xuaW1wb3J0IFRoZW1lU3dpdGNoZXIgZnJvbSBcIi4vVGhlbWVTd2l0Y2hlclwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBIb21lIGZyb20gXCIuL0hvbWVcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiLi4vdXRpbGl0eS1mdW5jdGlvbnNcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IEFwcCA9ICh7fSkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVQbHVnaW4sIHNldEFjdGl2ZVBsdWdpbl0gPSB1c2VTdGF0ZShcImhvbWVcIik7XG4gICAgY29uc3QgW2xhdGVzdEZpZ21hQ29tbWFuZCwgc2V0TGF0ZXN0RmlnbWFDb21tYW5kXSA9IHVzZVN0YXRlKFwiXCIpO1xuICAgIGNvbnN0IFtzZWxlY3RlZFRleHRMYXllcnMsIHNldFNlbGVjdGVkVGV4dExheWVyc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NhbXBsZVRleHRJbmRleCwgc2V0U2FtcGxlVGV4dEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtsb2NhbEN1c3RvbURpY3Rpb25hcnksIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeV0gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2xvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLCBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtjb2xvcnNXaXRoSXNzdWVzLCBzZXRDb2xvcnNXaXRoSXNzdWVzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbbG9hZGluZ0NvbG9yRGF0YSwgc2V0TG9hZGluZ0NvbG9yRGF0YV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3NlbGVjdGlvbk1hZGUsIHNldFNlbGVjdGlvbk1hZGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtjdXJyZW50U2VsZWN0aW9uLCBzZXRDdXJyZW50U2VsZWN0aW9uXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2luY29taW5nU2VsZWN0aW9uLCBzZXRJbmNvbWluZ1NlbGVjdGlvbl0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UsIHNldEN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZV0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtjb2xvclRva2Vucywgc2V0Q29sb3JUb2tlbnNdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbYWN0aXZlQ29sb3JUaWxlLCBzZXRBY3RpdmVDb2xvclRpbGVdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY29sb3JJc3N1ZXNGaXhlZCwgc2V0Q29sb3JJc3N1ZXNGaXhlZF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbbG9hZGluZ0RhcmtTd2l0Y2gsIHNldExvYWRpbmdEYXJrU3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbG9hZGluZ0xpZ2h0U3dpdGNoLCBzZXRMb2FkaW5nTGlnaHRTd2l0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50ID0gKGV2ZW50TmFtZSwgY3VzdG9tRGF0YSkgPT4ge1xuICAgICAgICBuZXdyZWxpYy5hZGRQYWdlQWN0aW9uKGV2ZW50TmFtZSwgY3VzdG9tRGF0YSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjdXN0b21EYXRhKTtcbiAgICAgICAgICAgIH0sIDU1MCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImluaXRpYWxpemUtc2VsZWN0aW9uXCIgfSB9LCBcIipcIik7XG4gICAgICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbWVzc2FnZSB9ID0gZXZlbnQuZGF0YS5wbHVnaW5NZXNzYWdlO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZpZ21hLWNvbW1hbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBwbHVnaW4tb3BlbmVkYCwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldExhdGVzdEZpZ21hQ29tbWFuZChtZXNzYWdlLm9wZW5lZFRvKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImluaXRpYWwtc2VsZWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRTZWxlY3Rpb24obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb24tY2hhbmdlZFwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRJbmNvbWluZ1NlbGVjdGlvbihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRhYmxlLWNyZWF0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoXCJPbmVDb3JlVG9vbGJveDogdGFibGUtY3JlYXRlZFwiLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImNsb3NlLXBsdWdpblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibmV3LXRleHQtc2VsZWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldFNhbXBsZVRleHRJbmRleCgwKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRUZXh0TGF5ZXJzKG1lc3NhZ2UudGV4dExheWVycyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZShtZXNzYWdlLnNlbGVjdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRleHQtbGludGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IGxhbmd1YWdlLWxpbnRlZFwiLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UuY3VzdG9tRXZlbnREYXRhKSwgeyBzdWdnZXN0aW9uczogbWVzc2FnZS5taW5pbWFsUmVwb3J0IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mdWxsUmVwb3J0LmZvckVhY2goKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IGxhbmd1YWdlLWxpbnRlci1zdWdnZXN0aW9uLW1hZGVcIiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlLmN1c3RvbUV2ZW50RGF0YSksIHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2NhbC1jdXN0b20tZGljdGlvbmFyeS1yZXRyaWV2ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbG9yLXN0YXRzXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdDb2xvckRhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDb2xvcnNXaXRoSXNzdWVzKChfYSA9IG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5jb2xvclN0YXRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29sb3JzTm90VXNpbmdPbmVDb3JlQ29sb3JTdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbk1hZGUobWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXNzYWdlLnNlbGVjdGlvbk1hZGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDb2xvclRva2VucyhtZXNzYWdlLmNvbG9yVG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JJc3N1ZXNGaXhlZCgwKTtcbiAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5zZWxlY3Rpb25NYWRlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBjb2xvcnMtbGludGVkYCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtZXNzYWdlLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVLZXk6IG1lc3NhZ2UuZmlsZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgTmFtZVwiOiBtZXNzYWdlW1wiVXNlciBOYW1lXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXNlciBBdmF0YXJcIjogbWVzc2FnZVtcIlVzZXIgQXZhdGFyXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXNlciBJRFwiOiBtZXNzYWdlW1wiVXNlciBJRFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNlc3Npb24gSURcIjogbWVzc2FnZVtcIlNlc3Npb24gSURcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMYXllcnNXaXRoQ29sb3I6IG1lc3NhZ2UuY29sb3JTdGF0cy5zZWxlY3RlZExheWVyc1dpdGhDb2xvci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSW5zdGFuY2VzT2ZDb2xvcjogbWVzc2FnZS5jb2xvclN0YXRzLmFsbEluc3RhbmNlc09mQ29sb3IubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1dpdGhDb2xvclN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzV2l0aENvbG9yU3R5bGUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1VzaW5nT25lQ29yZVN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzVXNpbmdPbmVDb3JlU3R5bGUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc05vdFVzaW5nT25lQ29yZUNvbG9yU3R5bGU6IG1lc3NhZ2UuY29sb3JTdGF0cy5jb2xvcnNOb3RVc2luZ09uZUNvcmVDb2xvclN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVDb3JlQ29sb3JTdHlsZUNvdmVyYWdlOiBtZXNzYWdlLmNvbG9yU3RhdHMub25lQ29yZUNvbG9yU3R5bGVDb3ZlcmFnZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzT2ZBbGxJbnN0YW5jZXNPZkNvbG9yOiBtZXNzYWdlLmNvbG9yU3RhdHMuaWRzT2ZBbGxJbnN0YW5jZXNPZkNvbG9yLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29sb3ItcmVwbGFjZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBjb2xvci1yZXBsYWNlZGAsIE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxvYWRpbmctbGlnaHQtdGhlbWUtc3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdMaWdodFN3aXRjaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxvYWRpbmctZGFyay10aGVtZS1zd2l0Y2hcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0RhcmtTd2l0Y2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0aGVtZS1zd2l0Y2hlZFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zd2l0Y2hlZFRvID09PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0RhcmtTd2l0Y2goZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3dpdGNoZWRUbyA9PT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTGlnaHRTd2l0Y2goZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRUaGVtZVN3aXRjaGVyRXZlbnQgPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogdGhlbWUtc3dpdGNoZWRgLCBPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jbG9zZUFmdGVyUnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImNsb3NlLXBsdWdpblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFRoZW1lU3dpdGNoZXJFdmVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGxhdGVzdEZpZ21hQ29tbWFuZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGxhdGVzdEZpZ21hQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWhvbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tdGFibGUtY3JlYXRvclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJ0YWJsZS1jcmVhdG9yXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwib3Blbi10aGVtZS1zd2l0Y2hlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJ0aGVtZS1zd2l0Y2hlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tbGFuZ3VhZ2UtbGludGVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImxhbmd1YWdlLWxpbnRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tY29sb3ItbGludGVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImNvbG9yLWxpbnRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbbGF0ZXN0RmlnbWFDb21tYW5kXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgaW5jb21pbmdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBpbmNvbWluZ1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50U2VsZWN0aW9uKGluY29taW5nU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtpbmNvbWluZ1NlbGVjdGlvbl0pO1xuICAgIGNvbnN0IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gPSAoZGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKGRlc3RpbmF0aW9uKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm5hdmlnYXRlLXRvLXRhYlwiLFxuICAgICAgICAgICAgICAgIHRhYkNsaWNrZWQ6IGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyUGx1Z2luQm9keSA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3RpdmVQbHVnaW4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJob21lXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSG9tZSwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gfSk7XG4gICAgICAgICAgICBjYXNlIFwidGFibGUtY3JlYXRvclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlQ3JlYXRvciwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gfSk7XG4gICAgICAgICAgICBjYXNlIFwibGFuZ3VhZ2UtbGludGVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KERlc2lnbkxpbnRlciwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24sIG9wZW5UbzogXCJsYW5ndWFnZVwiIH0pKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0aGVtZS1zd2l0Y2hlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lU3dpdGNoZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcImNvbG9yLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25MaW50ZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uLCBvcGVuVG86IFwiY29sb3JcIiB9KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHtcbiAgICAgICAgaGFuZGxlUGx1Z2luTmF2aWdhdGlvbixcbiAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQsXG4gICAgfTtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgc2VsZWN0ZWRUZXh0TGF5ZXJzLFxuICAgICAgICBzZXRTZWxlY3RlZFRleHRMYXllcnMsXG4gICAgICAgIHNhbXBsZVRleHRJbmRleCxcbiAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4LFxuICAgICAgICBsb2NhbEN1c3RvbURpY3Rpb25hcnksXG4gICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeSxcbiAgICAgICAgbG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsXG4gICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLFxuICAgICAgICBjb2xvcnNXaXRoSXNzdWVzLFxuICAgICAgICBzZXRDb2xvcnNXaXRoSXNzdWVzLFxuICAgICAgICBsb2FkaW5nQ29sb3JEYXRhLFxuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhLFxuICAgICAgICBzZWxlY3Rpb25NYWRlLFxuICAgICAgICBzZXRTZWxlY3Rpb25NYWRlLFxuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLFxuICAgICAgICBpbmNvbWluZ1NlbGVjdGlvbixcbiAgICAgICAgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlLFxuICAgICAgICBjb2xvclRva2VucyxcbiAgICAgICAgYWN0aXZlQ29sb3JUaWxlLFxuICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUsXG4gICAgICAgIGNvbG9ySXNzdWVzRml4ZWQsXG4gICAgICAgIHNldENvbG9ySXNzdWVzRml4ZWQsXG4gICAgICAgIGxvYWRpbmdEYXJrU3dpdGNoLFxuICAgICAgICBsb2FkaW5nTGlnaHRTd2l0Y2gsXG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBmdW5jdGlvbnMsIHN0YXRlIH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZXNpemVyLCBudWxsKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJhcHBcIiB9LCByZW5kZXJQbHVnaW5Cb2R5KCkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQbHVnaW5Db250ZXh0IH0gZnJvbSBcIi4uL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBDb2xvclRpbGUgZnJvbSBcIi4vQ29sb3JUaWxlXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgQ29sb3JMaW50ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGNvbG9yc1dpdGhJc3N1ZXMsIHNldENvbG9yc1dpdGhJc3N1ZXMsIGxvYWRpbmdDb2xvckRhdGEsIHNldExvYWRpbmdDb2xvckRhdGEsIHNlbGVjdGlvbk1hZGUsIGNvbG9ySXNzdWVzRml4ZWQsIH0gPSBzdGF0ZTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWNvbG9yLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBpZ25vcmVDb2xvcklzc3VlID0gKGNvbG9ySWQpID0+IHtcbiAgICAgICAgY29uc3QgY29sb3JUb0JlUmVtb3ZlZCA9IGNvbG9yc1dpdGhJc3N1ZXMuZmluZCgoY29sb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvci5jb2xvcklkID09PSBjb2xvcklkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5kZXhPZkNvbG9yVG9CZVJlbW92ZWQgPSBjb2xvcnNXaXRoSXNzdWVzLmluZGV4T2YoY29sb3JUb0JlUmVtb3ZlZCk7XG4gICAgICAgIGNvbnN0IG5ld0NvbG9yc1dpdGhJc3N1ZXMgPSBbLi4uY29sb3JzV2l0aElzc3Vlc107XG4gICAgICAgIG5ld0NvbG9yc1dpdGhJc3N1ZXMuc3BsaWNlKGluZGV4T2ZDb2xvclRvQmVSZW1vdmVkLCAxKTtcbiAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcyhuZXdDb2xvcnNXaXRoSXNzdWVzKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbG9ySXNzdWVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoKGNvbG9yc1dpdGhJc3N1ZXMgPT09IG51bGwgfHwgY29sb3JzV2l0aElzc3VlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JzV2l0aElzc3Vlcy5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yc1dpdGhJc3N1ZXMubWFwKChjb2xvciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sb3JUaWxlLCB7IGNvbG9yRGF0YTogY29sb3IsIGtleTogaW5kZXgsIGlnbm9yZUNvbG9ySXNzdWU6IGlnbm9yZUNvbG9ySXNzdWUgfSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlc2NhbkxheWVyc0NsaWNrID0gKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWNvbG9yLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRW1wdHlTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGluZ1RleHQgPSAhbG9hZGluZ0NvbG9yRGF0YVxuICAgICAgICAgICAgPyBcIlNlbGVjdCBhIGxheWVyKHMpIHRvIGdldCBzdGFydGVkXCJcbiAgICAgICAgICAgIDogXCJMb2FkaW5nIGNvbG9yIGRhdGEuLi5cIjtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25UZXh0ID0gIWxvYWRpbmdDb2xvckRhdGFcbiAgICAgICAgICAgID8gXCJUbyBjaGVjayB5b3VyIGNvbG9ycyBzZWxlY3QgYW55IGxheWVyLCBmcmFtZSwgb3IgZ3JvdXAgb2YgbGF5ZXJzIGFuZCB0aGVuIGxpbnQgY29sb3JzLlwiXG4gICAgICAgICAgICA6IFwiVGhpcyBtYXkgdGFrZSBhIG1vbWVudFwiO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBsb2FkaW5nQ29sb3JEYXRhICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbG9hZGVyXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZ1wiIH0sIGhlYWRpbmdUZXh0KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uXCIgfSwgZGVzY3JpcHRpb25UZXh0KSxcbiAgICAgICAgICAgICFsb2FkaW5nQ29sb3JEYXRhICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVSZXNjYW5MYXllcnNDbGljaygpIH0sIFwiQ2hlY2sgY29sb3JzXCIpKSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29sb3JMaW50aW5nU3VtbWFyeSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFsb2FkaW5nQ29sb3JEYXRhICYmIHNlbGVjdGlvbk1hZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLXN1bWFyeVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctc3VtbWFyeS1oZWFkaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzV2l0aElzc3Vlcy5sZW5ndGggLSBjb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICAgICAgICAgICAgICBcIiBjb2xvciBpc3N1ZXMgZm91bmRcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uXCIgfSwgY29sb3JzV2l0aElzc3Vlcy5sZW5ndGggLSBjb2xvcklzc3Vlc0ZpeGVkID4gMCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIlRvIGZpeCB0aGVzZSBpc3N1ZXMsIHJlcGxhY2UgZWFjaCBvZiB0aGUgY29sb3JzIGxpc3RlZCBiZWxvdyB3aXRoIGEgT25lIENvcmUgY29sb3Igc3R5bGUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGAgYCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vY29sb3IvI3NlbWFudGljLXRva2Vuc1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCIgfSwgXCJTZWUgY29sb3IgZG9jc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yIG1vcmUgaW5mby5cIikpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIFwiVGhlcmUgYXJlIG5vIGNvbG9yIGlzc3VlcyB3aXRoIHRoZSBzZWxlY3RlZCBsYXllcnMgOikuIFRvIGNoZWNrIGZvciBpc3N1ZXMgaW4gb3RoZXIgbGF5ZXJzIHNlbGVjdCBhbm90aGVyIGxheWVyKHMpIGFuZCBjbGljayBcXFwiUmUtc2NhbiBjb2xvcnNcXFwiLlwiKSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyRW1wdHlTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub0NvbG9ySXNzdWVzID0gKGNvbG9yc1dpdGhJc3N1ZXMgPT09IG51bGwgfHwgY29sb3JzV2l0aElzc3VlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JzV2l0aElzc3Vlcy5sZW5ndGgpID09PSAwO1xuICAgIGNvbnN0IGNvbG9yTGludGVyQ29udGFpbmVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJjb2xvci1saW50ZXItY29udGFpbmVyXCIsIHtcbiAgICAgICAgXCJzdW1tYXJ5LWlzLWxvYWRpbmdcIjogbG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgXCJzdW1tYXJ5LWlzLWVtcHR5XCI6IG5vQ29sb3JJc3N1ZXMsXG4gICAgICAgIFwibm8tc2VsZWN0aW9uLW1hZGVcIjogIXNlbGVjdGlvbk1hZGUsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiLCB7IGNsYXNzTmFtZTogY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzIH0sXG4gICAgICAgICAgICByZW5kZXJDb2xvckxpbnRpbmdTdW1tYXJ5KCksXG4gICAgICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiAhbm9Db2xvcklzc3VlcyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGVzLWNvbnRhaW5lclwiIH0sIHJlbmRlckNvbG9ySXNzdWVzKCkpKSksXG4gICAgICAgICFsb2FkaW5nQ29sb3JEYXRhICYmIHNlbGVjdGlvbk1hZGUgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmb290ZXJcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1mb290ZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gaGFuZGxlUmVzY2FuTGF5ZXJzQ2xpY2soKSB9LCBcIkNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uXCIpKSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb2xvckxpbnRlcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgY2hyb21hIGZyb20gXCJjaHJvbWEtanNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgaWNvbkxheWVyVGV4dCBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItdGV4dC5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJFbGxpcHNlIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1lbGxpcHNlLnN2Z1wiO1xuaW1wb3J0IGljb25MYXllckxpbmUgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLWxpbmUuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyUG9seWdvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItcG9seWdvbi5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJSZWN0YW5nbGUgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXJlY3RhbmdsZS5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJCb29sZWFuT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1ib29sZWFuLW9wZXJhdGlvbi5zdmdcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwicmVhY3QtZmlnbWEtcGx1Z2luLWRzXCI7XG5pbXBvcnQgeyBDaGVjayB9IGZyb20gXCJyZWFjdC1mZWF0aGVyXCI7XG5pbXBvcnQgXCJyZWFjdC1maWdtYS1wbHVnaW4tZHMvZmlnbWEtcGx1Z2luLWRzLmNzc1wiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgQ29sb3JUaWxlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGNvbG9yVG9rZW5zLCBhY3RpdmVDb2xvclRpbGUsIHNldEFjdGl2ZUNvbG9yVGlsZSwgY29sb3JJc3N1ZXNGaXhlZCwgc2V0Q29sb3JJc3N1ZXNGaXhlZCwgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgY29sb3JJZCwgbGF5ZXJJZCwgbGF5ZXJOYW1lLCBsYXllclR5cGUsIGNvbG9yVHlwZSwgY29sb3JJbkhleCwgfSA9IHByb3BzLmNvbG9yRGF0YTtcbiAgICBjb25zdCB7IGlnbm9yZUNvbG9ySXNzdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVudUFjdGl2ZSwgc2V0TWVudUFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVCdXR0b25Ib3ZlcmVkLCBzZXRNZW51QnV0dG9uSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVIb3ZlcmVkLCBzZXRNZW51SG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVUaW1lciwgc2V0TWVudVRpbWVyXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtpc3N1ZUZpeGVkLCBzZXRJc3N1ZUZpeGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZlQ29sb3JUaWxlID09PSBjb2xvcklkKSB7XG4gICAgICAgICAgICBzZXRJc0V4cGFuZGVkKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbYWN0aXZlQ29sb3JUaWxlXSk7XG4gICAgY29uc3QgaGFuZGxlQ29sb3JUaWxlQ2xpY2sgPSAobGF5ZXJJZCkgPT4ge1xuICAgICAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbG9yVGlsZShjb2xvcklkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbG9yVGlsZShcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0LWxheWVyXCIsXG4gICAgICAgICAgICAgICAgbGF5ZXJJZDogbGF5ZXJJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnVuY2F0ZUxheWVyTmFtZSA9IChsYXllck5hbWUsIGxlbmd0aCA9IDI1KSA9PiB7XG4gICAgICAgIGlmIChsYXllck5hbWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJOYW1lLnN1YnN0cmluZygwLCBsZW5ndGgpICsgXCIuLi5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJOYW1lO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9rZW5TdWdnZXN0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgaWYgKChjb2xvclRva2VucyA9PT0gbnVsbCB8fCBjb2xvclRva2VucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JUb2tlbnMubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ29sb3JUb2tlbnMgPSBjb2xvclRva2Vucy5maWx0ZXIodG9rZW4gPT4gIXRva2VuLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncHJpdmF0ZScpKTtcbiAgICAgICAgICAgIGxldCByZWxldmFudENvbG9yU3R5bGVzID0gW107XG4gICAgICAgICAgICBsZXQgbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChsYXllclR5cGUgPT09IFwiVEVYVFwiKSB7XG4gICAgICAgICAgICAgICAgcmVsZXZhbnRDb2xvclN0eWxlcyA9IGZpbHRlcmVkQ29sb3JUb2tlbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInRleHRcIikpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUudG9Mb3dlckNhc2UoKSA+IGIubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JUeXBlID09PSBcImZpbGxcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJiYWNrZ3JvdW5kXCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbG9yVHlwZSA9PT0gXCJzdHJva2VcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJib3JkZXJcIikpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUudG9Mb3dlckNhc2UoKSA+IGIubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMgPSByZWxldmFudENvbG9yU3R5bGVzXG4gICAgICAgICAgICAgICAgLm1hcCgocmVsZXZhbnRDb2xvclN0eWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50Q29sb3JTdHlsZS5oZXggPT09IFwiTm9uZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlbGV2YW50Q29sb3JTdHlsZSksIHsgc2ltaWxhcml0eTogMCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb25lQ29yZUNvbG9yID0gcmVsZXZhbnRDb2xvclN0eWxlLmhleDtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW1pbGFyaXR5ID0gMTAwIC0gY2hyb21hLmRpc3RhbmNlKG9uZUNvcmVDb2xvciwgY29sb3JJbkhleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVsZXZhbnRDb2xvclN0eWxlKSwgeyBzaW1pbGFyaXR5IH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiLnNpbWlsYXJpdHkgLSBhLnNpbWlsYXJpdHk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGFya01vZGVUb2tlbiA9IHRva2VuLnRoZW1lID09PSAnZGFyayc7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSByZWxldmFudENvbG9yU3R5bGVzLnNvbWUocmVsZXZhbnRTdHlsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxldmFudFN0eWxlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhKGlzRHVwbGljYXRlICYmIGlzRGFya01vZGVUb2tlbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCA0KTtcbiAgICAgICAgICAgIHJldHVybiBtb3N0UmVsZXZhbnRDb2xvclN0eWxlcy5tYXAoKGNvbG9yU3R5bGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbVwiLCBrZXk6IGluZGV4LCBvbkNsaWNrOiAoZSkgPT4gaGFuZGxlU3VnZ2VzdGlvbkZpeENsaWNrKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVLZXk6IGNvbG9yU3R5bGUua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTdHlsZU5hbWU6IGNvbG9yU3R5bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVDb2xvcjogY29sb3JTdHlsZS5oZXgsXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1zYW1wbGVcIiwgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBjb2xvclN0eWxlLmhleCB9IH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1wcmltYXJ5LWNvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nXCIgfSwgY29sb3JTdHlsZS5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1kZXNjcmlwdGlvblwiIH0sIGNvbG9yU3R5bGUuZGVzY3JpcHRpb24pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YVwiIH0sIFwiQXBwbHkgZml4XCIpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZSghbWVudUFjdGl2ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVCdG5NZW51TW91c2VFbnRlciA9ICgpID0+IHtcbiAgICAgICAgc2V0TWVudUJ1dHRvbkhvdmVyZWQodHJ1ZSk7XG4gICAgICAgIGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQnRuTWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVCdXR0b25Ib3ZlcmVkKGZhbHNlKTtcbiAgICAgICAgc2V0TWVudVRpbWVyKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH0sIDQwMCkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KG1lbnVUaW1lcik7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNZW51TW91c2VFbnRlciA9ICgpID0+IHtcbiAgICAgICAgc2V0TWVudUhvdmVyZWQodHJ1ZSk7XG4gICAgICAgIGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVIb3ZlcmVkKGZhbHNlKTtcbiAgICAgICAgc2V0TWVudVRpbWVyKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH0sIDIwMCkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KG1lbnVUaW1lcik7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVJZ25vcmVJc3N1ZUNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWdub3JlQ29sb3JJc3N1ZShjb2xvcklkKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uRml4Q2xpY2sgPSAoZSwgY29sb3JTdHlsZURhdGEpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGx5LWNvbG9yLXN0eWxlXCIsXG4gICAgICAgICAgICAgICAgY29sb3JUeXBlLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IGxheWVySWQsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxDb2xvcjogY29sb3JJbkhleCxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlS2V5OiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlS2V5LFxuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVOYW1lOiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlTmFtZSxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlQ29sb3I6IGNvbG9yU3R5bGVEYXRhLmNvbG9yU3R5bGVDb2xvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCk7XG4gICAgICAgIHNldElzc3VlRml4ZWQodHJ1ZSk7XG4gICAgICAgICFpc3N1ZUZpeGVkICYmIHNldENvbG9ySXNzdWVzRml4ZWQoY29sb3JJc3N1ZXNGaXhlZCArIDEpO1xuICAgIH07XG4gICAgY29uc3QgbGF5ZXJUeXBlSWNvbnMgPSB7XG4gICAgICAgIFRFWFQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclRleHQsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBFTExJUFNFOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJFbGxpcHNlLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgRlJBTUU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImZyYW1lXCIgfSksXG4gICAgICAgIEdST1VQOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJncm91cFwiIH0pLFxuICAgICAgICBDT01QT05FTlQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImNvbXBvbmVudFwiIH0pLFxuICAgICAgICBJTlNUQU5DRTogUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7IGNsYXNzTmFtZTogXCJsYXllci1pY29uXCIsIG5hbWU6IFwiaW5zdGFuY2VcIiB9KSxcbiAgICAgICAgTElORTogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyTGluZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFBPTFlHT046IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclBvbHlnb24sIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBSRUNUQU5HTEU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclJlY3RhbmdsZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFNIQVBFX1dJVEhfVEVYVDogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyVGV4dCwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFNUQVI6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiwgbmFtZTogXCJzdGFyLW9mZlwiIH0pLFxuICAgICAgICBCT09MRUFOX09QRVJBVElPTjogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllckJvb2xlYW5PcGVyYXRpb24sIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbG9yVGlsZUhlYWRpbmdUZXh0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNzdWVGaXhlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgIFwiRml4ZWQgXCIsXG4gICAgICAgICAgICAgICAgYCBgLFxuICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2ssIHsgY29sb3I6IFwiIzEyNjQ0MFwiLCBzaXplOiAxNyB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChjb2xvclR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZS5zbGljZSgxKSArXG4gICAgICAgICAgICAgICAgXCIgbmVlZHMgT25lIENvcmUgY29sb3Igc3R5bGVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbG9yVGlsZUNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwiY29sb3ItdGlsZS1jb250YWluZXJcIiwge1xuICAgICAgICBcIm1lbnUtYWN0aXZlXCI6IG1lbnVBY3RpdmUsXG4gICAgICAgIFwiY29sb3ItdGlsZS1ob3Zlci1zdGF0ZS1kaXNhYmxlZFwiOiBtZW51QnV0dG9uSG92ZXJlZCB8fCBtZW51SG92ZXJlZCxcbiAgICAgICAgZXhwYW5kZWQ6IGlzRXhwYW5kZWQsXG4gICAgICAgIFwiaXNzdWUtZml4ZWRcIjogaXNzdWVGaXhlZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogY29sb3JUaWxlQ29udGFpbmVyQ2xhc3Nlcywgb25DbGljazogKCkgPT4gaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWhlYWRlclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtdGl0bGUtc2VjdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtaGVhZGluZ1wiIH0sIGNvbG9yVGlsZUhlYWRpbmdUZXh0KCkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuLWNvbG9yLXRpbGUtbWVudVwiLCBvbkNsaWNrOiAoZSkgPT4gaGFuZGxlTWVudUNsaWNrKGUpLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUJ0bk1lbnVNb3VzZUVudGVyKCksIG9uTW91c2VMZWF2ZTogKCkgPT4gaGFuZGxlQnRuTWVudU1vdXNlTGVhdmUoKSB9LCBcIk9wdGlvbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnVcIiwgb25Nb3VzZUVudGVyOiAoKSA9PiBoYW5kbGVNZW51TW91c2VFbnRlcigpLCBvbk1vdXNlTGVhdmU6ICgpID0+IGhhbmRsZU1lbnVNb3VzZUxlYXZlKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1cIiwgb25DbGljazogKCkgPT4gaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCkgfSwgXCJTZWxlY3QgbGF5ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1cIiwgb25DbGljazogKGUpID0+IGhhbmRsZUlnbm9yZUlzc3VlQ2xpY2soZSkgfSwgXCJJZ25vcmUgaXNzdWVcIikpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaHJcIiwgbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7IGhyZWY6IFwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi9jb2xvci8jc2VtYW50aWMtdG9rZW5zXCIsIHRhcmdldDogXCJfYmxhbmtcIiB9LCBcIlNlZSBjb2xvciBkb2NzXCIpKSkpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdFwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0gY29sb3ItdGlsZS1tZXRhLWNvbG9yXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ySW5IZXggfSwgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtY29sb3Itc2FtcGxlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgIGNvbG9ySW5IZXgpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIGNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW1cIiB9LFxuICAgICAgICAgICAgICAgICAgICBsYXllclR5cGVJY29uc1tsYXllclR5cGVdLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZVwiIH0sIHRydW5jYXRlTGF5ZXJOYW1lKGxheWVyTmFtZSkpKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbVwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiVHlwZTogXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yVHlwZSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFydGljbGVcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmdcIiB9LCBcIlN1Z2dlc3RlZCBjb2xvciBzdHlsZXNcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0XCIgfSwgcmVuZGVyVG9rZW5TdWdnZXN0aW9ucygpKSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb2xvclRpbGU7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5pbXBvcnQgQ29sb3JMaW50ZXIgZnJvbSBcIi4vQ29sb3JMaW50ZXJcIjtcbmltcG9ydCBMYW5ndWFnZUxpbnRlclBsdWdpbiBmcm9tIFwiLi9MYW5ndWFnZUxpbnRlclBsdWdpblwiO1xuaW1wb3J0IEljb25DaGV2cm9uTGVmdCBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tY2hldnJvbi1sZWZ0LnN2Z1wiO1xuY29uc3QgRGVzaWduTGludGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzZXRBY3RpdmVQbHVnaW4sIG9wZW5UbyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlKG9wZW5Ubyk7XG4gICAgY29uc3QgaGFuZGxlVGFiQ2xpY2sgPSAobmFtZU9mVGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYkFzU2luZ2xlV29yZCA9IG5hbWVPZlRhYi5zcGxpdChcIi1cIilbMF07XG4gICAgICAgIHNldEFjdGl2ZVRhYih0YWJBc1NpbmdsZVdvcmQpO1xuICAgICAgICBzZXRBY3RpdmVQbHVnaW4obmFtZU9mVGFiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlck5hdmlnYXRpb25UYWJzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJzID0gW1wiY29sb3ItbGludGVyXCIsIFwibGFuZ3VhZ2UtbGludGVyXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgbGV0IHRhYkxhYmVsID0gdGFiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGFiLnNwbGl0KFwiLVwiKVswXS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlVGFiICsgXCItbGludGVyXCIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXMucHVzaChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0xhbmd1YWdlJykge1xuICAgICAgICAgICAgICAgIHRhYkxhYmVsID0gJ0xhbmd1YWdlIChiZXRhKSc7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3Nlc091dHB1dCA9IGAke3RhYkNsYXNzZXNPdXRwdXR9IGxhbmd1YWdlLWJldGEtdGFiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUYWJDbGljayh0YWIpLCBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgICAgICAgdGFiTGFiZWwsXG4gICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgdGFiTGFiZWwgPT09ICdMYW5ndWFnZScgJiYgXCIoYmV0YSlcIikpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRlc2lnbkxpbnRlciA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3RpdmVUYWIpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYW5ndWFnZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExhbmd1YWdlTGludGVyUGx1Z2luLCBudWxsKTtcbiAgICAgICAgICAgIGNhc2UgXCJjb2xvclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbG9yTGludGVyLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgcmVuZGVyRGVzaWduTGludGVyKCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBEZXNpZ25MaW50ZXI7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCIuLi8uLi91dGlsaXR5LWZ1bmN0aW9uc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBMYW5ndWFnZUxpbnRlciwgeyBsaW50TXlUZXh0IH0gZnJvbSBcIm5ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXJcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi4vUGx1Z2luQ29udGV4dFwiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgTGFuZ3VhZ2VMaW50ZXJQbHVnaW4gPSAoKSA9PiB7XG4gICAgY29uc3QgW3RleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMsIHNldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtzYW1wbGVUZXh0LCBzZXRTYW1wbGVUZXh0XSA9IHVzZVN0YXRlKFwiXCIpO1xuICAgIGNvbnN0IFttYXhUZXh0SW5kZXgsIHNldE1heFRleHRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbc2VsZWN0aW9uSGFzQ2hhbmdlZCwgc2V0U2VsZWN0aW9uSGFzQ2hhbmdlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IHNlbGVjdGVkVGV4dExheWVycywgc2FtcGxlVGV4dEluZGV4LCBzZXRTYW1wbGVUZXh0SW5kZXgsIGxvY2FsQ3VzdG9tRGljdGlvbmFyeSwgbG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsIGN1cnJlbnRTZWxlY3Rpb24sIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZSwgfSA9IHN0YXRlO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJyZXF1ZXN0LWxvY2FsLWN1c3RvbS1kaWN0aW9uYXJ5XCIgfSB9LCBcIipcIik7XG4gICAgICAgIHNldFNlbGVjdGlvbkhhc0NoYW5nZWQoZmFsc2UpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWxhbmd1YWdlLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH0sIFtdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbMF0uY2hhcmFjdGVycyk7XG4gICAgICAgICAgICBzZXRNYXhUZXh0SW5kZXgodGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dChcIlwiKTtcbiAgICAgICAgICAgIHNldE1heFRleHRJbmRleCgwKTtcbiAgICAgICAgfVxuICAgIH0sIFt0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNhbXBsZVRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNhbXBsZS10ZXh0LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlTm9kZUlkOiB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleF0uaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgfVxuICAgIH0sIFtzYW1wbGVUZXh0XSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1c2VFZmZlY3QgZmlyZWRcIik7XG4gICAgICAgIGlmIChsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCAmJiBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkICYmXG4gICAgICAgICAgICBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJlcXVlc3QtbG9jYWwtY3VzdG9tLWRpY3Rpb25hcnlcIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZFRleHRMYXllcnMsIGxvY2FsQ3VzdG9tRGljdGlvbmFyeV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UpICYmXG4gICAgICAgICAgICBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvbkhhc0NoYW5nZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbY3VycmVudFNlbGVjdGlvbiwgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlXSk7XG4gICAgY29uc3QgbGludFNlbGVjdGVkTGF5ZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1sYW5ndWFnZS1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZVNvdXJjZVRleHQgPSAodXBkYXRlZFRleHQpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZS1zb3VyY2UtdGV4dFwiLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbc2FtcGxlVGV4dEluZGV4XS5pZCxcbiAgICAgICAgICAgICAgICB1cGRhdGVkVGV4dDogdXBkYXRlZFRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIHNldFNhbXBsZVRleHQodXBkYXRlZFRleHQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlVGV4dExheWVyTmF2aWdhdGlvbiA9IChkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJwcmV2aW91c1wiKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbc2FtcGxlVGV4dEluZGV4IC0gMV0uY2hhcmFjdGVycyk7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0SW5kZXgoc2FtcGxlVGV4dEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIm5leHRcIikge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleCArIDFdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4KHNhbXBsZVRleHRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhc3luY0ZpbHRlciA9IChhcnIsIGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmFpbCA9IFN5bWJvbCgpO1xuICAgICAgICByZXR1cm4gKHlpZWxkIFByb21pc2UuYWxsKGFyci5tYXAoKGl0ZW0pID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gKCh5aWVsZCBjYWxsYmFjayhpdGVtKSkgPyBpdGVtIDogZmFpbCk7IH0pKSkpLmZpbHRlcigoaSkgPT4gaSAhPT0gZmFpbCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBsYXllcnNXaXRoU3VnZ2VzdGlvbnMgPSB5aWVsZCBhc3luY0ZpbHRlcihzZWxlY3RlZFRleHRMYXllcnMsIChpdGVtKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGxldCByZXBvcnQgPSBcIlwiO1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5yZXNvbHZlKGxpbnRNeVRleHQoaXRlbS5jaGFyYWN0ZXJzLCBsb2NhbEN1c3RvbURpY3Rpb25hcnkpKS50aGVuKChyZXN1bHQpID0+IChyZXBvcnQgPSByZXN1bHQpKTtcbiAgICAgICAgICAgIGlmIChyZXBvcnQubWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFdpdGhFbnVtZXJhYmxlUHJvcHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlcG9ydC5tZXNzYWdlcykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbmltYWxSZXBvcnQgPSByZXBvcnRXaXRoRW51bWVyYWJsZVByb3BzLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBtZXNzYWdlLmFjdHVhbCxcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IG1lc3NhZ2UuZXhwZWN0ZWQuc2xpY2UoMCwgMyksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGU6IG1lc3NhZ2Uuc291cmNlLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHQtbGludGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWFsUmVwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFJlcG9ydDogcmVwb3J0V2l0aEVudW1lcmFibGVQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LCBcIipcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gISEoKF9hID0gcmVwb3J0Lm1lc3NhZ2VzWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgc2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucyhsYXllcnNXaXRoU3VnZ2VzdGlvbnMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGFkZFRvRGljdGlvbmFyeSA9ICh3b3JkVG9BZGQsIHN1Z2dlc3Rpb25JZCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYWRkLXRvLWRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICB3b3JkVG9BZGQ6IHdvcmRUb0FkZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb3ZpZGVTYW1wbGVUZXh0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBsYXllcklzU2VsZWN0ZWQgPSBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNBdmFpbGFibGUgPSB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghbGF5ZXJJc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsYXllcklzU2VsZWN0ZWQgJiYgIXN1Z2dlc3Rpb25zQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJIZWxsbywgV29ybGRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzYW1wbGVUZXh0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwibGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgIFwic2VsZWN0aW9uLWhhcy1jaGFuZ2VkXCI6IHNlbGVjdGlvbkhhc0NoYW5nZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgeyBjbGFzc05hbWU6IFwidGV4dC1sYXllci1uYXZcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwibmF2LWFycm93IGxlZnQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVRleHRMYXllck5hdmlnYXRpb24oXCJwcmV2aW91c1wiKSwgZGlzYWJsZWQ6IHNhbXBsZVRleHRJbmRleCAtIDEgPCAwIH0pLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwibmF2LWFycm93IHJpZ2h0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUZXh0TGF5ZXJOYXZpZ2F0aW9uKFwibmV4dFwiKSwgZGlzYWJsZWQ6IHNhbXBsZVRleHRJbmRleCArIDEgPj0gbWF4VGV4dEluZGV4IH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGFuZ3VhZ2VMaW50ZXIsIHsgc2FtcGxlVGV4dDogcHJvdmlkZVNhbXBsZVRleHQoKSwgc2V0U2FtcGxlVGV4dDogdXBkYXRlU291cmNlVGV4dCwgdXBkYXRlVGltZXI6IDEwMCwgY3VzdG9tRGljdGlvbmFyeTogbG9jYWxDdXN0b21EaWN0aW9uYXJ5LCBhZGRUb0RpY3Rpb25hcnk6IGFkZFRvRGljdGlvbmFyeSwgb3BlbkxpbmtzSW5OZXdUYWI6IHRydWUgfSksXG4gICAgICAgICAgICBzZWxlY3Rpb25IYXNDaGFuZ2VkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctZm9vdGVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiBsaW50U2VsZWN0ZWRMYXllcnMoKSB9LCBcIkNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uXCIpKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgTGFuZ3VhZ2VMaW50ZXJQbHVnaW47XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IEhvbWUgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IHNldEFjdGl2ZVBsdWdpbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgUGx1Z2luVGlsZSA9IChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7IGhlYWRpbmcsIGRlc2NyaXB0aW9uLCBvbkNsaWNrLCBwbHVnaW5OYW1lIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3QgdGlsZUNsYXNzZXMgPSB7XG4gICAgICAgICAgICB0YWJsZUNyZWF0b3I6IFwidGFibGUtY3JlYXRvclwiLFxuICAgICAgICAgICAgdGhlbWVTd2l0Y2hlcjogXCJ0aGVtZS1zd2l0Y2hlclwiLFxuICAgICAgICAgICAgZGVzaWduTGludGVyOiBcImRlc2lnbi1saW50ZXJcIixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBgcGx1Z2luLXRpbGUtY29udGFpbmVyICR7dGlsZUNsYXNzZXNbcGx1Z2luTmFtZV19YCwgb25DbGljazogKCkgPT4gb25DbGljaygpIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWljb25cIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicGx1Z2luLXRpbGUtY29weVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWhlYWRpbmdcIiB9LCBoZWFkaW5nKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1kZXNjcmlwdGlvblwiIH0sIGRlc2NyaXB0aW9uKSkpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJob21lLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luVGlsZSwgeyBwbHVnaW5OYW1lOiBcInRhYmxlQ3JlYXRvclwiLCBoZWFkaW5nOiBcIlRhYmxlIGNyZWF0b3JcIiwgZGVzY3JpcHRpb246IFwiQ3JlYXRlIE9uZSBDb3JlIHRhYmxlcyB3aXRoIHlvdXIgY2VsbCBhbmQgY29sdW1uIHNldHRpbmdzLlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJ0YWJsZS1jcmVhdG9yXCIpIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpblRpbGUsIHsgcGx1Z2luTmFtZTogXCJ0aGVtZVN3aXRjaGVyXCIsIGhlYWRpbmc6IFwiVGhlbWUgc3dpdGNoZXJcIiwgZGVzY3JpcHRpb246IFwiQSBkYXJrIG1vZGUgb3IgbGlnaHQgbW9kZSBzZXR0aW5nIGZvciB5b3VyIGxheWVyc1wiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJ0aGVtZS1zd2l0Y2hlclwiKSB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQbHVnaW5UaWxlLCB7IHBsdWdpbk5hbWU6IFwiZGVzaWduTGludGVyXCIsIGhlYWRpbmc6IFwiRGVzaWduIGxpbnRlclwiLCBkZXNjcmlwdGlvbjogXCJDaGVja3MgeW91ciBsYXllcnMgZm9yIGNvbG9yIHN0eWxlcywgYW5kIHNvb24gd2lsbCBjaGVjayBmb3IgbGFuZ3VhZ2UgdG9vLlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJjb2xvci1saW50ZXJcIikgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImhvbWUtc3VwcG9ydFwiIH0sXG4gICAgICAgICAgICBcIlJlcG9ydCBhIGJ1Zywgc2hhcmUgYSBmZWF0dXJlIGlkZWEsIG9yIGdldCBzdXBwb3J0IGF0XCIsXG4gICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwgbnVsbCwgXCIjaGVscC1vbmUtY29yZVwiKSxcbiAgICAgICAgICAgIFwiLlwiKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEhvbWU7XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgY29uc3QgUGx1Z2luQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQobnVsbCk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmNvbnN0IFJlc2l6ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVzaXplclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbcHJlc3NlZCwgc2V0UHJlc3NlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgICAgIHNldFByZXNzZWQodHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IChlKSA9PiB7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgICAgIHNldFByZXNzZWQoZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXNzZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicmVzaXplXCIsIHNpemU6IHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFkgfSB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBoYW5kbGVQb2ludGVyRG93bik7XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICAgICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICB9O1xuICAgIH0sIFtwcmVzc2VkXSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IHJlc2l6ZXJSZWYsIGNsYXNzTmFtZTogXCJyZXNpemVyXCIgfSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgUmVzaXplcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbHVtbkNvbmZpZ3VyYXRpb24gPSAoeyBjcmVhdGVUYWJsZSwgZ29Ub0RpbWVuc2lvbnNTZWxlY3Rpb24sIGFjdGl2ZUNvbCwgY29sdW1uQ29uZmlndXJhdGlvbiwgc2V0Q29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuLCBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUgPSAoYXR0cikgPT4ge1xuICAgICAgICBsZXQgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5ID0gWy4uLmNvbHVtbkNvbmZpZ3VyYXRpb25dO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXlbYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bYXR0cl0gPVxuICAgICAgICAgICAgYXR0ciAhPT0gXCJtdWx0aVZhbHVlXCIgPyBlbGVtZW50LnZhbHVlIDogZWxlbWVudC5jaGVja2VkO1xuICAgICAgICBpZiAoY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW2F0dHJdID09PSAnbWV0cmljJykge1xuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dWydhbGlnbm1lbnQnXSA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q29sdW1uQ29uZmlndXJhdGlvbihjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTmF2QnV0dG9uQ2xpY2sgPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicHJldmlvdXNcIiAmJiBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSAwKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwibmV4dFwiICYmXG4gICAgICAgICAgICBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSBjb2x1bW5Db25maWd1cmF0aW9uLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4oYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVDb2x1bW5PcHRpb25TZWxlY3Rpb24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSAtIDEpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLW5hdlwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyBsZWZ0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVOYXZCdXR0b25DbGljayhcInByZXZpb3VzXCIpLCBkaXNhYmxlZDogYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiA9PT0gMCB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IG5hbWU6IFwiY29sdW1uLXNlbGVjdGlvblwiLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93blwiLCBvbkNoYW5nZTogKGUpID0+IGhhbmRsZUNvbHVtbk9wdGlvblNlbGVjdGlvbihlKSwgdmFsdWU6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gKyAxIH0sIFsuLi5BcnJheShhY3RpdmVDb2wpLmtleXMoKV0ubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyBrZXk6IGluZGV4LCB2YWx1ZTogaW5kZXggKyAxLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93bi1vcHRpb25cIiB9LCBgQ29sdW1uICR7aW5kZXggKyAxfWApKTtcbiAgICAgICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJuYXYtYXJyb3cgcmlnaHQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZU5hdkJ1dHRvbkNsaWNrKFwibmV4dFwiKSwgZGlzYWJsZWQ6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gPT09IGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoIC0gMSB9KSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29uZmlndXJhdGlvbkJvZHkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpVmFsdWVEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsVHlwZSA9IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJjZWxsVHlwZVwiXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q2VsbFR5cGUgPT09IFwiVGV4dFwiIHx8XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxUeXBlID09PSBcInRleHRcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJtZXRyaWNcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keS1oZWFkaW5nc1wiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIG51bGwsIFwiQ2VsbCBmb3JtYXR0aW5nXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNlwiLCBudWxsLCBcIkNob29zZSB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGNlbGxzIGluIHRoaXMgY29sdW1uXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1uYW1lXCIgfSwgXCJDb2x1bW4gbmFtZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiwgbmFtZTogXCJjb2x1bW4tbmFtZVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tbmFtZS1pbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJlLmcuIGRhdGUsIGFjY291bnQsIHRocm91Z2hwdXQsIGV0Yy4gXCIsIGlkOiBcImNvbHVtbi1uYW1lXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwibmFtZVwiKSwgdmFsdWU6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJuYW1lXCJdIH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1jZWxsLXR5cGVcIiB9LCBcIkNlbGwgdHlwZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1pbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHsgbmFtZTogXCJhbGlnbm1lbnQtc2VsZWN0aW9uXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dCBjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXRcIiwgaWQ6IFwiY29sdW1uLWNlbGwtdHlwZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcImNlbGxUeXBlXCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImNlbGxUeXBlXCJdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiVGV4dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJsaW5rXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJMaW5rXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcIm1ldHJpY1wiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiTWV0cmljXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImVudGl0eVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiRW50aXR5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImZhdm9yaXRlXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJGYXZvcml0ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJ1c2VyXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJVc2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJDaGVja2JveFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJhY3Rpb25zXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJBY3Rpb25zXCIpKSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiY29sdW1uLWFsaWdubWVudFwiIH0sIFwiQWxpZ25tZW50XCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBuYW1lOiBcImFsaWdubWVudC1zZWxlY3Rpb25cIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0IGNvbHVtbi1jb25maWd1cmF0aW9uLWFsaWdubWVudC1pbnB1dFwiLCBpZDogXCJjb2x1bW4tYWxpZ25tZW50XCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwiYWxpZ25tZW50XCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImFsaWdubWVudFwiXSwgZGlzYWJsZWQ6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bJ2NlbGxUeXBlJ10gPT09ICdtZXRyaWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwibGVmdFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiTGVmdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJyaWdodFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiUmlnaHRcIikpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIsIGh0bWxGb3I6IFwiY29sdW1uLW11bHRpLXZhbHVlXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IFwibGFiZWxcIiB9LCBcIk11bHRpLXZhbHVlXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGB1aS1zd2l0Y2ggJHttdWx0aVZhbHVlRGlzYWJsZWQoKSA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9YCB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcImNoZWNrYm94XCIsIGlkOiBcImNvbHVtbi1tdWx0aS12YWx1ZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcIm11bHRpVmFsdWVcIiksIGNoZWNrZWQ6ICFtdWx0aVZhbHVlRGlzYWJsZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcIm11bHRpVmFsdWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlLCBkaXNhYmxlZDogbXVsdGlWYWx1ZURpc2FibGVkKCkgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNsaWRlciByb3VuZFwiIH0pKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNhbGxzVG9BY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuXCIsIG9uQ2xpY2s6IGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uIH0sIFwiQmFja1wiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jcmVhdGUtdGFibGVcIiwgb25DbGljazogY3JlYXRlVGFibGUgfSwgXCJDcmVhdGUgdGFibGVcIikpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb25maWd1cmF0aW9uQm9keSgpLFxuICAgICAgICAgICAgcmVuZGVyQ2FsbHNUb0FjdGlvbigpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IENvbHVtbkNvbmZpZ3VyYXRpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBEaW1lbnNpb25zU2VsZWN0aW9uID0gKHsgaGFuZGxlR3JpZFNxdWFyZUNsaWNrLCBhY3RpdmVDb2wsIGFjdGl2ZVJvdywgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzLCBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFtob3ZlcmVkQ29sLCBzZXRIb3ZlcmVkQ29sXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtob3ZlcmVkUm93LCBzZXRIb3ZlcmVkUm93XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFt0YWJsZUhvdmVyZWQsIHNldFRhYmxlSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaGFuZGxlR3JpZFNxdWFyZU1vdXNlRW50ZXIgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEhvdmVyZWRDb2woY29sSW5kZXgpO1xuICAgICAgICBzZXRIb3ZlcmVkUm93KHJvd0luZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRhYmxlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCB7IGNsYXNzTmFtZTogYGdyaWQtc2VsZWN0b3IgJHt0YWJsZUhvdmVyZWQgPyBcImhvdmVyZWRcIiA6IFwiXCJ9YCwgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRUYWJsZUhvdmVyZWQodHJ1ZSksIG9uTW91c2VMZWF2ZTogKCkgPT4gc2V0VGFibGVIb3ZlcmVkKGZhbHNlKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIFsuLi5BcnJheSg4KS5rZXlzKCldLm1hcCgocm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCB7IGtleTogcm93SW5kZXggfSwgWy4uLkFycmF5KDgpLmtleXMoKV0ubWFwKChjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCB7IGNsYXNzTmFtZTogYGlucHV0X19yYWRpb2AsIGtleTogY29sSW5kZXggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwicmFkaW9cIiwgaWQ6IGB0JHtyb3dJbmRleCArIDF9eCR7Y29sSW5kZXggKyAxfWAsIG5hbWU6IFwic2VsZWN0aW9uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBgdCR7cm93SW5kZXggKyAxfXgke2NvbEluZGV4ICsgMX1gLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVNb3VzZUVudGVyKGNvbEluZGV4LCByb3dJbmRleCksIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVDbGljayhjb2xJbmRleCwgcm93SW5kZXgpLCBjbGFzc05hbWU6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2xJbmRleCA8PSBob3ZlcmVkQ29sICYmIHJvd0luZGV4IDw9IGhvdmVyZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImhvdmVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbEluZGV4IDwgYWN0aXZlQ29sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4IDwgYWN0aXZlUm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoYWN0aXZlUm93ID09PSAwICYmIGFjdGl2ZUNvbCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1gIH0pKSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGFibGUtZGltZW5zaW9ucy1jb25maWdcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwibnVtYmVyLW9mLWNvbHNcIiB9LCBcIkNvbHVtbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJudW1iZXJcIiwgbWluOiBcIjBcIiwgbWF4OiBcIjI0XCIsIG5hbWU6IFwibnVtYmVyLW9mLWNvbHNcIiwgaWQ6IFwibnVtYmVyLW9mLWNvbHNcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1jb2xzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJjb2xcIiksIHZhbHVlOiBhY3RpdmVDb2wgPT09IDAgJiYgYWN0aXZlUm93ID09PSAwID8gXCJcIiA6IGFjdGl2ZUNvbCwgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkQ29sICsgMSkudG9TdHJpbmcoKSA6IFwiKDI0IG1heClcIiB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJudW1iZXItb2Ytcm93c1wiIH0sIFwiUm93c1wiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcIm51bWJlclwiLCBtaW46IFwiMFwiLCBtYXg6IFwiMTAwXCIsIG5hbWU6IFwibnVtYmVyLW9mLXJvd3NcIiwgaWQ6IFwibnVtYmVyLW9mLXJvd3NcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1yb3dzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJyb3dcIiksIHZhbHVlOiBhY3RpdmVSb3cgPT09IDAgJiYgYWN0aXZlQ29sID09PSAwID8gXCJcIiA6IGFjdGl2ZVJvdywgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkUm93ICsgMSkudG9TdHJpbmcoKSA6IFwiKDEwMCBtYXgpXCIgfSkpKSxcbiAgICAgICAgcmVuZGVyVGFibGUoKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyIGRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDZcIiwgbnVsbCwgXCIoTWF4OiAyNCBjb2x1bW5zIGFuZCAxMDAgcm93cylcIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgZGlzYWJsZWQ6IGFjdGl2ZUNvbCA8IDEsIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnkgYnRuLWNyZWF0ZS10YWJsZVwiLCBvbkNsaWNrOiBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiB9LCBcIkNvbnRpbnVlXCIpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERpbWVuc2lvbnNTZWxlY3Rpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBDb2x1bW5Db25maWd1cmF0aW9uIGZyb20gXCIuL0NvbHVtbkNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBEaW1lbnNpb25zU2VsZWN0aW9uIGZyb20gXCIuL0RpbWVuc2lvbnNTZWxlY3Rpb25cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IFRhYmxlQ3JlYXRvciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luIH0gPSBwcm9wcztcbiAgICBjb25zdCBbYWN0aXZlVGFiXSA9IHVzZVN0YXRlKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICBjb25zdCBbYWN0aXZlU2NyZWVuLCBzZXRBY3RpdmVTY3JlZW5dID0gdXNlU3RhdGUoXCJEaW1lbnNpb25zU2VsZWN0aW9uXCIpO1xuICAgIGNvbnN0IFthY3RpdmVDb2wsIHNldEFjdGl2ZUNvbF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbYWN0aXZlUm93LCBzZXRBY3RpdmVSb3ddID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2NvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb25dID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGxldCBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBbXTtcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBbLi4uQXJyYXkoYWN0aXZlQ29sKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICBjZWxsVHlwZTogXCJUZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpVmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sdW1uQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBjb2x1bW5Db25maWd1cmF0aW9uO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5sZW5ndGggPiBhY3RpdmVDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zVG9SZW1vdmUgPSBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkubGVuZ3RoIC0gYWN0aXZlQ29sO1xuICAgICAgICAgICAgICAgIFsuLi5BcnJheShjb2x1bW5zVG9SZW1vdmUpLmtleXMoKV0ubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1RvQWRkID0gYWN0aXZlQ29sIC0gY29sdW1uQ29uZmlndXJhdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBbLi4uQXJyYXkoY29sdW1uc1RvQWRkKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFR5cGU6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldENvbHVtbkNvbmZpZ3VyYXRpb24oY29sdW1uQ29uZmlndXJhdGlvbkFycmF5KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdChoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uLCBbYWN0aXZlQ29sXSk7XG4gICAgY29uc3QgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzID0gKHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgbGV0IHsgdmFsdWUsIG1pbiwgbWF4IH0gPSBlbGVtZW50O1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBNYXRoLm1heChOdW1iZXIobWluKSwgTWF0aC5taW4oTnVtYmVyKG1heCksIE51bWJlcih2YWx1ZSkpKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiY29sXCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbChjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwicm93XCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVJvdyhjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVHcmlkU3F1YXJlQ2xpY2sgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZUNvbChjb2xJbmRleCArIDEpO1xuICAgICAgICBzZXRBY3RpdmVSb3cocm93SW5kZXggKyAxKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRhYmxlID0gKCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY3JlYXRlLXRhYmxlXCIsXG4gICAgICAgICAgICAgICAgY29sczogYWN0aXZlQ29sLFxuICAgICAgICAgICAgICAgIHJvd3M6IGFjdGl2ZVJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uOiBjb2x1bW5Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwiY3JlYXRpb24tZmVlZGJhY2tcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uID0gKCkgPT4ge1xuICAgICAgICBzZXRBY3RpdmVTY3JlZW4oXCJDb2x1bW5Db25maWd1cmF0aW9uXCIpO1xuICAgIH07XG4gICAgY29uc3QgZ29Ub0RpbWVuc2lvbnNTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVNjcmVlbihcIkRpbWVuc2lvbnNTZWxlY3Rpb25cIik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUYWJsZUNyZWF0b3IgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiRGltZW5zaW9uc1NlbGVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGltZW5zaW9uc1NlbGVjdGlvbiwgeyBoYW5kbGVHcmlkU3F1YXJlQ2xpY2s6IGhhbmRsZUdyaWRTcXVhcmVDbGljaywgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGFjdGl2ZVJvdzogYWN0aXZlUm93LCBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHM6IGhhbmRlR3JpZFNlbGVjdGlvbklucHV0cywgZ29Ub0NvbHVtbkNvbmZpZ3VyYXRpb246IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiQ29sdW1uQ29uZmlndXJhdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sdW1uQ29uZmlndXJhdGlvbiwgeyBjcmVhdGVUYWJsZTogY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uOiBnb1RvRGltZW5zaW9uc1NlbGVjdGlvbiwgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGNvbHVtbkNvbmZpZ3VyYXRpb246IGNvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb246IHNldENvbHVtbkNvbmZpZ3VyYXRpb24gfSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRhYmxlLWNyZWF0b3JcIl07XG4gICAgICAgIHJldHVybiB0YWJzLm1hcCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXMgPSBbXCJ0YWItbmF2aWdhdGlvbi10YWJcIl07XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICBsZXQgdGFiTGFiZWwgPSB0YWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0YWIuc3BsaXQoXCItXCIpLmpvaW4oXCIgXCIpLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVUYWIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXMucHVzaChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBrZXk6IGluZGV4IH0sIHRhYkxhYmVsKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgcmVuZGVyVGFibGVDcmVhdG9yKCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNyZWF0b3I7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmltcG9ydCBMaWdodE1vZGVUaHVtYm5haWwgZnJvbSBcIi4uL2Fzc2V0cy9saWdodC1tb2RlLXRodW1ibmFpbC5zdmdcIjtcbmltcG9ydCBEYXJrTW9kZVRodW1ibmFpbCBmcm9tIFwiLi4vYXNzZXRzL2RhcmstbW9kZS10aHVtYm5haWwuc3ZnXCI7XG5jb25zdCBUaGVtZVN3aXRjaGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb24sIGxvYWRpbmdMaWdodFN3aXRjaCwgbG9hZGluZ0RhcmtTd2l0Y2ggfSA9IHN0YXRlO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdMaWdodFN3aXRjaCwgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdEYXJrU3dpdGNoLCBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB7IHNldEFjdGl2ZVBsdWdpbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlnaHRNb2RlUmFkaW9PcHRpb24gPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgZGFya01vZGVSYWRpb09wdGlvbiA9IHVzZVJlZihudWxsKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoKGN1cnJlbnRTZWxlY3Rpb24gPT09IG51bGwgfHwgY3VycmVudFNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpID4gW10pIHtcbiAgICAgICAgICAgIGxpZ2h0TW9kZVJhZGlvT3B0aW9uLmN1cnJlbnQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGFya01vZGVSYWRpb09wdGlvbi5jdXJyZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sIFtjdXJyZW50U2VsZWN0aW9uXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbG9hZGluZ0xpZ2h0U3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdMaWdodFN3aXRjaChmYWxzZSk7XG4gICAgfSwgW2xvYWRpbmdMaWdodFN3aXRjaF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmdEYXJrU3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKGZhbHNlKTtcbiAgICB9LCBbbG9hZGluZ0RhcmtTd2l0Y2hdKTtcbiAgICBjb25zdCBoYW5kbGVUYWJDbGljayA9IChuYW1lT2ZUYWIpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKG5hbWVPZlRhYik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRoZW1lLXN3aXRjaGVyXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCIsIFwiYWN0aXZlXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IHRhYkNsYXNzZXNPdXRwdXQsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVRhYkNsaWNrKHRhYiksIGtleTogaW5kZXggfSwgXCJUaGVtZSBzd2l0Y2hlclwiKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0RGFya1RoZW1lID0gKCkgPT4ge1xuICAgICAgICBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwidGhlbWUtc3dpdGNoZXItdG8tZGFya1wiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0TGlnaHRUaGVtZSA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2godHJ1ZSk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJ0aGVtZS1zd2l0Y2hlci10by1saWdodFwiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zd2l0Y2hlci1oZWFkaW5nXCIgfSwgXCJDaG9vc2UgYSB0aGVtZVwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uXCIgfSwgXCJTZWxlY3Qgc29tZSBsYXllcnMsIHRoZW4gY2hvc2UgYSB0aGVtZSBiZWxvdy5cIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1vcHRpb25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInJhZGlvXCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXRcIiwgaWQ6IFwibGlnaHQtbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGxpZ2h0TW9kZVJhZGlvT3B0aW9uIH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImxpZ2h0LW1vZGUtY2hlY2tib3hcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1pbnB1dC1sYWJlbFwiLCBvbkNsaWNrOiAoKSA9PiBzZXRMaWdodFRoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IExpZ2h0TW9kZVRodW1ibmFpbCwgYWx0OiBcIlRodW1ibmFpbCBvZiBsaWdodCBzY3JlZW4gZXhhbXBsZVwiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHRcIiB9LCBcIkxpZ2h0IG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdMaWdodFN3aXRjaCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWxvYWRlclwiIH0pKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tb3B0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJyYWRpb1wiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWlucHV0XCIsIGlkOiBcImRhcmstbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGRhcmtNb2RlUmFkaW9PcHRpb24gfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiZGFyay1tb2RlLWNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWxcIiwgb25DbGljazogKCkgPT4gc2V0RGFya1RoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IERhcmtNb2RlVGh1bWJuYWlsLCBhbHQ6IFwiVGh1bWJuYWlsIG9mIGRhcmsgc2NyZWVuIGV4YW1wbGVcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2VcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1sYWJlbC10ZXh0XCIgfSwgXCJEYXJrIG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdEYXJrU3dpdGNoICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItbG9hZGVyXCIgfSkpKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGhlbWVTd2l0Y2hlcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgQXBwIGZyb20gJy4vY29tcG9uZW50cy9BcHAnO1xuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwLCBudWxsKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWN0LXBhZ2UnKSk7XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3VpLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIi8qIVxuICogQ2hlY2sgaWYgdHdvIG9iamVjdHMgb3IgYXJyYXlzIGFyZSBlcXVhbFxuICogKGMpIDIwMjEgQ2hyaXMgRmVyZGluYW5kaSwgTUlUIExpY2Vuc2UsIGh0dHBzOi8vZ29tYWtldGhpbmdzLmNvbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMSBUaGUgZmlyc3QgaXRlbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMiBUaGUgc2Vjb25kIGl0ZW1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGV5J3JlIGVxdWFsIGluIHZhbHVlXG4gKi9cbmNvbnN0IGlzRXF1YWwgPSAob2JqMSwgb2JqMikgPT4ge1xuICAvKipcbiAgICogTW9yZSBhY2N1cmF0ZWx5IGNoZWNrIHRoZSB0eXBlIG9mIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvYmogVGhlIG9iamVjdFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICBUaGUgb2JqZWN0IHR5cGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldFR5cGUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwoKSB7XG4gICAgLy8gQ2hlY2sgbGVuZ3RoXG4gICAgaWYgKG9iajEubGVuZ3RoICE9PSBvYmoyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqMS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0VxdWFsKG9iajFbaV0sIG9iajJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlT2JqZWN0c0VxdWFsKCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhvYmoxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBvYmplY3RcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoxLCBrZXkpKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVGdW5jdGlvbnNFcXVhbCgpIHtcbiAgICByZXR1cm4gb2JqMS50b1N0cmluZygpID09PSBvYmoyLnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVQcmltYXRpdmVzRXF1YWwoKSB7XG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XG4gIH1cblxuICAvLyBHZXQgdGhlIG9iamVjdCB0eXBlXG4gIGxldCB0eXBlID0gZ2V0VHlwZShvYmoxKTtcblxuICAvLyBJZiB0aGUgdHdvIGl0ZW1zIGFyZSBub3QgdGhlIHNhbWUgdHlwZSwgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlICE9PSBnZXRUeXBlKG9iajIpKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBiYXNlZCBvbiB0eXBlXG4gIGlmICh0eXBlID09PSBcImFycmF5XCIpIHJldHVybiBhcmVBcnJheXNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIGFyZU9iamVjdHNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gYXJlRnVuY3Rpb25zRXF1YWwoKTtcbiAgcmV0dXJuIGFyZVByaW1hdGl2ZXNFcXVhbCgpO1xufTtcblxuZXhwb3J0IHsgaXNFcXVhbCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== >>>>>>> f3ba81b (fix(TableCreator): Adjust colors and placeholders)